目录
序言
一、需求
二、E-R图
E-R图:
三、关系模式
数据库模型图:
四、在MYSQL中创建数据库
4.1 年级表的创建
4.2 科目表的创建
4.3 学生表的创建
4.4 成绩表的创建
结果如下:
序言
本篇文章我将通过一个具体的例子教会大家大家如何根据业务需求来画出E-R图以及构建出数据库模型图,并设计出一个简单完善的数据库,让我们接着往下看。
一、需求
某学校要设计一个数据库,学校的业务规则概括如下:
-
学校内年级若干,每个年级内又有学生若干。
-
学生选修某些课程,但是在自己年级下的课程是必修。
-
学校定期组织考试,成绩囊括所有学生所有课程的考试成绩。
二、E-R图
根据上述的需求,我们可以提取出四个实体(年级、学生、科目、成绩)以及它们所对应的属性,而实体之间的关系,我在前面的文章说过:http://t.csdnimg.cn/D3uSz,常用动词去描述。
接下来我们就要考虑每一个实体应该包含哪些属性,因为这在我们这道题中并没有表明,所以我们可以进行发散性思维,如学生必然是有学号的,当然还有姓名、性别、电话、邮箱等等,那么年级肯定要有编号、具有唯一性,科目有课程编号、课程名称,成绩有考试时间、考试成绩等。
梳理完实体之间以及它们的属性后,我们要思考它们之间的代数关系,代数关系包括一对一、多对一/一对多、多对多(1-1、N-1/1-N、M-N)。我随便举几个例子,多个学生属于同一个年级,就是多对一的关系;一个学生对有多个科目,就是一对多的关系。
E-R图:
三、关系模式
关系模式我们通常用数据库模型图来表示,明确每一个实体中的主外键(PK/FK),我们就可以使这个数据库更加的完善。主键的选择我们前面也讲过,那就是确保该属性在实体中的唯一性,年级编号、学号、课程编号在他们的实体中都具备唯一性,所以关系模式如下:
1,年级(年级编号、年级名称)
2,学生(学号、姓名、性别、年级编号、手机号码、出生日期、家庭住址、邮箱、身份证号)
3,科目(课程编号、课程名称、学时、年级编号)
4,成绩(学号、课程编号、考试时间、考试成绩)
(备注:加下划线为主键)
数据库模型图:
四、在MYSQL中创建数据库
4.1 年级表的创建
CREATE DATABASE Myschool_db;#建立数据库
#建表(先主后从)
#创建年级表
CREATE TABLE grade(
GradeID INT NOT NULL AUTO_INCREMENT COMMENT '年级编号',
GradeName VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '年级名称',
PRIMARY KEY (GradeID)
) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;
4.2 科目表的创建
DROP TABLE IF EXISTS subject;
CREATE TABLE subject (
SubjectNo int NOT NULL AUTO_INCREMENT COMMENT '课程编号',
SubjectName varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '课程名称',
ClassHour int NULL DEFAULT NULL COMMENT '学时',
GradeID int NULL DEFAULT NULL COMMENT '年级编号',
PRIMARY KEY (SubjectNo)
) ENGINE = InnoDB AUTO_INCREMENT = 17 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;
4.3 学生表的创建
DROP TABLE IF EXISTS student;
CREATE TABLE student (
StudentNo int(0) NOT NULL COMMENT '学号',
LoginPwd varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
StudentName varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '学生姓名',
Sex tinyint(1) NULL DEFAULT NULL COMMENT '性别,取值0或1',
GradeId int(0) NULL DEFAULT NULL COMMENT '年级编号',
Phone varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '联系电话,允许为空,即可选输入',
Address varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '地址,允许为空,即可选输入',
BornDate datetime(0) NULL DEFAULT NULL COMMENT '出生时间',
Email varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '邮箱账号,允许为空,即可选输入',
IdentityCard varchar(18) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '身份证号',
PRIMARY KEY (StudentNo) USING BTREE,
UNIQUE IdentityCard(IdentityCard) USING BTREE,
INDEX Email(Email) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;
4.4 成绩表的创建
CREATE TABLE `result` (
`StudentNo` int(0) NOT NULL COMMENT '学号',
`SubjectNo` int(0) NOT NULL COMMENT '课程编号',
`ExamDate` datetime(0) NOT NULL COMMENT '考试日期',
`StudentResult` int(0) NOT NULL COMMENT '考试成绩',
INDEX `SubjectNo`(`SubjectNo`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;