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

时间:2017-02-14 23:24:06

标签: sql database-design

我不确定如何提出这个问题,所以我实际上并没有谷歌,但我确信这个问题很简单。

我有一个包含用户的表和另一个包含X行数的表。我正在寻找的是能够将任何用户与x行数相关联。与此同时,Rows可以拥有许多与之相关的用户,而且两种方式都是

2 个答案:

答案 0 :(得分:1)

放一个"外键"在另一张桌子上。我们假设您有Users表:

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

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

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

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

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

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

修改:根据下面的评论,听起来你正在寻找一个多对多的&#34;&#34;关系。同样的概念,您只需要一个连接它们的中间表。像这样:

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表添加更多记录,任何用户和任何Widget都可以连接到任何其他Widget。该表保存了关系本身,因为这些关系也是数据。

查询只是另一个联接:

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

答案 1 :(得分:0)

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

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

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