数据库表的设计

对于数据库表的设计,一般会有一对一,一对多,多对多,自关联四种情况。

一对一对象的表设计:做一个身份证管理系统,里面的人和身份证就是一对一的关系,主从关系,人拥有身份证,身份证属于人。只需要给人和身份证分别设计一张表,后再加关系,idcard身份证的id列设为外键约束。

数据库表的设计_第1张图片
一对一对象的表的设计.png

设计人和身份证的表:

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) references person(id)  
);

一对多或者多对一对象的表设计:假设做一个部门管理系统,从面向对象的角度考虑,要设计2个对象。department代表部门,员工对象employee。

不管对象引用关系,只管基本属性,根据基本属性建表。在多的一方加外键列描述数据之间的关系。

数据库表的设计_第2张图片
一对多对象的表的设计.png
create table department
(
    id int primary key,
    name varchar(40)
);


create table employee
(
    id int primary key,
    name varchar(40),
    salary decimal(8,2),
    department_id int,
    constraint department_id_FK foreign key(department_id) references department(id)
);

多对多对象的表设计:一个老师可以有多个学生,一个学生可以有多个老师,同样地,只需要把老师teacher和学生student的相关属性用表描述出来,这个时候数据间的关系就要设计中间表teacher_student。两列作为联合主键。加上外键约束。

数据库表的设计_第3张图片
多对多对象表的设计.png
create table teacher
(
    id int primary key,
    name varchar(40),
    salary decimal(8,2)
);

create table student
(
    id int primary key,
    name varchar(40)
);

create table teacher_student
(
    teacher_id int,
    student_id int,
    primary key(teacher_id,student_id),
    constraint teacher_id_FK foreign key(teacher_id) references teacher(id),
    constraint student_id_FK foreign key(student_id) references student(id) 
);

还有一种设计方案,有的人会觉得设计3张表到时候查询会很麻烦,就设计成一张表,只是设计成一张表会造成数据的冗余。

自关联对象的表设计:一个家庭里有多个人,家族成员之间的关系是自关联的。

数据库表的设计_第4张图片
p1>p2>p3.png
自连接的表
create table person
(
    id int primary key,
    name varchar(40),
    parent_id int,
    constraint parent_id_FK foreign key(parent_id) references person(id)
);

你可能感兴趣的:(数据库表的设计)