快速上手MySql && MySql GUI工具 SQLyog Community (7)

来源:互联网 发布:java多线程和高并发 编辑:程序博客网 时间:2024/06/04 18:36
/*
数据库的设计
(1)当数据库比较复杂时,需要我们设计数据库
(2)良好的数据库设计:
1)节省数据的存储空间
2)能够保证数据的完整性
3)方便进行数据库应用系统的开发


软件项目开发周期:
1)需求分析阶段:分析客户业务和数据处理需求;
2)概要设计阶段:设计E-R模型(概念模型),确认绣球信息正确性和完整;
3)详细设计阶段:将E-R模型转换为多张表(物理模型)、进行逻辑设计,并应用数据库设计三大范式进行审核;
4)代码编写阶段:选择具体数据库进行物理实现;
5)软件测试阶段
6)安装部署


设计数据库的步骤:
1)收集信息
2)标识对象(实体-Entity)
3)标识每个实体的属性
4)标识对象之间的关系


绘制E-R图
E-R实体关系图


映射基数: 一对多、多对一、一对一、多对多


将E-R图转换为表
1)将各实体转换为对应的表
2)将各属性转换为各表对应的列
3)标识每个表的主键列(需要注意的是:没有主键的表添加ID编号列,它没有实际含义,用于做主键或外键)
4)在表之间建立主外键,体现实体之间的映射关系


数据库设计规范
(1)仅有好的DBMS并不足以避免数据冗余,必须在数据库的设计中创建好的表达式
(2)三个范式,范式是具有最小冗余的表结构


1)第一范式(必须具有主键,并且每个属性值,都是不可再分的最小数据单位)
2)第二范式(关系模式中的所有非主属性都完全依赖于主关键字,称关系是第二范式)


在应用中使用以上关系模式有以下问题:
a数据冗余 b更新异常 c插入异常 d删除异常


异常原因:非关键字属性只是部分依赖组合关键字,而不是完全依赖。


3)第三范式(非主关键字不能依赖于其他非主关键字,即非主关键字之间不能有函数(传递)依赖关系)






一个学生属于一个班级,一对一 主外键关联
一个班级可以有N个学生,一对多 主外键
一个学生可以修N个课程,多对多必须建立一个中间表


`tb_student`
*/


CREATE TABLE tb_clazz(
id INT PRIMARY KEY AUTO_INCREMENT,
clazz_name VARCHAR(18)
)


#一对多用主外键关联
CREATE TABLE tb_student (
id INT PRIMARY KEY AUTO_INCREMENT,
stu_name VARCHAR(18),
sex VARCHAR(6),
age INT,
clazz_id INT,
CONSTRAINT tb_student_clazz_fk FOREIGN KEY (clazz_id) REFERENCES tb_clazz(id)
)


#证明了多对多关系不能




#学生和课程是多对多关系
CREATE TABLE tb_course(
id INT PRIMARY KEY AUTO_INCREMENT,
course_name VARCHAR(18),
xuefen INT
)


#----------------------------------------------------------(下述的多对多没有创建成功)


#多对多关系,建立一张中间表处理关联关系


CREATE TABLE tb_student_course(
id INT PRIMARY KEY AUTO_INCREMENT,
student_id INT,
course_id INT,
gride INT,
CONSTRAINT tb_student_fk FOREIGN KEY (student_id) REFERENCES tb_student(id),
CONSTRAINT tb_course_fk FOREIGN KEY (course__id) REFERENCES tb_course_(id)
)




CREATE TABLE tb_student_course(
student_id INT,
course_id INT,
gride INT,
PRIMARY KEY(student_id,course_id),
CONSTRAINT tb_student_fk FOREIGN KEY (student_id) REFERENCES tb_student(id),
CONSTRAINT tb_course_fk FOREIGN KEY (course__id) REFERENCES tb_course_(id)
)


CREATE TABLE tb_student_course(
id INT PRIMARY KEY AUTO_INCREMENT,
student_id INT,
course_id INT,
gride INT,
UNIQUE (student_id,course_id),
CONSTRAINT tb_student_fk FOREIGN KEY (student_id) REFERENCES tb_student(id),
CONSTRAINT tb_course_fk FOREIGN KEY (course__id) REFERENCES tb_course_(id)
)





原创粉丝点击