2011-01-14 11 views
1

ユーザー、イベント、グループ、ネットワーク、ページのいずれかに属する写真アルバムの関係を作成するにはどうすればいいですか?可能であれば、複数の所有者を後でサポートすることもできます。フォトアルバムの複数の所有者 - スキーマの質問

1つの方法は、アルバムテーブルに列があり、そのうちの1つにFK IDがあり、残りがnullであることです。しかし、問題は私がもっと多くの所有者のタイプを追加しているからです。私はテーブルを変えて列を追加しなければなりません。

もう1つの方法は、これらの所有者の種類ごとに別々の写真テーブルを用意することです。

これらの方法はどれもうまくスケールされません。スケールしますつのテーブルから別の所有者のタイプについてのフォトアルバムを所有する任意の他の方法(意味は読み取りパフォーマンスは私の#1の要件であるとして、以下が参加し、照会することは容易で持っている?

プラットフォームは、MySQL/PHPである。

答えて

2

純粋に物理的ではなく概念データモデルで問題を考える。あなたがOOの仕事をしているなら、これも大丈夫です。 CDM

半円は継承演算子です。したがって、イベント、ユーザー、ネットワーク、ページはすべて所有者から継承されます。

これを物理モデルに生成するときは、これらの設定を使用します。

alt text

あなたは写真と共通の属性のすべてを所有することができ、すべてのテーブルを取得するこの方法です。次に、各子テーブルは親からPIを継承し、固有の属性を持ちます。写真テーブルのFKはオーナーテーブルに移動します。

写真の多くのオーナーの今後の目標は、写真の表のFKとしてオーナーIDから所有者と写真の間のmany:to:manyマッピングテーブルに変更されます。これらのコンストラクトを使用すると本当に簡単です。

+0

これは動作します!私は別の方法を考えた。 – Cory

2

3つの列、アルバムFK、所有者FK、所有者タイプがオーナー、偶数、グループなどの列挙型のテーブルを作成します。

+0

これは「オーナーFK」という質問です。FKにはどこですか?ユーザーテーブル、イベントテーブル、ページテーブルなど?私の知る限り、テーブル内の1つの列にFKすることしかできませんか、1つの列から複数のテーブルにFKできますか? – Cory

+0

テーブルあたり1つのFKです。コードは、どのタイプを設定すべきかをタイプによって決定します。 – JOTN

+0

JOTNは言った。たとえば、1つのアルバムがユーザ1に所有され、別のアルバムがグループ1に所有されている場合、両方のレコードのオーナーFKは1になります。ただし、最初のタイプフィールドはユーザに対応し、2番目のグループはグループに対応します。 –

関連する問題