这些是我的表格,我创建了一个tbl_relation
,data_id
来自tbl_data
,tag_id
来自tbl_tags
。 data_id
可以有tag_ids
个。{/ p>
例如在以下情况中: 约翰与食物,苹果,橙子有关。 莱纳斯与食物马铃薯有关。
这是在速度和存储方面做到这一点的正确方法吗?由于我的tbl_tags
和tbl_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 |
+---------+--------+
答案 0 :(得分:0)
这是什么?
标题上写着“1对多”。在这种情况下,tags
应该有一个列,说明哪个人(data_id
)与该标签相关。
或许Sam
喜欢apple
和potato
以及kiwi
?也就是说,文本暗示它可能很多:很多。在这种情况下,您需要一个2列表,基本上如您所述。以下是关于此类表的最佳设计的my tips。这些提示解决了您对速度和空间的问题。
答案 1 :(得分:0)
这似乎是一个多对多关系,因为tbl_data_id可以与多个tbl_tags_id相关联,反之亦然(查看tbl_relation中的条目)。 如果是这种情况,根据正常形式,您的方法似乎非常标准。
一个建议是在tbl_relation表上创建外键约束。