1. 主键是实体的高度抽象,主键和外键的关联表现了实体之间的连接关系。
2. 基本表和中间表、临时表不同,基本表具有4个特点:
(1). 原子性。字段不可再分解。
(2). 原始性。存储的是原始数据【基础数据】。
(3). 演绎性。可以通过代码派生出所有的输出数据。
(4). 稳定性。结构相对稳定,数据可长期储存。
3. 好的E-R图标准有:结构清晰、关联简洁、实体个数适用、属性分配合理、没有低级冗余。
4. 避免使用关键字作为数据表字段名称,数据表名和字段名,其含意要与所存储的内容对应。
5. 根据实际需要对数据表字段规定合适的字段类型,需要关联查询的字段其数据类型应该一致。
6. 数据库的三个范式介绍如下:
第一范式:属性的原子性约束。要求属性具有原子性,不可再分解。
第二范式:记录的唯一性约束。要求记录有唯一标识,即实体的唯一性。
第三范式:字段无冗余约束。要求任何字段不能由其它字段派生而来。
满足第三范式的数据库设计不一定是最好的数据库设计。提倡高级冗余【派生冗余】,是为了提高处理速度。避免低级冗余【重复性冗余】,是为了避免数据的不一致性。
7. 尽量消除两个实体之间的多对多关系,可通过增加第三个实体的方式来将两个实体之间的多对多关系拆分成两个一对多的关系。例如“图书借阅系统”数据库里,读者和图书都是实体,而它们之间是多对多的关系,可以增加“图书借还记录数据表”让它们之间的多对多关系拆分为两个一对多的关系。
8. 提倡“三少”原则【表少、字段少、组合主键的字段少】可减少对数据库设计方案进行修改的次数。组合主键【主键是字段名的组合】的字段少,还能帮助避免索引占用空间过大,查询速度过慢。
9. 与基本表、代码表、中间表不同,视图是一种依赖数据源实表而存在的虚表,是一种供程序员使用数据库的一个窗口,是基本表数据综合的一种形式,还是数据保密的一种实现途径。对于一些机密信息系统,在完成基本表设计后,应在基本表上建立视图,并且规定所有的程序员都只准在视图上操作。只有数据库管理员,带着多个人员共同掌握的“安全秘钥”才能直接在基本表上操作。
10. 为了进行复杂处理,提高运算速度和节省存储空间,视图的定义深度一般不要超过三层。如果三层还是不够用,可以在视图上定义临时表,再在临时表上定义视图,这样可以反复交迭定义。
11. 中间表是存放统计数据的表,是为数据仓库、输出报表或查询结果而设计的。基本表和中间表由数据库管理员【DBA】维护。
12. 临时表是程序员个人设计的,用于存放临时记录,由程序员自己用程序来实现自动维护。
13. 数据完整性约束是一组完整性规则【实体完整性、域完整性、参照完整性、用户定义的完整性】的集合,可避免不符合规范的数据存入数据库。
实体完整性:规定表的每一行在表中是唯一的实体。
域完整性: 表中的列必须满足特定的数据类型约束,还可能要满足取值范围、精度等约束。
参数完整性:两个表的主关键字和外关键字的数据应一致,保障表之间数据的一致性。
用户定义的完整性约束:用户根据不同关系数据库所处的应用环境,自定义的特殊约束。
14. 少用触发器,少用存储过程。如果不得不用存储过程的话,不要在存储过程中处理复杂的业务逻辑,因为SQL本身是一种结构化查询语言。
15. 如果计算很复杂,并且记录条数很大【例如上千万条数据】时,可以先在数据库外的文件系统里用C++等语言对记录处理完复杂计算,再将记录存入数据表中。
16. 数据表中记录很多【例如超过一千万条】,则需要对该表进行水平分割【以主键的某个值为界线】。
17. 数据表中的字段很多【例如超过八十个】,则可以垂直分割该表。
18. 把使用频率低,而且存储数据量大的字段可以拆分出来形成新的数据表,这样可减少非限定字段查询其它字段时的I/O开销。
19. 设计数据表字段时,除了备注、描述、评论之类的字段可以设置为NULL【可空类型】外,其它的字段尽量避免设置为NULL,而是改用设置NOT NULL + default【默认值】代替。
20. 尽量使用varchar/nvarchar来代替char/nchar。因为可变字段可节省存储空间,对于查询而言,在一个相对较小的空间里搜索效率会更高。