如果我做标准的多对多表我可能会有500k X N!行。创建分隔的ID字符串并在检索时解析会更好吗?如果是这样,是否存在显着的性能差异?
答案 0 :(得分:5)
在列中保留多个值是错误的关系设计。
将这样的关系存储在一个字段中会破坏first normal form(最基本的一个)。
其含义是:
暂时不说 - 对于大多数关系数据库来说,500k并不是那么多,特别是对于连接表。
因此,出于多种原因,将关系存储在单个分隔字段中会更加更糟。
关于性能 - 如果连接表被正确编入索引,您将看不到太多性能问题。使用单个字段,您需要为每个操作解析字符串 - 这不是关系数据库擅长的。
关系数据库针对通过这些表的关系进行了优化 - 以这种方式使用它们。
答案 1 :(得分:2)
多对多表的优点是可以对其进行索引,以便可以快速检索父项的所有子项或子项的所有父项。
将数据放在一个字符串中意味着您只能(快速)找到父母的所有子女。
将内容放在一个单独的表中是有代价的,但是在记录中维护/解析一个可能很长的可变长度字符串也需要花费。多年来,DBMS和开发工具已经过优化,以帮助前者,但后者却没有。