mysql查询普通关系表与串联关系表
我有一个关于两个表之间关系的问题 假设我们有一个表用户和链接mysql查询普通关系表与串联关系表,mysql,optimization,concatenation,relational,Mysql,Optimization,Concatenation,Relational,我有一个关于两个表之间关系的问题 假设我们有一个表用户和链接 users +++++++++ id name 1 name1 2 name2 3 name3 +++++++++ 现在,链接这两个表的正常方法是使用名称\u links表。 例如: name_links ++++++++++++ uid lid 1 1 1 3 2 3 2 1 2 2 3 2 ++++++++++++ 现在我想知道做一张这样的桌子是否是个好主意 name_links
users
+++++++++
id name
1 name1
2 name2
3 name3
+++++++++
现在,链接这两个表的正常方法是使用名称\u links表。 例如:
name_links
++++++++++++
uid lid
1 1
1 3
2 3
2 1
2 2
3 2
++++++++++++
现在我想知道做一张这样的桌子是否是个好主意
name_links
++++++++++++
uid lid
1 1,3
2 1,2,3
3 2
++++++++++++
我能想到的优点和缺点是:
项目1:
您将始终在索引上搜索,更快的查询
示例选择uid=1的位置,然后选择链接1,3。这两个都是索引,因此它将是一个快速加载
如果你有1000个用户,每个用户都有20个链接,这意味着你必须通过20000条记录才能获得所有的链接(我想,这还不确定)。使用此方法,您只需获取一个索引,就可以完成
结论1:
您必须更频繁地更新name_links表、读取、编辑和写入
示例用户2删除链接2方法为:+获取用户1的字符串
+从字符串中删除数字
+插入新字符串 这里的一切都是在索引上完成的,所以我认为它会很快 结论2: 另一个缺点是当你删除链接2时,你必须遍历所有的字符串,但是假设这不是一个很大的问题,因为这不会经常发生 到目前为止,这就是我能想到的,我正处于我的项目的关键时刻,我必须决定去哪里 我想就选择哪种方法提出一些建议。我有我的优点和缺点吗?有什么事情我没有考虑。在此主题上的任何帮助都将不胜感激
谢谢你们 除非必须,否则绝对不应该连接记录。 考虑未来的能力,假设你想计算有多少用户有链接3,这是你的第二个方法的痛苦。 因此,我假设通过您的示例,这将是一个多对多连接,这意味着一个链接可以连接到多个用户,而多个用户可以通过一个链接连接。因此,您可能具有与连接到链接的用户相关的属性,如时间链接
这可能会出现在你的名字链接表上。我绝不是一个数据库专家,但你的第二个选择给我的印象是一个非常糟糕的主意。即使假设您永远不需要(比如)在名称链接表中按链接进行搜索,对链接执行任何操作都将是大量(不必要的,IMO)额外工作。非规范化解决方案有以下缺点:
- 无法有效地连接名称和链接(
不可搜索)FIND_IN_SET
- 不能使用
外键(在
中)强制引用完整性InnoDB
- 删除和添加名称链接关系更为复杂
如果<代码>链接< /代码>是固定的,您可以考虑使用原生<代码> SET/COD>数据类型。
name_links
++++++++++++
uid lid
1 1,3
2 1,2,3
3 2
++++++++++++