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您能为这种情况提出其他建议吗?