【问题标题】:Is it good to keep multi-valued attributes in a table existing in a 24/7 running service? [closed]将多值属性保留在 24/7 运行服务中存在的表中是否很好? [关闭]
【发布时间】:2021-06-08 03:11:27
【问题描述】:
我正在做一个项目,我正在使用一个具有 5-10 个值的多值属性的表。保留多值属性好还是应该将其规范化为正常形式?
但我认为它不必要地增加了行数。如果我们有 10 个属性的多值,那么每一行或元组将被替换为新的 10 行,这可能会增加查询运行时间。
任何人都可以就此提出建议吗?
【问题讨论】:
标签:
mysql
sql
postgresql
database-design
【解决方案1】:
第一个范式要求每个属性都是原子的。
我会说这个问题的答案取决于“原子”:将其定义为“不可分割”太狭隘了,因为这样就没有字符串是原子的,因为它可以拆分成字母。
我更喜欢将其定义为“就数据库而言的单个单元”。因此,如果这个数组(或者它是什么)由应用程序完整地存储和检索,并且它的元素永远不会在数据库中访问,那么它在这个意义上是原子的,并且设计没有任何问题。
但是,如果您计划在 WHERE 条件下使用该属性的元素,如果您想使用 UPDATE 语句修改单个元素,或者(最糟糕的是)如果您希望元素满足约束或参考其他表,您的设计几乎肯定是错误的。经验表明,在这种情况下,规范化会导致查询更简单、更快。
不要试图摆脱少数大表行。数据库针对处理许多小表行进行了优化。