什么时候可以将多个关系存储为单个字段字符串而不是列

时间:2011-12-16 17:46:09

标签: database-design

如果我做标准的多对多表我可能会有500k X N!行。创建分隔的ID字符串并在检索时解析会更好吗?如果是这样,是否存在显着的性能差异?

2 个答案:

答案 0 :(得分:5)

在列中保留多个值是错误的关系设计。

将这样的关系存储在一个字段中会破坏first normal form(最基本的一个)。

其含义是:

  • 很难加入此专栏
  • 难以正确索引此列
  • 难以更新此专栏
  • 很难在此专栏上查询
  • 需求变更时难以扩展和使用

暂时不说 - 对于大多数关系数据库来说,500k并不是那么多,特别是对于连接表。

因此,出于多种原因,将关系存储在单个分隔字段中会更加更糟

关于性能 - 如果连接表被正确编入索引,您将看不到太多性能问题。使用单个字段,您需要为每个操作解析字符串 - 这不是关系数据库擅长的。

关系数据库针对通过这些表的关系进行了优化 - 以这种方式使用它们。

答案 1 :(得分:2)

多对多表的优点是可以对其进行索引,以便可以快速检索父项的所有子项或子项的所有父项。

将数据放在一个字符串中意味着您只能(快速)找到父母的所有子女。

将内容放在一个单独的表中是有代价的,但是在记录中维护/解析一个可能很长的可变长度字符串也需要花费。多年来,DBMS和开发工具已经过优化,以帮助前者,但后者却没有。