第一范式(1NF):强调的是列的原子性,即列不能够再分成其他几列。
第二范式(2NF):首先是 1NF,另外包含两部分内容,一是表必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。
第一范式:列不可再分,(尽量细的去拆分 每一列)
第二范式:一个表必须要有一个主键(这个主键可以由单个列,或者多个列组成)
2.非主键的列,必须完全依赖于主键,而不是及部分依赖于主键
第三范式:在第二范式基础上,不能存在传递依赖,非主键的,必须直接依赖主键,不能传递依赖。
逻辑删除
对于重要数据,并不希望物理删除,一旦删除,数据无法找回
删除方案:设置isDelete的列,类型为int,表示逻辑删除,默认值为0
对于非重要数据,可以进行物理删除
数据的重要性,要根据实际开发决定
e-r模型
e表示entry实体的意思,其实就是根据事物的特征添加描述 信息,我们 把这些描述信息添加到一个表里,那么这个表就相当于一个实体。相当于一个表
R:relationship 关系,在这里其实就是指表与表之间的关系
一对一 :个人信息与身份证
个人信息表
CREATe table user(
id int auto_increment,
namevarchar(10) not null,
idcar int not null;
primary key(id)
#外键:
constraint fk_idcard(起个名字)foreign key(idcar)references identifity(id)
)
身份证
CREATe table carid(
id int auto_increment,
id_num varchar(50) not null,
primary key(id)
)
一对多:班级与学生
学生表
create table sutudents(
stu_id intauto_increment,
stu_name varchaar(20) not null,
primary key(stu_id)
);
班级表:
create table class(
class_id intauto_increment,
class_name varchaar(20) not null,
class_desc
primary key(class_id)
);
多对多:选课
学生表
create table sutudents(
stu_id intauto_increment,
stu_name varchaar(20) not null,
primary key(stu_id)
);
课程
create table kecheng(
kecheng_id int auto_increment,
kecheng_name varchaar(20) not null,
primary key(kecheng_id)
);
如何设置外健?
先找表与表之间的关系。
A班级表(id,name,主键id)
b学生表(id,name,主键id,clsid(外健)》班级表里的主键)
创建学生表必须要有班级表
创建班级表
create table classes(
id int auto_increment,
name varchar(20) not null,
primary key(id)
)engine = innodb default charset = utf8 制定字符集
创建学生表
create table students(
id int auto_increment,
name varchar(20) not null,
clsid int,
primary key(id),
constraint fk_clsid foreign key(clsid) (上面设置的外检) references (这个单词是关联的意思)classes(id)
);