数据库基本概念
数据的结构化集合称为数据库。
关系数据库是一些具有联系的表和其他数据库对象的集合。
关系模型是一种以二维表的形式来描述现实世界中实体以及实体间联系的数据模型。
关系对应一张没有重复行和重复列的二维表。
关系模式是对表结构的描述。关系模式的格式为:关系名(属性1,属性2,…,属性n)
属性对应二维表中的列,也叫字段。
域指属性的取值范围。
主键用来唯一的标识表中的一条记录。表是实体对象的集合,一条记录对应一个实体对象。
外键用来描述实体间的联系,假设A表中引用了B表中的一个字段,那么这个字段就是A表的外键,被引用的字段所在的表被称为主表,另一张表被称为从表,那么此时,B表为主表,A表为从表。外键具有非空和唯一的特性,因此外键一般会引用主表的主键。
E-R图
E-R图是用来将现实中的实体转化为关系模式的工具,根据实体之间的联系,可以分析出表之间的对应关系。
最终实体间的对应关系有三种:
1)一对一
两表之间若为一对一的关系,则可以在其中任意一张表中添加另一张表的主键来表示引用关系。
2)一对多
两表之间若为一对多的关系,则在多的一方添加一的一方的主键来表示引用关系。
3)多对多
两表之间若为多对多的关系,则会产生一个中间关系模式,此模式中一般用两表的主键作为外键,联系产生的结果作为属性来表示两表的对应关系,在数据库中表现为中间表。
举例:学生表和课程表为多对多的关系,学生学习课程,最后会有成绩,那学习就是两表间的联系,成绩就表现为中间表中的属性。
三范式
(1)表中的列为不可分割的数据项,列具有原子性。
(2)一张表只能用来描述一种实体,且必须要设置主键。主键用来唯一的标识一个实体,所以此范式的隐式含义为一张表只能用来存储同一个实体的数据。
(3)一张表的外键只能引用其他表的主键,不能引用非主键列。外键引用的字段在表中具有非空且唯一的特性,所以一般会引用其他表的主键。
数据库完整性
数据库完整性的目的是限制存储在数据库中的数据,保证数据是正确符合逻辑的,主要是一致性。
1)实体完整性
实体完整性是为了能够区分开每个实体,每个实体都应该保持唯一性,也就是能区分表中的每一行记录。隐式含义表中不能有重复的行,通过主键的非空唯一性来实现。在表定义主键之后,当对表插入数据时或对主键进行更新时,会检查主键是否非空且唯一。
2)参照完整性
参照完整性保证主表和从表之间的数据一致性。定义了外键之后,将无法修改和删除被引用列的定义,也不能删除该列在表中已对应的记录。因为外键约束在建立时绑定了主表中被引用的列,防止主从表数据的不一致性。但是在外键列上可以定义级联操作,例如级联更新和级联删除,那么在对主表中的数据进行操作时,从表中被引用的数据也将进行相应的操作。
3)用户自定义完整性
建表时在属性上指定的约束条件,在插入和更新数据时会检查数据是否符合约束条件。
数据库设计
数据库设计就是抽取出系统中涉及到的实体,分析出每个实体应该具有那些属性,实体之间具有什么样的对应关系,最后创建出合理的表结构。表结构应该符合范式,但为了数据库的性能和用户的体验,会适当的违反范式要求,例如会在表中创建外键的字段,但不设置外键的约束,因为一旦设置,每次删除数据会检查外键的完整性要求,会耗费时间,性能降低。