【问题标题】: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 行,这可能会增加查询运行时间。

任何人都可以就此提出建议吗?

【问题讨论】:

  • 查看SET 数据类型。

标签: mysql sql postgresql database-design


【解决方案1】:

第一个范式要求每个属性都是原子的。

我会说这个问题的答案取决于“原子”:将其定义为“不可分割”太狭隘了,因为这样就没有字符串是原子的,因为它可以拆分成字母。

我更喜欢将其定义为“就数据库而言的单个单元”。因此,如果这个数组(或者它是什么)由应用程序完整地存储和检索,并且它的元素永远不会在数据库中访问,那么它在这个意义上是原子的,并且设计没有任何问题。

但是,如果您计划在 WHERE 条件下使用该属性的元素,如果您想使用 UPDATE 语句修改单个元素,或者(最糟糕的是)如果您希望元素满足约束或参考其他表,您的设计几乎肯定是错误的。经验表明,在这种情况下,规范化会导致查询更简单、更快。

不要试图摆脱少数大表行。数据库针对处理许多小表行进行了优化。

【讨论】:

    猜你喜欢
    • 2015-05-27
    • 1970-01-01
    • 2018-02-16
    • 1970-01-01
    • 2021-02-25
    • 2020-06-24
    • 1970-01-01
    • 2014-07-22
    • 1970-01-01
    相关资源
    最近更新 更多