使用外键跟踪新关系中的所有权
Posted
技术标签:
【中文标题】使用外键跟踪新关系中的所有权【英文标题】:Keeping track of ownership in a new relation using foriegn keys 【发布时间】:2014-01-19 13:22:42 【问题描述】:我想跟踪哪些用户拥有哪些歌曲。 用户表:
+--------+----+
|username|name|
+--------+----+
|sam1 |Sam |
+--------+----+
|bil9 |Bil |
+--------+----+
|tomj |Tom |
+--------+----+
逻辑是创建一个新关系来跟踪谁拥有什么歌曲...
+-------------+--------+
|user_username|track_id|
+-------------+--------+
|sam1 |1 |
+-------------+--------+
|bil9 |5 |
+-------------+--------+
|bil9 |9 |
+-------------+--------+
|tomj |2 |
+-------------+--------+
Track id 是tracks 表的外键:
+--+------+
|id|name |
+--+------+
|0 |track1|
+--+------+
|1 |track2|
+--+------+
这是正确的,还是有更合乎逻辑的方法?
【问题讨论】:
如果您的意图是为多对多关系建模,那么是的 - 使用联结表是正确的做法。 【参考方案1】:你所说的“逻辑”更像是一个查找表。
需要考虑的事项:
1 个用户可以拥有多个曲目?如果是这样,请确保 track_id 不是唯一的。 您所做的很好,因为如果您更改曲目或用户名,映射将保持不变。我建议的一件事是拥有一个用户 ID,以便 user_id 映射到 track_id - 将数字映射到数字总是好的,因为它通常可以更快地进行查询,然后您可以随意更改文本值,并且他们仍然映射。
【讨论】:
根据表格的布局方式,track_id 是唯一的不是更有意义吗? bil9 拥有 9 和 5。这些 id 中的每一个都可以映射到特定的轨道。此外,这个问题暗示 id 本身就是轨道表的主键。以上是关于使用外键跟踪新关系中的所有权的主要内容,如果未能解决你的问题,请参考以下文章