6. 要善于识别与正确处理多对多的关系
若两个实体之间存在多对多的关系 , 则应消除这种关系 。消除的办法是 , 在两者之间增加第三个实体 。这样 , 原来一个多对多的关系 , 现在变为两个一对多的关系 。要将原来两个实体的属性合理地分配到三个实体中去 。这里的第三个实体 , 实质上是一个较复杂的关系 , 它对应一张基本表 。一般来讲 , 数据库设计工具不能识别多对多的关系 , 但能处理多对多的关系 。
〖例3〗:在“图书馆信息系统”中 , “图书”是一个实体 , “读者”也是一个实体 。这两个实体之间的关系 , 是一个典型的多对多关系:一本图书在不同时间可以被多个读者借阅 , 一个读者又可以借多本图书 。为此 , 要在二者之间增加第三个实体 , 该实体取名为“借还书” , 它的属性为:借还时间、借还标志(0表示借书 , 1表示还书) , 另外 , 它还应该有两个外键(“图书”的主键 , “读者”的主键) , 使它能与“图书”和“读者”连接 。
7. 主键PK的取值方法
PK是供程序员使用的表间连接工具 , 可以是一无物理意义的数字串, 由程序自动加1来实现 。也可以是有物理意义的字段名或字段名的组合 。不过前者比后者好 。当PK是字段名的组合时 , 建议字段的个数不要太多 , 多了不但索引占用空间大 , 而且速度也慢 。
8. 正确熟悉数据冗余
主键与外键在多表中的重复出现, 不属于数据冗余 , 这个概念必须清楚 , 事实上有许多人还不清楚 。非键字段的重复出现, 才是数据冗余!而且是一种低级冗余 , 即重复性的冗余 。高级冗余不是字段的重复出现 , 而是字段的派生出现 。
〖例4〗:商品中的“单价、数量、金额”三个字段 , “金额”就是由“单价”乘以“数量”派生出来的 , 它就是冗余 , 而且是一种高级冗余 。冗余的目的是为了提高处理速度 。只有低级冗余才会增加数据的不一致性 , 因为同一数据 , 可能从不同时间、地点、角色上多次录入 。因此 , 我们提倡高级冗余(派生性冗余) , 反对低级冗余(重复性冗余) 。
9. E-R图没有标准答案
信息系统的E-R图没有标准答案 , 因为它的设计与画法不是惟一的 , 只要它覆盖了系统需求的业务范围和功能内容 , 就是可行的 。反之要修改E-R图 。尽管它没有惟一的标准答案 , 并不意味着可以随意设计 。好的E-图的标准是:结构清楚、关联简洁、实体个数适中、属性分配合理、没有低级冗余 。
10. 视图技术在数据库设计中很有用
与基本表、代码表、中间表不同 , 视图是一种虚表 , 它依靠数据源的实表而存在 。视图是供程序员使用数据库的一个窗口 , 是基表数据综合的一种形式, 是数据处理的一种方法 , 是用户数据保密的一种手段 。为了进行复杂处理、提高运算速度和节省存储空间, 视图的定义深度一般不得超过三层 。若三层视图仍不够用, 则应在视图上定义临时表, 在临时表上再定义视图 。这样反复交迭定义, 视图的深度就不受限制了 。
对于某些与国家政治、经济、技术、军事和安全利益有关的信息系统 , 视图的作用更加重要 。这些系统的基本表完成物理设计之后 , 立即在基本表上建立第一层视图 , 这层视图的个数和结构 , 与基本表的个数和结构是完全相同 。并且规定 , 所有的程序员 , 一律只准在视图上操作 。只有数据库治理员 , 带着多个人员共同把握的“安全钥匙” , 才能直接在基本表上操作 。请读者想想:这是为什么?
11. 中间表、报表和临时表
中间表是存放统计数据的表 , 它是为数据仓库、输出报表或查询结果而设计的 , 有时它没有主键与外键(数据仓库除外) 。临时表是程序员个人设计的 , 存放临时记录 , 为个人所用 。基表和中间表由DBA维护 , 临时表由程序员自己用程序自动维护 。
推荐阅读
- 网络设计师训练资料——60道典型选择题及答案
- 移动软交换中短消息业务的设计与实现
- 技术观点:也谈VLAN的设计与应用
- 软交换的网络结构设计
- 智能社区VLAN划分设计思路不一样
- 如何用VS2012建立数据库
- 如何用PPT制作MG动画
- 如何调整两张ppt位置
- 环境设计算工程类专业吗
- 现代简约风格有什么设计理念
