MySQL数据库设计——以学生成绩数据库为例
数据库是数据管理的有效技术,是计算机科学的重要分支,它能有效地帮助一个组织或者一个企业科学地管理各类信息资源.
目录
MySQL数据库设计以学生成绩数据库为例
目录
数据库设计步骤
基本概念
学生成绩数据库设计
数据库设计步骤
需求分析 2. 逻辑设计3. 物理设计 4. 维护优化
本文仅针对逻辑设计阶段设计一个学生成绩数据库,并阐述设计过程中基本的概念和方法.
基本概念
数据模型:
数据模型是对现实世界中数据特征的抽象爱,描述的是数据的共性.
在数据库系统中针对不同的使用对象和应用目的,通常采用逐步抽象的方法,在不同的层次采用不同的抽象模型,一般可分为概念层、逻辑层、物理层。其中概念层摆脱了计算机系统及DBMS具体技术问题,用于分析数据以及数据之间的联系,概念层的数据模型称为概念模型,常用的概念模型是实体-联系模型(E-R模型).逻辑层的模型称为逻辑模型,是基于计算机系统的观点对数据建模和表示,不同的DBMS支持不同的逻辑模型,如:网状数据模型、层次数据模型、面向对象数据模型、关系数据模型,本文所用的模型是关系数据模型.物理层是数据抽象的最底层,用来描述数据物理存储结构和方法,不但与DBMS有关,还与操作系统和硬件有关,一般设计者只设计索引、聚集等特殊结构.
概念模型:
基本概念
描述
实体(Entity)
现实世界客观存在的事物,可以是具体的也可以是抽象
属性(Attribute)
实体的特性
码或键(Key)
唯一标识每个实体的属性集
域(Domain)
属性的取值范围
实体型(Entity Type)
实体名与属性名集合抽象和刻画同类实体
联系(Relationship)
一对一、一对多、多对多
关系模型:
基本概念
描述
关系
一个关系对应一张二维表格
元组
表中的行,表中的元素称为分量
属性
属性型指属性名和取值域,属性值指具体取值
主键
标识元组的一个候选键,也称关键字,唯一的候选键就是主键
域
一组具有相同数据类型的集合
表
由行和列组成
行
表中的一条记录,表中的数据按行存储
列
表中的字段
外键
表中的列或一组列,包含另一张表的主键值,主要用来定义两个表之间的关系
关系模式
描述关系,包括模式名、属性名、值域以及主键,一般表示为“关系名(属性1、属性2、属性3...属性n)”
关系规范化
基本概念
描述
第一范式
每一列不可分,简称1NF
第二范式
不存在部分依赖,简称2NF
第三范式
不存在传递依赖,简称3NF
BCNF
关系中每个决定因素都是候选关键字
学生成绩数据库设计
根据需求分析绘制E-R图
E-R模型转换关系模型
类型
转换规则
实体
(1)每个实体转化为一个关系模式.(2)实体的属性作为关系模式的属性.(3)实体的码作为关系模式的主键
一元联系
类似于二元联系
二元联系
(1)1:1可以转换为独立的关系模式,也可以与任意一端对应的关系模式合并,一个关系模式的属性加入另一个关系模式的键和联系类型的属性.(2)1:N可以转换为独立的关系模式,也可以与N端对应的关系模式合并,在N端实体类型转换成的关系模式中加入1端实体类型的键和联系类型的属性.(3)M:N各实体的码以及联系本身的属性转换为关系的属性,而关系的键为各实体的组合,即在各实体转换的关系模式中再增加一个关系模式,该关系模式由联系本身转换而来,关系模式的属性为联系的属性加上两端实体关系模式的键,键为两个实体类型关系模式键的组合.
多元联系
三个或三个以上的实体间的一个多元联系可以转换为一个关系模式,与该多元联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的键为各实体码的组合
参考链接:http://blog..net/u012501459/article/details/12945191
博主:allan-xia
3.设置外键
4.关系模型
5.SQL语句
-- ----------------------------
-- Table structure for course
-- ----------------------------
DROP TABLE IF EXISTS `course`;
CREATE TABLE `course` (
`course_num` int(11) NOT NULL COMMENT '课程号',
`course_name` varchar(100) CHARACTER SET utf8 NOT NULL COMMENT '课程名',
`course_hour` int(2) NOT NULL COMMENT '课程学时',
`course_score` varchar(10) CHARACTER SET utf8 NOT NULL COMMENT '课程学分',
PRIMARY KEY (`course_num`),
KEY `course_num` (`course_num`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='课程信息表';
-- ----------------------------
-- Records of course
-- ----------------------------
INSERT INTO `course` VALUES ('1', '概率论', '5', '2');
INSERT INTO `course` VALUES ('2', 'MySQL', '5', '2');
INSERT INTO `course` VALUES ('3', '英语', '5', '3');
INSERT INTO `course` VALUES ('4', '毛概', '2', '5');
-- ----------------------------
-- Table structure for score
-- ----------------------------
DROP TABLE IF EXISTS `score`;
CREATE TABLE `score` (
`score_id` int(11) NOT NULL,
`course_num` int(11) NOT NULL,
`student_num` int(11) NOT NULL,
`score` int(3) NOT NULL COMMENT '分数',
PRIMARY KEY (`score_id`),
KEY `course_num` (`course_num`),
KEY `student_num` (`student_num`),
CONSTRAINT `score_ibfk_1` FOREIGN KEY (`course_num`) REFERENCES `course` (`course_num`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `score_ibfk_2` FOREIGN KEY (`student_num`) REFERENCES `student` (`student_num`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='学生成绩表';
-- ----------------------------
-- Records of score
-- ----------------------------
INSERT INTO `score` VALUES ('1', '1', '15001', '89');
INSERT INTO `score` VALUES ('2', '1', '15002', '78');
INSERT INTO `score` VALUES ('3', '1', '15003', '80');
INSERT INTO `score` VALUES ('4', '1', '16004', '78');
INSERT INTO `score` VALUES ('5', '2', '15001', '85');
INSERT INTO `score` VALUES ('6', '2', '15002', '78');
INSERT INTO `score` VALUES ('7', '2', '15003', '75');
INSERT INTO `score` VALUES ('8', '2', '16004', '89');
INSERT INTO `score` VALUES ('9', '3', '15001', '87');
INSERT INTO `score` VALUES ('10', '3', '15002', '77');
INSERT INTO `score` VALUES ('11', '3', '15003', '88');
INSERT INTO `score` VALUES ('12', '3', '16004', '90');
INSERT INTO `score` VALUES ('13', '4', '15001', '90');
INSERT INTO `score` VALUES ('14', '4', '15002', '98');
INSERT INTO `score` VALUES ('15', '4', '15003', '89');
INSERT INTO `score` VALUES ('16', '4', '16004', '88');
-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`student_num` int(11) NOT NULL COMMENT '学生学号',
`student_name` varchar(5) CHARACTER SET utf8 NOT NULL COMMENT '学生姓名',
`student_sex` varchar(1) CHARACTER SET utf8 NOT NULL DEFAULT '男' COMMENT '学生性别',
`student_birthday` varchar(20) CHARACTER SET utf8 NOT NULL COMMENT '学生生日',
PRIMARY KEY (`student_num`),
KEY `student_num` (`student_num`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='学生基本信息表';
-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES ('15001', 'Mark', '男', '1997-02-19');
INSERT INTO `student` VALUES ('15002', 'Wen', '男', '1997-09-16');
INSERT INTO `student` VALUES ('15003', 'Lee', '女', '1997-03-12');
INSERT INTO `student` VALUES ('16004', 'Mary', '女', '1996-07-12');