另一个很多场景

时间:2009-04-09 15:46:47

标签: database many-to-many relational

我的数据库模型中有2个特定的表,需要多对多的关系。表格为SystemsUsers。一个用户可以是多个系统的成员,一个系统中有一个以上的用户。

system_id是系统表中的PK,user_id是用户表中的PK。我将它们与system_id链接为用户表中的FK。我似乎无法弄清楚两者之间的表格。我有一个概念,即在那里形成一个system_user表并使用两个外键,但是无法看到它是如何工作的。

4 个答案:

答案 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列:

  • systemuser_id - 主键
  • user_id - 用户表的外键
  • system_id - 系统表的外键