数据完整性(数据库表的设计)
实体完整性 对应 每一行数据
1. 什么是实体
数数据库一行 就是一个实体
实体完整性 的作用: 标志每一行数据 不重复, 行级约束
2. 约束类型
主键约束 primary key
唯一约束 unique
自动增长列 auto increment
3. 主键约束
每一个表中需要有一个主键
主键约束该列 数据 不能重复, 且 主键 不能为 null
声明方式:
1. 在字段上面声明: 列名 类型 primary key
2. 在最后一列 声明: primary key(字段...)
3. 先创建表,然后使用 ALTER TABLE 表名 ADD CONSTRAINT PRIMARY KEY (字段)
联合主键: 多个字段 作为 一个主键,
所用 : 多个字段 作为 一个主键 ,多个字段 一起相同, 不相同
4. 唯一约束
特点: 约束 所 修饰的 字段 必须 唯一, 不能重复, 可以为 null
也就是说 同一列 不能 有相同的字段, 但是 可以有 多个 null
5. 自动增长列
指定列 的数据 自动 增长, 即使删除数据, 还是会从删除的列 继续往下增长,
声明方式: 字段 或 主键 后面加上 auto_increnment ,一般配合 主键 或者 unique 使用
DROP TABLE student;
CREATE TABLE student(
sid int PRIMARY KEY COMMENT '学生id',
sname VARCHAR(30) COMMENT '学生姓名'
)
CREATE TABLE student(
sid int COMMENT '学生id',
sname VARCHAR(30) COMMENT '学生姓名',
PRIMARY KEY(sid)
)
ALTER TABLE student ADD CONSTRAINT PRIMARY KEY(sid)
CREATE TABLE student(
sid int COMMENT '学生id' UNIQUE,
sname VARCHAR(30) COMMENT '学生姓名'
)
CREATE TABLE student(
sid int AUTO_INCREMENT COMMENT '学生id',
sname VARCHAR(30) COMMENT '学生姓名',
PRIMARY KEY(sid)
)
INSERT INTO student VALUES(3, '旺旺')
域完整性: (列完整性) 对应 每一列 字段
1. 以 单元格 (字段) 为 单位 进行 约束, 针对当前 单元格的数据。也称为 列 完整性。 不去对照其他数据,
域完整性 主要保证当前 单元格的 不会被 插入 无效数据
2. 域的 完整 约束
* 数据类型的约束
* 非空约束(not null)
* 默认值 约束(default)
参照完整性: (引用完整性)
1. 指表 与 表 之间的对应 关系
通常可以建立 两张表 之间的 主键, 外键关系, 或者 编写两张表 的 触发器 来实现
操作 有引用关系的 数据表格的过程中, 对其一张表做 插入, 更新, 删除 时, 系统都会将 被 修改的 表格 与 另外 一张表格 进行参照, 从而阻止一些 不正确的数据 操作
2. 要求
至少两张表 (主表, 从表)
主表: 用来约束其他表 的表
从表: 收约束的表
数据库的 主键 和 外键 类型要 一致
设置 参照完整性 后, 外键中的值, 必须得是 另外一张 表中 主键的内容
3. 外键的声明 方式
建表 添加
工具添加
alter alter table tab add constraint sc_tc_fk foreign key (sid) references student(sid)
CREATE TABLE student(
sid INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(30) UNIQUE
)
CREATE TABLE class(
cid INT PRIMARY KEY AUTO_INCREMENT,
cname VARCHAR(30) UNIQUE,
yname VARCHAR(30)
)
ALTER TABLE student ADD COLUMN cid INT COMMENT '班级外键'
ALTER TABLE student ADD CONSTRAINT FOREIGN KEY s_c_id(cid)
REFERENCES class(cid)
表与表之间的关系:
1. 一对一关系
一个人只有一个身份证
2. 一对多关系
一个人有多张银行卡, 一个银行卡只能 属于一个人
一个人有多辆汽车, 一辆汽车是属于一个人
3. 多对多的关系 一般需要引入第三张 表 作为 关系对照表
一个老师有多位学生
一个学生有多位老师
DROP TABLE class;
DROP TABLE student
CREATE TABLE student(
sid INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(30) UNIQUE
)
CREATE TABLE class(
cid INT PRIMARY KEY AUTO_INCREMENT,
cname VARCHAR(30) UNIQUE,
yname VARCHAR(30)
)
ALTER TABLE student ADD COLUMN cid INT COMMENT '班级外键'
ALTER TABLE student ADD CONSTRAINT FOREIGN KEY s_c_id(cid)
REFERENCES class(cid)
CREATE TABLE teacher(
tid INT PRIMARY KEY AUTO_INCREMENT,
tname VARCHAR(30) NOT NULL
)
CREATE TABLE student(
sid INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(30) UNIQUE NOT NULL
)
CREATE TABLE stu_te_ref(
sid int,
tid int
)
ALTER TABLE stu_te_ref ADD CONSTRAINT FOREIGN KEY stu_fr_sid(sid) REFERENCES student(sid)
ALTER TABLE stu_te_ref ADD CONSTRAINT FOREIGN KEY stu_fr_tid(tid) REFERENCES teacher(tid)