1

私のデータベースモデルには、多対多の関係を必要とする2つの特定のテーブルがあります。テーブルはとSystemsですUsers。1人のユーザーが複数のシステムのメンバーになることができ、1つのシステムに複数のユーザーが含まれます。

system_idはシステムテーブルuser_idのPKであり、はユーザーテーブルのPKです。system_idユーザーテーブルでFKとしてリンクしています。2つの間のテーブルを理解できないようです。私はテーブルを形成し、そこで両方の外部キーを使用するという考えを持っていましたsystem_userが、それがどのように機能するかわかりません。

4

4 に答える 4

3

正解です。多対多の関係にはマッピングテーブルを使用します。SystemsテーブルまたはUsersテーブルに外部キー列は必要ありません。マッピングテーブルには、MappingID PK、SystemID、UserIDなどがあります。行全体をPKにすることもできますが、不要です(MappingIDを使用したくない場合)。次に、システムとユーザーを関連付けるペアをこのテーブルに挿入するだけです。SystemIDまたはUserIDで選択して、特定のエンティティが持つすべての関係を取得できます。関連付けが確立された日付など、マッピングに含まれる可能性のあるメタデータを含めることもできます。

于 2009-04-09T15:50:11.807 に答える
3

あなたは正しい方向に向かっています。

テーブル「system_user」を作成します。

CREATE TABLE system_user (system_id INT NOT NULL, user_id INT NOT NULL);

これは、厳密なリレーショナルモデリングの意味で適切にエンティティではないため、主キーは必要ありません。ただし、シナリオで必要な場合は追加できます。

システム内のすべてのユーザーを取得するには、次のようにクエリを実行します。

SELECT u.* FROM user u, system_user su WHERE su.system_id = ?

ユーザーがアクセスできるすべてのシステムを取得するには、次のようにクエリを実行します。

SELECT s.* FROM system s, system_user su WHERE u.user_id = ?

お役に立てれば!

于 2009-04-09T15:56:24.803 に答える
2
システムSystem_Userユーザー        
------ ----------- ----
 * system_id ---> * system_id             
  データ*user_id<--- * user_id
                                       データ

*は主キー列を示します
--->はPK/FK関係を示します
于 2009-04-09T15:53:20.707 に答える
1

あなたは正しい方向に進んでいます。新しいsystem_userテーブルには、少なくとも3つの列があります。

  • systemuser_id-主キー
  • user_id-ユーザーテーブルへの外部キー
  • system_id-システムテーブルへの外部キー
于 2009-04-09T15:50:06.050 に答える