我的数据库模型中有 2 个需要多对多关系的特定表。表格是Systems
和Users
。一个用户可以是多个系统的成员,一个系统中有多个用户。
system_id
是系统表user_id
中的PK,是用户表中的PK。我将它们链接system_id
为用户表中的 FK。我似乎无法在两者之间找到一张桌子。我有形成一个system_user
表并在其中使用两个外键的想法,但看不到它是如何工作的。
我的数据库模型中有 2 个需要多对多关系的特定表。表格是Systems
和Users
。一个用户可以是多个系统的成员,一个系统中有多个用户。
system_id
是系统表user_id
中的PK,是用户表中的PK。我将它们链接system_id
为用户表中的 FK。我似乎无法在两者之间找到一张桌子。我有形成一个system_user
表并在其中使用两个外键的想法,但看不到它是如何工作的。
你答对了。为多对多关系使用映射表。您的系统或用户表中不需要任何外键列。您的映射表将包含 MappingID PK、SystemID 和 UserID 之类的内容。您也可以将一整行设为 PK,但这是不必要的(如果您不想使用 MappingID)。然后,只需在此表中插入将系统与用户关联的对。您可以通过 SystemID 或 UserID 选择以获取某个实体具有的所有关系。您还可以包含映射可能具有的任何元数据,例如建立关联的日期。
你正朝着正确的方向前进。
创建一个表“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 = ?
希望这可以帮助!
系统 System_User 用户 ------ ------------ ---- *system_id ---> *system_id 数据 *user_id <--- *user_id 数据 * 表示主键列 ---> 表示 PK/FK 关系
你在正确的轨道上。您的新 system_user 表至少有 3 列: