0

スキーマ関係を作成する際にどちらを選択するのが良いかについて、ここでいくつかの専門的なアイデアを得るようにしてください

この投稿から大まかにアイデアを見つけましたが、それでもさらに考えを深めようとしています。

簡単なシナリオは次のようになります。

class <--> Student <--> Teacher <--> class

(教師は複数のクラスを教えることができると仮定します)many-to-manyラウンドで関係を持つ通常のシナリオです。また、クエリは任意のピアから任意の方向に開始できます。では、より良いデザインとは何でしょうか?

1対1の関係では、マッピングテーブルは間違いなく無駄であることを知っていますが、その投稿が言及したように、マッピングテーブルソリューションは関係にONLY適していますか? many-to-many方向との多対多の関係を拡張したい場合。関係がone-directionではなく の場合bidirectional、答えは異なるでしょうか?

前もって感謝します。

4

2 に答える 2

4

いくつかの簡単なルール:

1 対 1 のリレーションシップの場合、リレーションシップに含まれるいずれかのテーブルで外部キーを保持し、もう一方のテーブルを参照できます。

1 対多の関係の場合、関係の多側のテーブルが外部キーを保持する必要があります。

多対多の関係の場合、関連テーブル (用語ではマッピング テーブル) を作成できます。これは、多対多の関係に含まれる両方のテーブルへの外部キーを保持する 3 番目のテーブルです。

たとえば、テーブルSTUDENTCLASS、およびがあるとしTEACHERます。一般に、 と の間には多対多の関係がSTUDENTありCLASS、TEACHER から CLASS へは 1 対多の関係があります (クラスに 1 人の教師しかいないと仮定)。したがって、これらのテーブルは次のようになります。

STUDENT: STUDENT_ID, STUDENT_NAME, etc.
CLASS: CLASS_ID, TEACHER_ID (foreign key), CLASS_NAME, etc.
TEACHER: TEACHER_ID, NAME, etc.
STUDENT_CLASS (mapping table): STUDENT_ID (foreign key), CLASS_ID (foreign key), GRADE, etc.
于 2012-12-05T21:57:31.130 に答える
1

多対多の関係がある場合は、はい、マッピング テーブルが必要です。多対多のリレーションシップに関する情報をリレーショナル データベースに保存する合理的な方法は他にありません (もちろん、そうするのには多くの不合理な方法があります)。

関係を一方向にしたい場合 (これは非常に奇妙に思えます。エンティティ A がエンティティ B と関係を持ち、B が A と関係を持たないという状況は想像できないので、データがそのようなものを実装したい場合、モデルは正しくありません)、マッピング テーブルを引き続き使用します。を格納するマッピング テーブルに別の列を追加することになるでしょうDIRECTION(つまり、'A -> B' または 'B -> A' のいずれか)。

于 2012-12-05T21:53:21.537 に答える