【问题标题】:Databases and 3rd Normal Form [closed]数据库和第三范式[关闭]
【发布时间】:2011-04-15 06:28:19
【问题描述】:

您是否总是至少以第三范式 (3NF) 设计数据库?为什么?

【问题讨论】:

    标签: database-design normalization third-normal-form


    【解决方案1】:

    一般来说,我的目标是设计一个至少符合 Boyce Codd / 5th Normal Form 的数据库,除非我有充分的理由不这样做。使用范式的主要原因是为了避免可能导致错误结果的冗余。另一个优点是范式有助于避免数据库设计中的“偏见”(倾向于比其他使用模式更适合某些使用模式),这使得随着需求的发展更容易支持模式更改。

    【讨论】:

      【解决方案2】:

      不,并非总是如此。

      您需要很好地理解范式,以避免犯愚蠢的错误。但有时出于方便或性能原因,它很有用。 (缓存)

      我发现避免可能不同步的数据重复最为重要。 (更改名称,重新定位资源。)不过,有时这正是您想要的。 (特定时间点的发票摘要。)

      “dportas”有一个关于偏见的重要观点。打破范式规则往往会降低您的代码和数据的可维护性和灵活性。

      【讨论】:

        【解决方案3】:

        过去,我使用 ER 建模进行数据分析,然后转换为关系模型,然后将关系模型转换为 SQL 表(及其索引)。这听起来很复杂,但事实并非如此。每个步骤都简单且易于管理。

        如果您正确地进行了 ER 建模,您就可以将每个属性与正确的实体或关系相关联。每个实体都有一个密钥,无论是自然的还是合成的。发现所有有用的关系是数据分析最深入的部分。

        ER 模型可用作从属性中形成关系的指南。每个实体都有一个关系,每个多对多关系都有一个关系,而多对一关系在其中一个实体关系中都有一个外键。

        这样的设计自动在 3NF 中。从 BCNF、4NF 和 5NF 出发的情况很少见。

        基于关系创建 SQL 表很简单。索引设计要求您预测容量、负载和资源,并且在某种程度上依赖于 DBMS。

        【讨论】:

          【解决方案4】:

          我至少会这样设计(除非我正在创建一个具有不同规则的数据仓库)。每当我看到人们试图在初始设计阶段进行非规范化时,他们创造的问题远远多于他们解决的问题。我每天都在诅咒那些人,因为我是修理这些垃圾的人。

          【讨论】:

          • 关于数据仓库的要点。
          猜你喜欢
          • 2013-01-25
          • 2013-01-28
          • 1970-01-01
          • 2014-07-20
          • 2011-05-21
          • 2013-09-27
          • 1970-01-01
          • 1970-01-01
          • 2017-08-11
          相关资源
          最近更新 更多