这里的第三个实体 , 实质上是一个较复杂的关系 , 它对应一张基本表 。一般来讲 , 数据库设计工具不能识别多对多的关系 , 但能处理多对多的关系 。
〖例3〗:在“图书馆信息系统”中 , “图书”是一个实体 , “读者”也是一个实体 。这两个实体之间的关系 , 是一个典型的多对多关系:一本图书在不同时间可以被多个读者借阅 , 一个读者又可以借多本图书 。7. 主键PK的取值方法PK是供程序员使用的表间连接工具 , 可以是一无物理意义的数字串, 由程序自动加1来实现 。也可以是有物理意义的字段名或字段名的组合 。不过前者比后者好 。当PK是字段名的组合时 , 建议字段的个数不要太多 , 多了不但索引占用空间大 , 而且速度也慢 。
为此 , 要在二者之间增加第三个实体 , 该实体取名为“借还书” , 它的属性为:借还时间、借还标志(0表示借书 , 1表示还书) , 另外 , 它还应该有两个外键(“图书”的主键 , “读者”的主键) , 使它能与“图书”和“读者”连接 。
8. 正确认识数据冗余主键与外键在多表中的重复出现, 不属于数据冗余 , 这个概念必须清楚 , 事实上有许多人还不清楚 。非键字段的重复出现, 才是数据冗余!而且是一种低级冗余 , 即重复性的冗余 。高级冗余不是字段的重复出现 , 而是字段的派生出现 。
〖例4〗:商品中的“单价、数量、金额”三个字段 , “金额”就是由“单价”乘以“数量”派生出来的 , 它就是冗余 , 而且是一种高级冗余 。冗余的目的是为了提高处理速度 。9. E--R图没有标准答案【Java开发数据库设计的14个技巧,你知道几个?】信息系统的E--R图没有标准答案 , 因为它的设计与画法不是惟一的 , 只要它覆盖了系统需求的业务范围和功能内容 , 就是可行的 。反之要修改E--R图 。
只有低级冗余才会增加数据的不一致性 , 因为同一数据 , 可能从不同时间、地点、角色上多次录入 。因此 , 我们提倡高级冗余(派生性冗余) , 反对低级冗余(重复性冗余) 。
尽管它没有惟一的标准答案 , 并不意味着可以随意设计 。好的E—R图的标准是:结构清晰、关联简洁、实体个数适中、属性分配合理、没有低级冗余 。
10. 视图技术在数据库设计中很有用与基本表、代码表、中间表不同 , 视图是一种虚表 , 它依赖数据源的实表而存在 。视图是供程序员使用数据库的一个窗口 , 是基表数据综合的一种形式, 是数据处理的一种方法 , 是用户数据保密的一种手段 。
为了进行复杂处理、提高运算速度和节省存储空间, 视图的定义深度一般不得超过三层 。若三层视图仍不够用, 则应在视图上定义临时表, 在临时表上再定义视图 。这样反复交迭定义, 视图的深度就不受限制了 。
对于某些与国家政治、经济、技术、军事和安全利益有关的信息系统 , 视图的作用更加重要 。这些系统的基本表完成物理设计之后 , 立即在基本表上建立第一层视图 , 这层视图的个数和结构 , 与基本表的个数和结构是完全相同 。并且规定 , 所有的程序员 , 一律只准在视图上操作 。
只有数据库管理员 , 带着多个人员共同掌握的“安全钥匙” , 才能直接在基本表上操作 。请读者想想:这是为什么?
11. 中间表、报表和临时表中间表是存放统计数据的表 , 它是为数据仓库、输出报表或查询结果而设计的 , 有时它没有主键与外键(数据仓库除外) 。临时表是程序员个人设计的 , 存放临时记录 , 为个人所用 。基表和中间表由DBA维护 , 临时表由程序员自己用程序自动维护 。
12. 完整性约束表现在三个方面域的完整性:用Check来实现约束 , 在数据库设计工具中 , 对字段的取值范围进行定义时 , 有一个Check按钮 , 通过它定义字段的值城 。
参照完整性:用PK、FK、表级触发器来实现 。用户定义完整性:它是一些业务规则 , 用存储过程和触发器来实现 。
推荐阅读
- 龙泉市携手福建坦洋工夫合作开发龙泉金观音
- 硒元素的生理功能与富硒茶的开发
- javascript内置对象Date的基本用法
- 常见的Java分布式缓存框架总结
- JavaScript中的跨域问题及解决办法
- java服务宕机原因查询
- Web前端开发基础,带你认识HTML
- 详解Mysql数据库不同字符集下迁移方法
- Mysql数据库连接查询
- 苹果|向苹果看齐!三星为自家手机开发处理器:不外卖
