三范式

第一范式(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)

);

你可能感兴趣的:(三范式)