九、数据完整性
1、数据完整性是为了保证插入到数据中的数据是正确的,它防止了用户可能的输入错误
2、分为三类
l 实体完整性
l 域完整性
l 参照完整性
9.1实体完整性
规定表的一行(即每一条记录)在表中是唯一的实体。实体完整性通过表的主键来实现
主键的特点:不能为null,必须有值,且不能重复。
主键分类:
逻辑主键:不代表实际意义,只是区分不同记录用的。比如id
业务主键:代表者具体的实际意义。比如身份证号 用户名
CREATE TABLE t2(
idint PRIMARY KEY,#PRIMARY KEY 声明id是主键
namevarchar(100)
);
CREATE TABLE t4(
idint,
namevarchar(100),
PRIMARY KEY(id)
);
CREATE TABLE t3(
idint PRIMARY KEY auto_increment,#auto_increment 数据库自动增长
namevarchar(100)
);
9.2域完整性
指数据库表的列(即字段)必须符合某种特定的数据类型或约束。
非空约束:not null
唯一约束:unique
CREATE TABLE t6(
idint PRIMARY KEY auto_increment,
usernamevarchar(100) not null unique, 非空和唯一约束
gendervarchar(10) not null 非空约束
);
9.3参照完整性(多表)
表间的关系:
一对多(用的最多)
多对多(用的很多)
一对一(几乎不用)
9.3.1一对多:部门和员工的关系
CREATE TABLE department(
idint primary key,
namevarchar(100)
);
CREATE TABLE employee(
idint primary key,
namevarchar(100),
salaryfloat(8,2),
department_idint,
CONSTRAINTdepartment_id_fk FOREIGN KEY(department_id) REFERENCES department(id)
);
9.3.2多对多:老师和学员
CREATE TABLE teacher(
idint primary key,
namevarchar(100),
salaryfloat(8,2)
);
CREATE TABLE student(
idint primary key,
namevarchar(100),
gradevarchar(10)
);
CREATE TABLE teacher_student(
t_idint,
s_idint,
CONSTRAINTt_id_fk FOREIGN KEY(t_id) REFERENCES teacher(id),
CONSTRAINTs_id_fk FOREIGN KEY(s_id) REFERENCES student(id),
PRIMARYKEY(t_id,s_id)
);
9.3.3一对一(了解)
l 按照外键关联:
CREATE TABLE person(
idint primary key,
namevarchar(100)
);
CREATE TABLE idcard(
idint primary key,
numbervarchar(20),
person_idint unique,
CONSTRAINTperson_id_fk FOREIGN KEY(person_id) REFERENCES person(id)
);
l 按照主键关联:
CREATE TABLE person(
idint primary key,
namevarchar(100)
);
CREATE TABLE idcard(
idint primary key,
numbervarchar(20),
CONSTRAINTperson_id_fk FOREIGN KEY(id) REFERENCES person(id)
);