2

私は2つのテーブルを持っています:

表1:

id(int) | stuff(text)
-------------------------
1       | foobarfoobarfoo
2       | blahfooblah
3       | foo

テーブル 2:

id(int) | otherstuff(text)
--------------------------
1       | foo
2       | bar
3       | blah

table1 の行には、複数の foo、bar などを含めることができます。また、table2 の各行は、table1 の複数の行に表示できます。

これは、これをまっすぐに保つためのより良い方法です。次のような 3 番目のテーブルを作成する必要があります。

表 3:

id_from2(int) | id_from1(int)
-----------------------------
1             | 1
1             | 2
1             | 3
2             | 1
3             | 2

または、同じ情報を追跡するために、配列型の列を table1 と table2 に追加する必要がありますか?

4

5 に答える 5

5

はい、ジャンクション テーブルを使用することは、RDBMS で多対多の関係を実装する正しい方法です。

必要に応じて、ジャンクション テーブル (つまり ) にさらに属性を追加できますtable3。たとえば、関係が順序付けられ(table1, table2)ている場合、組み合わせの順序を指定する 3 番目のフィールドを追加できます。これは、多対多テーブルの詳細な例を示す Stack Overflow の回答へのリンクです。

于 2012-04-19T15:40:47.583 に答える
2

これは標準的な多対多の設計です。最も柔軟なソリューションは、示されているように ID 関連付けを持つ 3 番目のテーブルです。

于 2012-04-19T15:40:37.063 に答える
1

これ以上同意することはできません。3 番目のテーブルを追加するという設計は正しいです。

于 2012-04-19T15:44:02.210 に答える
0

リレーション テーブルは、多対多のリレーションシップを関連付ける最良の方法です。よくやった。

于 2012-04-19T15:40:49.563 に答える
0

では、多対多の関係が必要ですか? テーブル 1 の 1 つは 2 のより多くのオブジェクトと関係を持つことができますが、その逆はありますか? はい、あなたが言ったように3番目のテーブルを使用してください。これがベストプラクティスです。安全のために、主キーの自動インクリメント列も添付します

于 2012-04-19T15:40:55.600 に答える