在创建数据库结构时,要遵循哪些好的指导方针或确定数据库应该规范化的好方法?您是否应该创建一个未规范化的数据库并在项目进展时将其拆分?您是否应该将其完全标准化并根据性能需要组合表格?
您希望开始设计规范化数据库,直到第3范式.当您开发业务逻辑层时,您可能决定必须对其进行非规范化,但从不,不要低于第3种形式.始终保持第1和第2表格合规.您希望对代码的简单性进行非规范化,而不是为了性能.使用索引和存储过程:)
不是"随意标准化"的原因是每次修改数据库设计时都必须修改已经编写的代码.
有几篇好文章:
http://www.agiledata.org/essays/dataNormalization.html
@GrizzlyGuru一位聪明的人曾告诉我"正常化直到它受伤,反正常化直到它起作用".
它还没有让我失望:)
我不同意以非规范化形式开始它,但是根据我的经验,它更容易调整你的应用程序来处理规范化程度较低的数据库,而不是更规范化的数据库.它也可能导致其"工作"得足够好的情况"所以你永远不会让它正常化(直到它'太晚了!)
标准化意味着消除冗余数据.换句话说,非规范化或非规范化数据库是一个数据库,其中相同的信息将在多个不同的地方重复.这意味着您必须编写更复杂的更新语句以确保在任何地方更新相同的数据,否则您将获得不一致的数据,这反过来意味着查询的输出是不可实现的.
这是一个非常大的问题,所以我会说非规范化会伤害,而不是反过来.
在某些情况下,如果您判断利益超过更新数据的额外工作和数据损坏的风险,您可能会故意决定对数据库的特定部分进行非规范化.例如,对于数据仓库,其中出于性能原因聚合数据,以及在初始条目之后通常不更新的数据,这样可以降低不一致的风险.
但总的来说,厌倦了对性能进行非规范化.例如,非规范化连接的性能优势通常可以通过使用物化视图(也称为索引视图)来实现,该视图与查询非规范化表一样快,但仍然保护数据的一致性.