Mysql 一对多关系数据库设计
这些是我的表,我创建了一个Mysql 一对多关系数据库设计,mysql,database-design,Mysql,Database Design,这些是我的表,我创建了一个tbl\u关系,其中包含tbl\u数据中的data\u id和tag\u id中的tbl\u标签数据\u id可以有任意多个标记\u id 例如,在以下情况下: 约翰与食物、苹果、橘子有关。 莱纳斯与食物、马铃薯有关 在速度和存储方面,这是正确的方法吗?因为我的tbl_标签和tbl_数据可以有至少100万个条目,tbl_数据中的名称可以与至少5个标签相关联 tbl_tags +----+--------+ | id | name | +----+--------+
tbl\u关系
,其中包含tbl\u数据
中的data\u id
和tag\u id
中的tbl\u标签
<代码>数据\u id可以有任意多个标记\u id
例如,在以下情况下:
约翰与食物、苹果、橘子有关。
莱纳斯与食物、马铃薯有关
在速度和存储方面,这是正确的方法吗?因为我的tbl_标签
和tbl_数据
可以有至少100万个条目,tbl_数据中的名称
可以与至少5个标签
相关联
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 |
+---------+--------+
是哪一个
标题上写着“一对多”。在这种情况下,标签
应该有一列,说明哪一个人(数据\u id
)与该标签相关
也许
Sam
喜欢apple
和potato
和kiwi
?也就是说,文本暗示它可能是多:多。在本例中,您需要一个2列表,基本上如您所描述的。下面是关于这种桌子的优化设计。这些技巧解决了您的速度和空间问题。这似乎是一种多对多关系,因为tbl\u数据\u id可以与多个tbl\u标记\u id关联,反之亦然(请参见tbl\u关系中的条目)。
如果是这样的话,你的方法看起来很标准
建议在tbl_关系表上创建外键约束 这看起来是一种存储两种类型的数据及其关系的规范方法。您面临的挑战是如何创建正确的索引,以便高效地进行连接。+是的,这确实是最好的方法A 1:许多关系最好通过一个表中的一个额外列来完成,而不是通过一个额外的表来完成。@RickJames您能为这种情况提出其他建议吗?