简单罗列数据库设计的6个小知识点
1、主键PK的取值方法
在数据库设计中,PK是供程序员使用的表间连接工具,可以是一无物理意义的数字串, 由程序自动加1来实现。也可以是有物理意义的字段名或字段名的组合。不过前者比后者好。当PK是字段名的组合时,建议字段的个数不要太多,多了不但索引占用空间大,而且速度也慢。
2、正确认识数据冗余
主键与外键在多表中的重复出现, 不属于数据冗余,这个概念必须清楚,事实上有许多人还不清楚。非键字段的重复出现, 才是数据冗余!而且是一种低级冗余,即重复性的冗余。高级冗余不是字段的重复出现,而是字段的派生出现。
如:商品中的“单价、数量、金额”三个字段,“金额”就是由“单价”乘以“数量”派生出来的,它就是冗余,而且是一种高级冗余。冗余的目的是为了提高处理速度。只有低级冗余才会增加数据的不一致性,因为同一数据,可能从不同时间、地点、角色上多次录入。因此,我们提倡高级冗余(派生性冗余),反对低级冗余(重复性冗余)。
3、数据建模步凑
1. 分析需求,画出用例图
2. 编写用例文本,设计界面原型,模拟功能性场景
3. 找实体
4. 识别实体的属性
5. 识别实体之间的关系(一对一,一对多,多对多)
6. 画出概念数据模型(ER图)
7. 将概念数据模型转化为物理数据模型(表格)
8. 根据范式修改物理数据模型继续重复5
4、E--R图没有标准答案
信息系统的E--R图没有标准答案,因为它的设计与画法不是惟一的,只要它覆盖了系统需求的业务范围和功能内容,就是可行的。反之要修改E--R图。尽管它没有惟一的标准答案,并不意味着可以随意设计。好的E—R图的标准是:结构清晰、关联简洁、实体个数适中、属性分配合理、没有低级冗余。
5、ER中的实体和OO中的领域对象的区别:
1. domain model抽象层次更高,更加贴近于现实世界和业务,而实体贴近于数据库
2. 一个实体必然对应一张表,而domain mode则可能是虚拟的只存在于业务层(如购物车)而不需要持久化到数据库,或者一个domain model由多张表的数据共同组合而成
3. 当业务复杂时,使用domain model描述需求效果更好,但是相应的在domain model和数据库表之间的映射会变得十分复杂,匹配程度很低。
4. 以数据库为出发点进行数据建模,很容易上手(即界面上要显示的数据都来自于数据库的某张表格),但是业务复杂后正确的设计需要丰富的经验。以OO为出发点进行建模,不论业务复杂与否,很容易抽象出大致的domain model,但是当业务复杂后在做domain model和数据库表之间的映射则会变得非常困难。
6、要善于识别与正确处理多对多的关系
若两个实体之间存在多对多的关系,则应消除这种关系。消除的办法是,在两者之间增加第三个实体。这样,原来一个多对多的关系,现在变为两个一对多的关系。要将原来两个实体的属性合理地分配到三个实体中去。这里的第三个实体,实质上是一个较复杂的关系,它对应一张基本表。一般来讲,数据库设计工具不能识别多对多的关系,但能处理多对多的关系。
如:在“图书馆信息系统”中,“图书”是一个实体,“读者”也是一个实体。这两个实体之间的关系,是一个典型的多对多关系:一本图书在不同时间可以被多个读者借阅,一个读者又可以借多本图书。为此,要在二者之间增加第三个实体,该实体取名为“借还书”,它的属性为:借还时间、借还标志(0表示借书,1表示还书),另外,它还应该有两个外键(“图书”的主键,“读者”的主键),使它能与“图书”和“读者”连接。
交易额: 110.67万元
无 |浙江省 |温州市 |瓯海区
交易额: 97.63万元
无 |广东省 |东莞市 |东莞市
交易额: 78.68万元
工作室 |山东省 |潍坊市 |奎文区
交易额: 47.41万元
公司 |广东省 |深圳市 |福田区
成为一品威客服务商,百万订单等您来有奖注册中
价格是多少?怎样找到合适的人才?
¥1200 已有192人投标
¥1600 已有120人投标
¥2800 已有17人投标
¥100 已有0人投标
¥100 已有0人投标
¥1600 已有0人投标
¥100 已有2人投标
¥3000 已有0人投标