0

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

4

4 回答 4

5

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

于 2010-09-21T15:20:41.090 回答
1

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

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

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

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

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

于 2010-09-22T09:37:30.690 回答
1

不,并非总是如此。

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

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

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

于 2010-09-21T15:32:57.923 回答
0

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

于 2010-09-21T19:19:08.537 回答