MySQL Class4

学习内容:

1.any all 关键字

如果where 后的条件需要比对多个值时,可以用any或all关键字

例如:

SELECT cno,sno,degree FROM score WHERE degree >ANY(SELECT degree FROM score WHERE cno='3-245') AND cno='3-105' ORDER BY degree DESC;

2.数据库设计:

分析需求,设计E-R模型,利用三大范式审核结构,代码编写

(a)E-R模型:

包含实体,实体属性,实体间的关系

实体即关键对象,例如学校内的教师就是一个实体,实体属性就是实体本身的一些特征,例如教师有工号、姓名、性别、年龄、教授的学科等属性,

实体间关系,例如教师教授学生,教师与学生间的关系就是教授与被教授,同时实体间的关系还分为:1对1,例如每个人的基因都是唯一的,一对一的,

一对多,例如一个老师可以教授多名学生,多对多,例如一个学生可以学多门课,而一门课有多个学生学习。

E-R模型:

设计时注意:

1.如果是1:1的关系:那么将实体转换成表,将任意1端实体的主键拿到另一端实体做外键。

2.如果是1:N的关系:那么将实体转换成表,关系不成表,将1端实体的主键拿到N端实体做外键,即1端为主表,n端为副表。

3.如果是M:N的关系:将实体转换成表,关系形成表,同时将两端实体的主键拿过来作为该表的外键,形成复合主键。

复合主键: 

CREATE TABLE usecar(
driverid INT,
carid INT,

PRIMARY KEY (driverid,carid),

//复合主键,含一个以上的字段
CONSTRAINT fk_driverid FOREIGN KEY(driverid) REFERENCES drivers(did)
ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT fk_carid FOREIGN KEY(carid) REFERENCES cars(cid)
ON UPDATE CASCADE ON DELETE CASCADE
);

(b)范式:

第一范式:将字段最小化分解,例如地址一般包含省市县街道这几级,把每一级分开成为多个字段。

第二范式:确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言),一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中,如果一个表只有一个单一字段的主键且该表符合第一范式,那么该表必定符合第二范式。

下表的主键是由订单编号和商品编号而形成的复合主键,商品名称、数量、单位、价格和订单编号主键没有关系,违反第二范式,应当把商品编号以及商品名称、数量、单位、价格单独建表

第三范式:每一列与主键列直接相关,而不是间接相关,每条字段相互独立,不存在依赖关系,例如一条家电类商品信息,可以把家电的种类单独做一张表,用编号代替家电种类名称。

 例:

学号 宿舍 费用
062201 A 900
062230 B 1200
062240 B 1200
知道学号或宿舍就能得到费用,违反范式3,应改为:
学号 宿舍
062201 A
062230 B
062240 B
 
宿舍 费用
A 900
B 1200
原文地址:https://www.cnblogs.com/whwjava/p/8584352.html