构建高效数据库的方法

时间:2011-01-25 14:14:45

标签: database database-design normalization

我想知道我是否可以吸引有经验的数据库设计师。我在建立数据库方面经验不足,而且我有一个项目要在规定的时间内完成(几个月)。要求是将其构建为第三范式。

我只是想知道最好的方法是什么?我应该继续构建一些有效的东西(尽量提高效率)然后返回并重构任何可以改进的部分,或者是否有一些方法可以从一开始就确保某些程度的规范化?

3 个答案:

答案 0 :(得分:4)

不要构建数据库,以便稍后返回并将其规范化。数据库不像一件事物的应用程序代码那样容易重构,你已经要求遵循第三种常规形式,所以从一开始就这样做,它将远远少于工作,最终是一个更好的产品。在第三范式中没有正确的数据库设计的快捷方式。在开始设计之前,要清楚地了解它是什么。

如果您不熟悉第三范式的数据库dsign,请花几天时间阅读数据库设计。花了一天左右的时间阅读有关调整数据库性能的信息 - 从一开始就设计一个数据库,以便为您节省大量时间。一旦您知道要做什么以及应该避免什么,它不会比设计性能不佳的数据库花费更长的时间。因此,我给你的第一个建议就是在开始之前先阅读一些大书并深入阅读。你花在这上面的时间将很好地回报你在项目其余部分做得更好的能力。

答案 1 :(得分:2)

您肯定会在此数据库层之上编写多个图层(DAL,BAL,UI)。较低级别的每个更改都会向上冒泡并导致更多的重新工作,而不仅仅是在数据库层。

我认为您应该完成所有设计并使数据库达到保存数据所需/最需要的最佳规范化,而不会出现异常情况。

答案 2 :(得分:0)

与Front-Side编程不同,重构数据库结构,一旦使用,不仅痛苦,而且不切实际。

我强烈建议将后端的结构放在前面。好消息是第三种正常形式通常难以实现。事实上,一旦你获得了一点点实力,那么用这些术语来思考数据几乎成了第二天性。

第三范式基本上表明表中单个记录的每个组件对于该记录的键是唯一的。考虑:

<强> tblPerson: PersonID PK 姓 名字 中间名字 DOB SSN IncomeSource IncomeAmount

上面定义的表格不是正常的形式,因为收入来源并不是表格中每个人的发生率所特有的,事实上可能会在该人的生命中发生变化。相反,人们会将上述结构(过于简单化的术语)构建如下:

<强> tblPerson PersonID PK 姓 名字 中间名字 DOB SSN

<强> tblPersonIncome PersonIncomeID PK PersonID FK tblPerson IncomeSourceID FK tblIncomeSource IncomeAmount AsOfDate

<强> tblIncomeSource IncomeSourceID IncomeSource

请注意,有些人会争论我使用上面的自动递增ID字段 - 虽然这些不违反第3范式,但它们也不使用自然键。

如果你的后端从跳跃中正确标准化,那么添加或扩展你的实体就更容易做到,并且会对你在添加之前创建的任何前端产生更小的影响。

无论如何,在你的后端正确设计,或者一旦你开始滚动并且需要稍后实施结构变化,痛苦将会很激烈。否则就有点像为你的新房子浇筑基础,并计划在建造它时改变平面布置以满足你的需求。