数据库设计的一对多关系

时间:2017-04-21 08:39:49

标签: mysql database-design

这些是我的表格,我创建了一个tbl_relationdata_id来自tbl_datatag_id来自tbl_tagsdata_id可以有tag_ids个。{/ p>

例如在以下情况中: 约翰与食物,苹果,橙子有关。 莱纳斯与食物马铃薯有关。

这是在速度和存储方面做到这一点的正确方法吗?由于我的tbl_tagstbl_data可以拥有至少100万个条目,而且tbl_data中的name可以与至少5个tag_name相关联。

tbl_tags
+----+--------+
| id | name   |
+----+--------+
| 1  | food   |
+----+--------+
| 2  | apple  |
+----+--------+
| 3  | orange |
+----+--------+
| 4  | potato |
+----+--------+
| 5  | fruit  |
+----+--------+

tbl_data
+----+--------+
| id | name   |
+----+--------+
| 1  | John   |
+----+--------+
| 2  | Linus  |
+----+--------+
| 3  | Bill   |
+----+--------+
| 4  | Steve  |
+----+--------+
| 5  | Dennis |
+----+--------+

tbl_relation
+---------+--------+
| data_id | tag_id |
+---------+--------+
| 1       | 1      |
+---------+--------+
| 1       | 2      |
+---------+--------+
| 1       | 3      |
+---------+--------+
| 2       | 1      |
+---------+--------+
| 2       | 4      |
+---------+--------+

2 个答案:

答案 0 :(得分:0)

这是什么?

标题上写着“1对多”。在这种情况下,tags应该有一个列,说明哪个人(data_id)与该标签相关。

或许Sam喜欢applepotato以及kiwi?也就是说,文本暗示它可能很多:很多。在这种情况下,您需要一个2列表,基本上如您所述。以下是关于此类表的最佳设计的my tips。这些提示解决了您对速度和空间的问题。

答案 1 :(得分:0)

这似乎是一个多对多关系,因为tbl_data_id可以与多个tbl_tags_id相关联,反之亦然(查看tbl_relation中的条目)。 如果是这种情况,根据正常形式,您的方法似乎非常标准。

一个建议是在tbl_relation表上创建外键约束。