[英]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.