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
++++++++++++