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

Database design 什么时候可以将多个关系存储为单个字段字符串而不是列,database-design,Database Design,如果我使用标准的多对多表,我可能会有500k X N!排。创建一个带分隔符的ID字符串并在检索时进行解析是否更好?如果是,是否存在显著的性能差异 在一列中保存多个值是糟糕的关系设计 将此类关系存储在单个字段中会破坏最基本的关系 其影响是: 很难加入这个专栏 很难正确索引此列 很难更新此列 这个栏目很难查询 当需求发生变化时,很难扩展和使用 另外,对于大多数关系数据库来说,500k并没有那么多,特别是对于联接表 因此,出于许多原因,将关系存储在单个分隔字段中会更糟糕 关于性能-如果联接表被正确地索

如果我使用标准的多对多表,我可能会有500k X N!排。创建一个带分隔符的ID字符串并在检索时进行解析是否更好?如果是,是否存在显著的性能差异

在一列中保存多个值是糟糕的关系设计

将此类关系存储在单个字段中会破坏最基本的关系

其影响是:

很难加入这个专栏 很难正确索引此列 很难更新此列 这个栏目很难查询 当需求发生变化时,很难扩展和使用 另外,对于大多数关系数据库来说,500k并没有那么多,特别是对于联接表

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

关于性能-如果联接表被正确地索引,您将不会看到太多的性能问题。对于单个字段,您几乎需要为您执行的每个操作解析字符串——这不是关系数据库擅长的


关系数据库通过这样的表来优化关系-这样使用它们。

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

将数据放在单个字符串中意味着您只能快速找到父对象的所有子对象


将内容放在单独的表中是有代价的,但在记录中维护/解析可能相当长的可变长度字符串也是有代价的。DBMS和开发工具多年来一直在优化,以帮助前者,但不能用于后者。

如果该列上的这些操作都不会发生,该怎么办?@zsharp-它们现在可能不会发生,但将来可能会发生。您希望有一个可维护的数据库模式,对吗?您也会失去类型安全性,除非您的dbms支持数组数据类型。例如,PostgreSQL确实如此,但大多数平台过去都要求您将多个值存储为文本!对你来说是什么意思?N的期望值是多少?