目录
表的设计有1对1、1对多、多对多三种设计方式,根据不同的业务需求,设计出不同的表关系,关于表的设计在之前的博客中有所涉及,具体请点击查看:表的设计
食堂管理系统
业务要求:食堂管理系统包括:食堂表、食堂窗口表、窗口收费记录
①食堂表:食堂id、食堂名称;②食堂窗口表:窗口id、窗口名称;③窗口收费记录:收费记录id、价格、收费时间
分析
1、一个食堂有多个窗口,因此食堂与窗口是1对多的关系;
2、一个窗口有多条收费记录,因此窗口与收费记录也是1对多的关系;
因此在表设计时,在窗口表中建立一个外键来关联食堂表和窗口表,在收费记录表中建立一个外键来关联窗口表和收费记录表.
· 食堂表
-- 食堂表
create table canteen(
id int primary key auto_increment,
name varchar(20)
);
· 窗口表
-- 食堂窗口表
create table enteance(
id int primary key auto_increment,
name varchar(20),
cateen_id int,
-- 与食堂表关联
foreign key (cateen_id) references canteen(id)
);
· 收费记录表
-- 窗口收费记录表
create table charge(
id int primary key auto_increment,
price decimal(4,2),
charge_data timestamp,
canteen_enteance_id int,
-- 设置外键关联窗口表和收费记录表
foreign key (canteen_enteance_id) references enteance(id)
);
车辆违章系统
业务要求:车辆违章系统包括:用户表、车辆信息表、违章记录表(违章记录表中包括用户和车辆的违章信息)
①用户表:用户id、用户姓名;②车辆表:车辆id、车辆名称;③违章记录表:违章记录id、违章描述、包括用户和车辆的违章信息.
分析
1、一个用户可以有多辆车,因此用户与车是一对多的关系;
2、由于题目说明违章信息包括用户和车辆(即违章信息表中要记录用户和车辆);
3、一个用户可以有多个违章记录,用户与违章信息是一对多的关系;一辆车也可以有多个违章记录,车辆与违章信息是一对多的关系.
因此在设计表时,车辆表中设置一个外键用来关联用户表和车辆表;违章记录表中需要设置两个外键,分别用来关联用户表和车辆表,且都为一对多的关系.
· 用户表
-- 用户表
create table user(
id int primary key auto_increment,
name varchar(20) not null
);
· 车辆表
-- 车辆表
create table cars(
id int primary key auto_increment,
name varchar(20) not null,
numberOfCar varchar(10),
user_id int,
-- 设置外键关联车辆表和用户表
foreign key (user_id) references user(id)
);
· 违章信息表
-- 违章信息表
create table info(
id int primary key auto_increment,
'desc' varchar(100),
user_id int,
cars_id int,
-- 设置外键关联违章信息表和用户表
foreign key (user_id) references user(id),
-- 设置外键关联违章信息表和车辆表
foreign key (cars_id) references car(id)
);
宿舍管理系统
业务要求:宿舍管理系统包括:宿舍信息、学生信息、每日查房记录
①宿舍信息:宿舍id、宿舍名称;②学生信息:学生id、学号、学生姓名;③每日查房记录:记录id、查房状态、查房日期
分析
1、一个宿舍有多名学生,因此学生与宿舍的关系为多对一;
2、宿舍的查房记录是根据宿舍来查的,与宿舍有关系,一个宿舍可以多次查房,因此宿舍与查房记录的关系为一对多.
因此,在建立学生表时设置一个外键来关联学生表和宿舍表;在建立查宿记录表时,建立一个外键来关联宿舍表和查宿记录表.
· 宿舍表
-- 宿舍信息表
create table dormitory(
id int primary key auto_increment,
name varchar(20)
);
· 学生表
-- 学生信息表
create table student(
id int primary key auto_increment,
sn int,
name varchar(20),
dormitory_id int,
foreign key (dormitory_id) references dormitory(id)
);
· 每日查宿记录表
-- 每日查房记录
create table info(
id int primary key auto_increment,
status bit,
dormitory_id int,
info_date timestamp,
foreign key (dormitory_id) references dormitory(id)
);
考勤系统
业务要求:考勤系统包括:员工表、考勤记录表
①员工表:员工id、员工姓名;②考勤记录表:考勤id、考勤状态、考勤时间
分析
该题目要求考勤系统比较简单,只需要员工表和考勤记录表,员工与考勤记录是一对多的关系,因此在建立考勤记录表时设置一个外键使考勤记录表与员工表关联即可.
· 员工表
-- 员工表
create table staff(
id int primary key auto_increment,
name varchar(20),
);
· 考勤记录表
-- 考勤记录表
create table info(
id int primary key auto_increment,
status bit,
info_data timestamp,
staff_id int,
foreign key (staff_id) references staff(id)
);
本篇博客所有的设计表代码已上传gitee代码仓库中:表的设计代码