0

私のアプリケーションでは、DB (MySQL) に 2 つのテーブルがあります: CompaniesNews. Companyが多いNews

Companycompanyこの会社に関するすべての関連情報と一緒に「ビューページ」に表示される写真のセットを持つことができます。

Photos次のフィールドを含むテーブルを追加しました。id company_id filename

私の質問は次のとおりです。 に属する写真も必要Newsです。たとえば呼び出される別のテーブルを追加するか、テーブルに追加のMediaフィールド ( 2' に関連する写真を取得します。typePhotoscompany_idforeign_idAND 'type' = 1news

より良いアプローチは何ですか?

4

3 に答える 3

1

company_idテーブルからフィールドを取り出して、、、フィールドを含むPhotos2 つの新しいテーブルCompanyPhotosと、、を含む別のテーブルを作成する必要があります。idphoto_idcompany_idNewsPhotosidphoto_idnews_id

次に、会社の写真を取得したい場合は、次のようにしますselect * from Photos p inner join CompanyPhoto cp on p.id = cp.photo_id where cp.company_id = ?

同様にNewsPhoto: select * from Photos p inner join NewsPhoto np on p.id = np.photo_id where np.news_id = ?.

于 2013-02-26T18:56:46.440 に答える
0

UUIDs主キーとして使用できます。これらはアプリケーション全体で一意であるため(CakePHPで作成した場合)、parent_idPhotosテーブルの列を使用して列を削除することができますtype

別のアプローチはMySQLビューです。写真テーブルの上に2つのビュー(NewsPhotos、CompanyPhotosなど)を設定できます。CakePHPはテーブルのような(単純な)ビューを処理するので、このためのモデルとコントローラーを簡単に作成できます。

于 2013-02-27T10:47:48.313 に答える
0

データベースを正規化することは常に良いことです。最初は、すべてのデータを含むテーブルだけでしたが、共通のフィールドを持つリンク テーブルに進化しました。

したがって、テーブルを用意することを強くお勧めしますPhotos

結局のところ、基本的な質問をしなければなりません: 写真は別のニュースに属することができますか? ニュースに異なる写真を含めることはできますか? 両方の質問の答えが「はい」の場合、N:M の関係があり、すべてのテーブルの ID を含む中央のテーブルで解決されます。

于 2013-02-26T18:56:36.493 に答える