另一个多多场景

发布于 2024-07-17 06:27:31 字数 310 浏览 4 评论 0原文

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

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

My database model has 2 particular tables in it that require a many-to-many relationship. The tables are Systems and Users. One user can be a member of more than one system and one system has more than one user in it.

system_id is the PK in the system table and user_id is the PK in the user table. I have them linked with system_id as a FK in the user table. I can't seem to figure out a table in between the two. I had the notion of forming a system_user table and using both foreign keys in there but cant see how that would work.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

谎言月老 2024-07-24 06:27:31

你正朝着正确的方向前进。

创建一个表“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 = ?

希望这有帮助!

You're headed in the right direction.

Create a table "system_user":

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

This is not properly an entity in a strict relational modelling sense, so it doesn't require a primary key. However, you can add one if your scenarios require it.

To get all of the users in a system you'd query like so:

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

To get all of the systems a user can reach, you'd query like so:

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

Hope this helps!

陌上芳菲 2024-07-24 06:27:31

你做对了。 对多对多关系使用映射表。 您的系统或用户表中不需要任何外键列。 您的映射表将包含诸如 MappingID PK、SystemID 和 UserID 之类的内容。 您还可以将整行设置为 PK,但这是不必要的(如果您不想使用 MappingID)。 然后,只需将对插入到该表中,将系统与用户相关联。 您可以选择通过SystemID或UserID来获取某个实体拥有的所有关系。 您还可以包含映射可能具有的任何元数据,例如建立关联的日期。

You got it right. Use a mapping table for many to many relationships. You will not need any foreign key columns in your Systems or Users tables. Your mapping table will have something like a MappingID PK, SystemID, and UserID. You could also make an entire row the PK, but its unnecessary (if you didn't want to use the MappingID). Then, simply insert pairs into this table that associate a System with a User. You can select by SystemID or UserID to get all the relationships a certain entity has. You may also include any metadata the mapping might have, like the date the association was established.

落花随流水 2024-07-24 06:27:31
System            System_User        User        
------            -----------        ----
 *system_id  --->  *system_id             
  data             *user_id    <---   *user_id
                                       data

*    denotes the primary key columns
---> denotes a PK/FK relationship
System            System_User        User        
------            -----------        ----
 *system_id  --->  *system_id             
  data             *user_id    <---   *user_id
                                       data

*    denotes the primary key columns
---> denotes a PK/FK relationship
忆梦 2024-07-24 06:27:31

你走在正确的轨道上。 您的新 system_user 表至少有 3 列:

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

You're on the right track. Your new system_user table would at a minimum have 3 columns:

  • systemuser_id - primary key
  • user_id - foreign key to user table
  • system_id - foreign key to system table
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文