Lesson7 Overview of Data Modeling and Database Design(数据建模和数据库设计)
-
A:软件开发步骤
- 需求分析
- 系统设计
- 代码构建和说明文档
- 系统测试
- 运行维护
-
B:数据库设计
- 将模型转换为可行的软件表示形式
- 结合规则、判断和常识来创建设计
- 数据库设计开发要求:
- 整体性能(不同的项目,侧重点不同,整体性能偏向不一样)
- 全局性考虑
- 应用
- 和其他系统的交互
- 文档工作和交流工作
- 数据库设计弹性(可扩充)
- 使用现有的解决方案(引入框架,模块,不要自己构建)
-
C:数据库模型
- 用户想法
- 实现用户想法对应的实体模型
- 实体模型对应的实体表
- 完善实体表之间的关系,变成数据库模型
-
D:实体关系模型
- 实体:实体用来描述表述具有相同特征和性质的事物(类似java的类),实体由实体名和实体属性表示;
- 属性:实体所具有的某一种特性,一个实体可以有若干属性;
- 实体关系(E-R图):满足实体与实体之间的连接方法,符合业务逻辑要求
-
E:关系类型(从关系双方来判定关系类型)
- 一对一:一个实体只能与一个实体关联
- 一对多(多对一):一个实体可以和多个实体关联
- 多对多:多个实体和多个实体之间产生关联
-
F:E-R图:实体-关系图(Entity Relationship Diagram):提供了表示实体,属性和关系的方法,用来描述现实世界的概念模型
- 构成E-R图的基本要素:实体,属性,实体关系
- ER图中符号表示:
- #:唯一,可能表示主键
- *:非空
- o(Optional):可有可无
- 虚线(may-be关系):顾客这边为虚线,顾客可能有订单也可能没有订单
- 实线(must-be):订单这边为实线,一个订单对应一个顾客
- |:代表强制在|一方建立一个联合主键,将对方的id拿过来作为联合主键
- 伞状图:代表多的一方
- ER图转化为数据中的表
- 实体名=表名
- 实体属性=表中的列
- 具有唯一特点的属性=主键
- 实体关系=外键(其他表的主键)
-
G:范式(设计规范)
-
第一范式(1NF):一张表中,每个列里面的值不可以在进行分割;
-
第二范式(2NF):在第一范式满足的基础上,表中的非主键都要依赖于主键;
-
第三范式(3NF):在满足第二范式基础上,表中的非主键都必须依赖于主键列,而不能产生间接依赖
例如这样设计一张表: 订单表: 订单编号 是主键 订单编号 订单名称 顾客编号 顾客姓名 顾客编号依赖于订单编号,顾客姓名依赖于顾客编号,从而顾客姓名间接的依赖于订单编号,那么这里产生了依赖传递,所以这个设计是不满足第三范式的
-
巴斯-科德范式(BCNF)
-
第四范式(4NF)
-
第五范式(5NF完美范式)
-
-
H:外键和主键
- 主键:
- 主键列必须满足非空为一;
- 只要满足非空为一的列都可以作为主键;
- 可以让表中有意义的列做主键,比如说学号,既表示学生学号又作为主键,满足非空为一;
- 也可以找没有意义的列做主键,用来表示一行数据记录(id);
- 联合主键:多个列在放在一起作为主键,要求联合主键中的列在一起非空为一
- 外键:
- 表中的列作为外键,外键通常是引用其他表的主键作为该表外键,产生关系;
- 外键引用的不是主键也可以,但必须是非空为一的列;
- 外键引用主键列的值,主键列中没有出现的值,外键列的值也不可以出现;
- 外键列的值可以为空的;
- 可以把外键列作为该表的主键列,前提是这个外键列必须是非空为一;
- 其他表的联合主键作为某表联合外键的时候,必须把联合主键中的列都要引用过来,作为该表的联合外键。
- 主键:
Lesson 8 Creating Tables(建表语句)
-
A:建表格式:
- create table 表名(
列名1 数据类型 列级约束,
列名2 数据类型 列级约束,
列名3 数据类型 列级约束,
);
- create table 表名(
列名1 数据类型 列级约束,
列名2 数据类型 列级约束,
列名3 数据类型 列级约束,
列名4 数据类型 列级约束,
表级约束1,
表级约束2
);
-
B:表元素:
-
关键字:create(创建),table (表类型),数据类型关键字,约束关键字
-
表名:实体名
-
列名:实体属性
-
数据类型:varchar(),varchar2(),char(),number,date
- 其他类型 BLOB CLOB:BLOB和CLOB都是大字段类型,BLOB是按二进制来存储的,而CLOB是可以直接存储文字的
- char用于存储定长类型;效率比varchar要稍高,占用空间比varchar要多.
- 比如“asd”,对于char(9)就表示存储9个字节(包括6个空字节),取值就需要.trim()把两边的空号去掉。
- 对于varchar(9),则是按照实际字节数存储的,只存储三个字节。
- varchar2型与varchar型的区别:
- 1、varchar2把所有字符都占两字节处理(一般情况下),varchar只对汉字和全角等字符占两字节,数字,英文字符等都是一个字节;
- 2、VARCHAR2把空串等同于null处理,而varchar仍按照空串处理;
- 3、VARCHAR2字符要用几个字节存储,要看数据库使用的字符集,
-
约束:
-
a、列级约束(行级约束):在列声明的时约束
- primary key(主键约束),f
-
-