1

私は3つのテーブルMovies、MoviesWatched、Person1 ....nを持っています

Movies table:
M_ID, Title, Director, etc..

MovieWatched table:
M_ID, DateWatched, (Person who watched movie)

Person1...n table:
MovieOwned(Same as M_ID), NumberOfViews, ________

基本的に、ユーザーごとに、ムービー ライブラリに存在する MovieID を保持する個別の Person テーブルが作成されます。MovieWatched テーブルを Person1...n テーブルにリンクする方法を見つけようとしています。これまでのところ、私が目にする唯一の方法は、行内の各映画の P_ID を持つことです。各 Person テーブルの行に常に同じ P_ID が含まれるようになるため、別の方法を探しています。

別の方法は、すべての人を収容する 1 つのテーブルを用意することです。これの欠点は、movieID を保持するためにテーブルに 1...n 列が必要であり、複数の列が NULL のままになることです。

各 Person テーブルは tablename 自体で一意になるため、所有する映画ごとに行で PersonID を繰り返す必要がないように、テーブル名を MoviesWatched のフィールドとして参照できるかどうか疑問に思っています。

4

2 に答える 2

2

あなたは多対多の関係を説明しているようです。これは通常、ジャンクション テーブルを使用して解決されます。

映画の表:
M_ID, Title, Director, etc...

人物表:
P_ID, Name, etc...

MovieWatched テーブル:
M_ID, P_ID, DateWatched

任意の数の映画を任意の数の人々に関連付ける方法がわかりますか? したがって、「多対多」です。

所有する映画にも同じ概念を適用できます。

また、参照整合性も設定します。これは、データベースがデータに適用する制約です。この場合、MovieWatched.M_ID は、Movies.M_ID への外部キーである必要があります。Person.P_ID も同様です。これにより、孤立したレコード、または MovieWatched には存在する可能性があるが Person または Movies には存在しない可能性のあるレコード (人を削除するが、視聴した映画は削除しないことを想像してください) がデータベースに含まれなくなります。

各ユーザーが各映画を 1 回だけ表示できるようにする場合は、MovieWatched (M_ID、P_ID) に一意の制約を設定することもできます (これはジャンクション テーブルでよく発生しますが、本質的に映画のログが必要な場合は意味がない場合があります)。見た)。

于 2013-10-08T16:39:28.980 に答える
1

あなたのMoviesWatchedテーブルは正しい方向に進んでいます。リレーショナル データベースのテーブルはエンティティまたはリレーションシップを表すことができると考えてください。

他のテーブルからの ID で映画を参照することで、半分が完了しました。Persons についても同じことを行う必要があります。

Movies table:
M_ID, Title, Director, etc..

Person table:
P_ID, Name, Other attributes of an individual person...

MovieWatched table:
M_ID, P_ID, DateWatched

MovieOwned table:
M_ID, P_ID, NumberOfViews

後の 2 つの表に注意してください。これらの各テーブルの行は、特定の映画を視聴または所有している特定の人物のインスタンスを表します。エンティティ テーブル (映画と人を表す) に比較的少数の行があり、関係テーブル (誰かが映画を視聴するか所有するたびに表す) に比較的多数の行があることは、リレーショナル モデルの自然な結果です。 MySQL のようなデータベース エンジンは、それをサポートするように設計されています。

(別の注:技術的には、NumberOfViews のようなフィールドは、特定の人物と映画の MoviesWatched テーブルのエントリをカウントすることで計算でき、次に、フィールドを MovieOwned に格納して必要とするのではなく、その人物が映画も所有しているかどうかと関連付けることができます。それは、このモデルを適切に使用することで得られる一種の力です!)

于 2013-10-08T16:39:15.707 に答える