表的约束
主键约束(每一个表必须有一个主键列)
primarykey:不允许为空,不允许重复
加入约束后,如果不遵守会报错。
eg:createtable student
(
id int primary key,
name varchar(40)
);
主键自动增长
auto_increment:自动增加
eg:create tablestudent
(
idint primary key auto_increment,
namevarchar(40)
);
唯一约束
unique:唯一
eg:create tablestudent
(
idint primary key auto_increment,
namevarchar(40) unique
);
非空约束
not null:不为空
eg:create tablestudent
(
idint primary key auto_increment,
namevarchar(40) unique not null
);
外键约束
constraint ordersid_FK foreign key(ordersid)references orders(id),
eg:create tablehusband
(
id int primary key,
name varchar(40)
);
create table wife
(
id int primary key,
name varchar(40),
husband_id int, 此处为外键列,类型要和husband表的主键列一样
constrainthusband_id_FK foreign key(husband_id) references husband(id)
解释:定义约束,名称为husband_id_FK,外键约束作用在husband_id列上,这一列的值参考husband 表中id这一列的值
);
表的设计
一对多或多对一的对象存到数据库时,表的设计方案
分析:每个员工只有一个部门,一个部门有多个员工
原则:首先建立部门表与员工表只向表中存基本属性,然后在多的一方加外键描述数据的关系,此处多的 一方为员工表
部门和员工
create tabledepartment
(
id int primary key,
name varchar(40)
);
create tableemployee
(
id int primary key,
name varchar(40),
salary decimal(8,2),
department_id int,
constraint department_id_FK foreignkey(department_id) references department(id)
);
多对多对象的表的设计
分析:每个学生有多个老师,每个老师有多个学生
原则:首先建立老师表与学生表只向表中存基本属性,再建立一个中间表命名一般为“表1_表2”,在中 间表加上外键约束。(有时为了查询快,也可以只建立一个表,但是会出现数据的冗余)
老师和学生
create tableteacher
(
id int primary key,
name varchar(40),
salary decimal(8,2)
);
create tablestudent
(
id int primary key,
name varchar(40)
);
create tableteacher_student
(
两列同为主键列,也可再定义一个id为主键列
teacher_id int,
student_id int,
primary key(teacher_id,student_id),
constraint teacher_id_FK foreignkey(teacher_id) references teacher(id),
constraint student_id_FK foreignkey(student_id) references student(id)
);
一对一的对象的数据库设计
分析:一个人有一个身份证,一个身份证对应一个人。
原理:首先建立人表与身份证表只向表中存基本属性,我们最初的想法是在身份证表或人表中加入一个外 键列,此外键列要求加入外键约束、唯一约束、非空约束,但在人表或者身份证表中的外键列id 就存在唯一约束与非空约束,因此只需要把人表或者身份证表的外键列id设置外键约束就行了。
人与身份证
create table person
(
id int primary key,
name varchar(40)
);
create table idcard
(
id int primary key,
city varchar(40),
constraint id_FK foreign key(id) referencesperson(id)
);
自连接的表的数据库设计
分析:家族存在父子关系嵌套
原理:首先建立人表,在其中建立一个列来表示关系
家族自连接关系
create table person
(
id int primary key,
name varchar(40),
parent_id int,
constraint parent_id_FK foreignkey(parent_id) references person(id)
);