繁体   English   中英

如何将用户表与另一个表相关联

[英]How to relate user table with a another table

我不知道如何问这个问题,所以我实际上无法用谷歌搜索它,但我确信对此有一个简单的答案。

我有一个表,上面有用户,另一个表有 X 行。 我正在寻找的是能够将任何用户与 x 行数相关联。 同时 Rows 可以有很多与之相关的用户,这是双向的

在另一张桌子上放一把“外键”。 假设您有一个Users表:

Users
----------
ID (int, PK)
Name (varchar)
etc.

然后在你的另一个表中,你会有一个指向这个表的列:

Widgets
----------
ID (int, PK)
UserID (int, FK) <-- this is the foreign key
etc.

您如何创建外键关系的语法取决于您使用的数据库,它将在文档中。 这种外键有多种选择,但主要是它保持数据中的关系完整性。 因此,如果您尝试使用无效的UserID将记录插入到Widgets ,则会引发错误,因为必须在Users存在匹配的ID才能关联数据。

一旦建立了这种关系,查询数据就很简单了:

SELECT * FROM Users
INNER JOIN Widgets
  ON Users.ID = Widgets.UserID

编辑:根据下面的评论,听起来您正在寻找“多对多”关系。 同样的概念,您只需要一个中间表来连接它们。 像这样的东西:

Users
----------
ID (int, PK)
Name (varchar)
etc.

Widgets
----------
ID (int, PK)
etc.

UserWidgets
----------
ID (int, PK) <-- optional, the PK could be a composite of the FKs
UserID (int, FK)
WidgetID (int, FK)

现在,通过向UserWidgets表添加更多记录,任何用户和任何小部件都可以连接到任意数量的另一个。 该表保存关系本身,因为这些关系也是数据。

查询只是另一个连接:

SELECT * FROM Users
INNER JOIN UserWidgets
  ON Users.ID = UserWidgets.UserID
INNER JOIN Widgets
  ON UserWidgets.WidgetID = Widgets.ID

您本质上是在谈论规范化,您可以在这里使用外键约束来解决这种关系。

例如,对于 EMP (MANY) 和 DEPT (ONE) [一个部门有很多员工],您可以将 DEPT_ID(标识 DEPT 表中的部门行)作为 EMP 表中的外键。

您可以将类似的解决方案应用于您的用例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM