sql >> データベース >  >> RDS >> Mysql

多対多の関連付けで3番目のテーブルをブリッジテーブルにリンクする

    マットフェンウィックの+1。外部キーの制約に少し注意したいということを付け加えておきます。基本的に2つのオプションがあり、主キーの選択によっては、どちらも非常によく似たものになる可能性があります。

    オプション1 は:TEACHER間の単純な交差点を忘れてください およびINSTRUMENT teacher_idを含む複雑な交差点に置き換えます 、instrument_id およびlevel_id 。これらの3つの列はすべて、この交差テーブルの(複合)主キーになります。このオプションでは、teacher_idに外部キー制約が定義されています。 およびinstrument_id (およびlevel_id これが実際にLEVELへの外部キーである場合 整数または文字列コードだけでなく、テーブル)。

    オプション2 is:TEACHER間の単純な交差点を維持します およびINSTRUMENTTEACHER_INSTRUMENTと呼びましょう それは想像を絶するものですが)、教えることができるレベルを定義するサブ子テーブルを追加します。このサブ子テーブル(SKILLと呼びましょう )level_idがあります およびTEACHER_INSTRUMENTへの外部キー 。 TEACHER_INSTRUMENTの主キーの場合 teacher_idの組み合わせです およびinstrument_id 次に、SKILL テーブルには、オプション1と同じ3つの列があります。このオプションの違いは何ですか? からの外部キー制約 SKILL 交差点テーブルにある必要があります。 TEACHER および INSTRUMENT

    これが重要なのはなぜですか? オプション1を選択した場合、スキルの完全に入​​力されたグリッドを取得するために、追加のクエリロジックが必要になる場合があります。これは、教師と機器の組み合わせごとにすべてのスキルレベルが入力されるように定義できる参照整合性制約がないためです。

    一方、オプション2を選択した場合、誰が何を使用でき、どれだけ上手に教えることができるかという関心の分離という利点があります。

    避けたいのは、教師と楽器の関係だけを含む1つのテーブルと、(独立して)その関係を繰り返しながらスキルレベルの詳細を追加する2番目のテーブルを用意することです。そうすると、これら2つのことが同期しなくなるリスクがあります。



    1. SQL Server(T-SQL)で列のデータ型を取得する3つの方法

    2. MySQL:GROUPBYに含まれていません

    3. node.jsを使用してmySQLに一括挿入するにはどうすればよいですか?

    4. Node.js+MySQL-トランザクションの処理