1

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

system_id是系统表user_id中的PK,是用户表中的PK。我将它们链接system_id为用户表中的 FK。我似乎无法在两者之间找到一张桌子。我有形成一个system_user表并在其中使用两个外键的想法,但看不到它是如何工作的。

4

4 回答 4

3

你答对了。为多对多关系使用映射表。您的系统或用户表中不需要任何外键列。您的映射表将包含 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 回答