2011-02-10 7 views
1

私は次のようにいくつかのアドバイスを得る可能性がある場合、私はちょうど思っていた:PHP/MySQLの関係テーブルアドバイス

私はコンテンツタイプ「portfolio_itemを」存在するのCodeIgniterでサイトを構築しています。 同じポートフォリオ明細は、チェックボックスのコントロール: ホームページ、メンバーページ、およびクライアントページを介して3か所に表示されます。

私は、この関係をデータベースに実装する最良の方法が何であるか考えています。私は上記のシナリオごとに3つの関係テーブルを持つことができますが、私にとってはこれは過剰な(サイトはかなり小さい)ようです。

私は、次のフィールドと1つの関係テーブルを使用して考えた:

type (homepage, client or member) 
show_on_id 
portfolio_id 

タイプフィールドの意図は(クライアントまたはメンバーのいずれか)から「show_on_id」を取得するために、どのテーブルかを決定することである、場合タイプがホームページの場合、show_on_idは必須ではありません。

このようにすることの明らかな欠点はありますか?

答えて

3

はい、いくつかの欠点があります。同じ設定で複数行になる可能性があり、それぞれが互いに矛盾する可能性があります。したがって、このテーブルに行を挿入する方法は非常に重要です。自分のポートフォリオにユーザーをリンク

CREATE TABLE `portfolio` 
(`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
`content` TEXT NULL, 
`showHome` BOOLEAN NULL, 
`showClient` BOOLEAN NULL, 
`showMember` BOOLEAN NULL) 

そしてテーブル、あなたがしている場合

CREATE TABLE `portfolio_user` 
(`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
`portfolio` INT NOT NULL, 
`user` INT NOT NULL) 

:あなたは任意の複数のセクションを追加しない場合

、同様のポートフォリオテーブルを持っているかもしれませんポートフォリオを後で表示できる場所を追加したり、これらの場所が動的である場合は、メソッドが機能します。私はポートフォリオを表示できる場所を定義するために、ENUMや別のテーブルを使用して、「タイプ」を「場所」に変更するだけです。

0

それぞれの場所に1つまたは複数のポートフォリオ品目がありますか?

多くの場合、ポートフォリオにリンクするために直接外部キーフィールドを使用する場合は、リンクテーブルを使用します。

私は、正確にそのようなデザインの個人的な経験と、その後に起こる問題に基づいて、3つすべてのリンクテーブルを使用することに対してアドバイスします。