2

ユーザーと言語の2つのテーブルがあるとしましょう

user (Table Name)
-----------------
user_id (PK)
user_name
mobile
...
....

language (Table Name)
---------------------
lang_code (PK)
lang_name
...
....

質問は、ユーザーと言語テーブル (多対多) の間に関係を追加したい場合、どちらが正しい方法ですか?

solution 1

user_language (Table Name)
--------------------------
user_id (FK)
lang_code (FK)


or solution 2

user_language (Table Name)
--------------------------
user_id (PK)
lang_code (PK)


or solution 3

user_language (Table Name)
--------------------------
user_lang_id (PK)
user_id (FK)
lang_code (FK)

多くの人が多対多テーブルに主キーを追加するのを見ましたが、それは重要ではなく、スペースを無駄にしていると思います。どちらが正しいですか?

ところで私はPostgreSQLを使用しています

4

2 に答える 2

4

個人的には、解決策 4 を使用します。

ユーザー言語
---------------
ユーザー ID (外部キー)
lang_code (外部キー)

複合 PRIMARY KEY (user_id、lang_code) を使用

user_lang_id(ソリューション 3 で) 代理キーを追加しても、実際にスキーマに値が追加され、心配する必要がある別の列が追加されるだけだとは思いません。ただし、一意性を維持するために主キーを使用することをお勧めします。これがないと、同じ user_id/lang_code の組み合わせを複数回追加できます。

于 2012-11-07T16:22:39.487 に答える
2

複合主キーオン(user_id,lang_code)は一般的なアプローチです。user_language別のテーブルに への参照が必要な場合、またはこのテーブルに他の属性を保存する場合は、サロゲート PK が必要になることがあります。しかし、この場合でも、通常は一意の制約があります(user_id,lang_code)

于 2012-11-07T16:28:14.053 に答える