设计数据库
设计数据库通常有好几种设计方法,有一些会比其他的要好,那么要怎么选择呢?
先看一个例子 比如要设计下面的大学申请系统
如果我们只有一个apply表的话,会造成一些我们不想要的情况
- 这样就会出现重复的信息,造成了冗余
- 更新时候的异常,比如我们只想更新一个tuple,但是更新了我们指定attribute的tuple(这是因为上面重复信息的冗余)
- 删除时候的异常,同理我们想删除一个tuple,但是删除了所有指定attribute的tuple
将表分开,如果设计的得当,便不会造成以上的问题
一个好的程序的数据库设计不仅仅要设计正确的关系,更要关注数据本身在真实的世界中代表了什么。
通过分解设计数据库
- 开始的表包含了所有的attribute
- 通过一些信息,逐渐将表分解为更小更好的关系
- 自动化分解
自动化分解
- “mega”relations+property of data
- 系统根据property分解
- 最后relation的集合要满足正常的形式