5

products多対多の関係を持つとの2 つのテーブルがあるため、とを含むテーブルをcategories追加します。products_categoriescategory_idproduct_id

別の (自動インクリメント) インデックス列を追加するか、既存の 2 つの列を主キーとして使用する必要がありますか?

4

6 に答える 6

12

場合によります。

  • データをオブジェクトのセット(およびリレーショナルデータベースは単なるストレージメディア)として、またはリレーショナル代数によってネイティブに表現および分析されたファクトのセットとして表示していますか?

  • 一部のORM/フレームワーク/ツールは、複数列の主キーを適切にサポートしていません。それらのいずれかを使用する場合は、追加のid列が必要になります。

  • 追加のデータが関連付けられていない多対多の関係である場合は、追加のid列を避け、両方の列を主キーとして使用することをお勧めします。

  • この関連付けにいくつかの追加情報を追加し始めると、それが2つのエンティティの多対多の関係になる時点に達する可能性があります。それ自体がエンティティになり、接続するエンティティから独立した独自のIDがあれば便利です。

于 2009-12-03T12:54:01.797 に答える
6

自動インクリメント インデックス列を追加する必要はありませんが、私は (おそらく他の多くの人とは反対に) 追加することをお勧めします。まず、アプリケーション プログラムでは、行を削除する場合など、単一の番号を使用して行を参照する方が簡単です。次に、行が追加された順序を知ることができると便利な場合があります。

于 2009-12-03T12:37:40.187 に答える
3

いいえ、これら 2 つの列がすでに主キーの機能を実行していることを考えると、まったく必要ありません。

この 3 番目の列は、テーブルにスペースを追加するだけです。

しかし...おそらくそれを使用して、レコードがテーブルに追加された順序を確認できます。それが、このコラムで私が見ることができる唯一の機能です。

于 2009-12-03T12:29:02.353 に答える
2

自動インクリメント インデックス列を追加する必要はありません。標準的な方法は、説明したように、既存の 2 つの列だけを M:M 関連テーブルの主キーとして使用することです。

于 2009-12-03T12:29:07.813 に答える
1

主キーの category_id と product_id を作成します。後で使用する際に順序が関連する場合にのみ、自動インクリメントを追加してください。

于 2009-12-03T12:28:19.263 に答える
0

概念的な質問があります-products_categoriesはエンティティですか、それとも単に2つのエンティティ間の関係を表すテーブルですか?それがエンティティである場合、追加の属性がなくても、エンティティ用に別のID列を推奨します。それが関係である場合、追加の属性(begin_date、end_dateなど)がある場合は、複数列の主キーを使用することをお勧めします。

于 2009-12-10T22:36:44.640 に答える