我不确定如何提出这个问题,所以我实际上并没有谷歌,但我确信这个问题很简单。
我有一个包含用户的表和另一个包含X行数的表。我正在寻找的是能够将任何用户与x行数相关联。与此同时,Rows可以拥有许多与之相关的用户,而且两种方式都是
答案 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表中的外键。
您可以对您的用例应用类似的解决方案。