我的数据库模型中有2个特定的表,需要多对多的关系。表格为Systems
和Users
。一个用户可以是多个系统的成员,一个系统中有一个以上的用户。
system_id
是系统表中的PK,user_id
是用户表中的PK。我将它们与system_id
链接为用户表中的FK。我似乎无法弄清楚两者之间的表格。我有一个概念,即在那里形成一个system_user
表并使用两个外键,但是无法看到它是如何工作的。
答案 0 :(得分:3)
你做对了。对多对多关系使用映射表。您的系统或用户表中不需要任何外键列。您的映射表将具有MappingID PK,SystemID和UserID之类的内容。您也可以将整行作为PK,但不必要(如果您不想使用MappingID)。然后,只需将对插入此表,将系统与用户关联。您可以通过SystemID或UserID选择以获取特定实体具有的所有关系。您还可以包含映射可能具有的任何元数据,例如建立关联的日期。
答案 1 :(得分: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 = ?
希望这有帮助!
答案 2 :(得分:2)
System System_User User ------ ----------- ---- *system_id ---> *system_id data *user_id <--- *user_id data * denotes the primary key columns ---> denotes a PK/FK relationship
答案 3 :(得分:1)
你走在正确的轨道上。您的新system_user表至少有3列: