数据库设计原则与范式

一.设计的基本原则

1.一致性原则:对数据来源进行统一、系统的分析与设计,协调好各种数据源,保证数据的一致性和有效性。

2.完整性原则:数据库的完整性是指数据的正确性和相容性。要防止合法用户使用数据库时向数据库加入不合语义的数据。对输入到数据库中的数据要有审核和约束机制。

3.安全性原则:数据库的安全性是指保护数据,防止非法用户使用数据库或合法用户非法使用数据库造成数据泄露、更改或破坏。要有认证和授权机制。

4.可伸缩性与可扩展性原则:数据库结构的设计应充分考虑发展的需要、移植的需要,具有良好的扩展性、伸缩性和适度冗余。

5.规范化原则:数据库的设计应遵循规范化理论。规范化的数据库设计,可以减少数据库插入、删除、修改等操作时的异常和错误,降低数据冗余度等。

二.表设计的三大范式

1.第一范式(1NF)

要求:每一列属性都是不可再分的属性值,确保每一列的原子性

2.第二范式(2NF)

要求:确保数据库表中的每一列都和主键相关,如果是联合主键,则需要和所有主键均相关而不能只与主键和主键的某一部分相关

例如:

 

 学号和课程编号是联合主键,但是,该表中,课程名称和学号没有任何关系,学生姓名和课程编号也没有任何关系

解决办法:

(1)提取学生表;(2)提取课程表;(3)建立学生课程关系表。

3.第三范式(3NF)

要求:1.确保数据表中的一条记录的数据都和主键直接相关,而不是间接相关,不能存在传递关系  2.属性不依赖于其它非主属性

例如:

 

 学号为主键,它存在 学号 --> 班级编号 --> 班级信息 这么一个主键学号与班级信息的传递关系,不符合第三范式

解决办法:

(1)提取学生表;(2)提取班级表;

遵循范式的优缺点:

1.结构合理,表含义容易理解与区分

2.冗余较小

3.多表查询,影响性能

三.表设计注意点

1. 主键设计

主键不要与业务逻辑有所关联,最好是毫无意义的一串独立不重复的数字

2. 外键

尽量不要建立外键,保证每个表的独立性。如果非得保持一定的关系,最好是通过id进行关联

3. 动静分离

做好静态表和动态表的分离

静态表:存储一些固定不变的资源,比如:城市/地区名/国家(静态表可以使用缓存)

动态表:一系频繁修改的表

4. 关于Null值

尽量不要使用Null值,在建表的时候设置一个默认值

5. 善于识别与正确处理多对多的关系若两个实体之间存在多对多的关系,则应消除这种关系。消除的办法是,在两者之间增加第三个实体。这样,原来一 

个多对多的关系,现在变为两个一对多的关系。要将原来两个实体的属性合理地分配到三个实体中去。

 例如:

在“图书馆信息系统”中,“图书”是一个实体,“读者”也是一个实体。这两个实体之间的关系,是一 
个典型的多对多关系:一本图书在不同时间可以被多个读者借阅,一个读者又可以借多本图书。为此,要在二者之 
间增加第三个实体,该实体取名为“借还书”,它的属性为:借还时间、借还标志(0表示借书,1表示还书),另外, 
它还应该有两个外键(“图书”的主键,“读者”的主键),使它能与“图书”和“读者”连接。

6. 正确认识数据冗余

1)主键与外键在多表中的重复出现,不属于数据冗余

2)非键字段的重复出现,才是数据冗余,而且是一种低级别冗余

3)高级冗余不是字段的重复出现,而是字段的派生出现

例如:

商品中的“单价、数量、金额”三个字段,“金额”就是由“单价”乘以“数量”派生出来的,它就是冗余, 
而且是一种高级冗余。冗余的目的是为了提高处理速度。只有低级冗余才会增加数据的不一致性,因为同一数据,可 
能从不同时间、地点、角色上多次录入。因此,我们提倡高级冗余(派生性冗余),反对低级冗余(重复性冗余)。 

7. 视图技术在数据库设计中的使用

与基本表、代码表、中间表不同,视图是一种虚表,它依赖数据源的实表而存在。视图是供程序员使用数据库的 
一个窗口,是基表数据综合的一种形式, 是数据处理的一种方法,是用户数据保密的一种手段。为了进行复杂处理、 
提高运算速度和节省存储空间, 视图的定义深度一般不得超过三层。 若三层视图仍不够用, 则应在视图上定义临时表, 
在临时表上再定义视图。这样反复交迭定义, 视图的深度就不受限制了。 

例如:

对于某些与国家政治、经济、技术、军事和安全利益有关的信息系统,视图的作用更加重要。这些系统的基本表完 
成物理设计之后,立即在基本表上建立第一层视图,这层视图的个数和结构,与基本表的个数和结构是完全相同。 
并且规定,所有的程序员,一律只准在视图上操作。只有数据库管理员,带着多个人员共同掌握的“安全钥匙”, 
才能直接在基本表上操作。

8. 中间表,基表,临时表和报表

9. 防止数据库设计打补丁的方法“三少原则”

表少  组合主键的字段少  表的字段少

 

posted @ 2022-04-08 10:53  liubingPersonalBlog  阅读(105)  评论(0)    收藏  举报