一、设计数据库的目的
减少数据冗余
避免数据维护异常
节约存储空间
高效的访问
二、设计步骤
1、需求分析
数据库需求的作用点
数据是什么
数据有哪些属性
数据和属性各自的特点有哪些
为什么要进行需求分析
了解系统中所要存储的数据
了解数据的存储特点
了解数据的生命周期
问题
实体及实体之间的关系(一对一,一对多,多对多)
实体所包含的属性有什么
属性或属性的组合可以唯一标识一个实体
简单例子
电商系统
核心模块:
用户模块、商品模块、订单模块、购物车模块、供应商模块
分析:
用户模块
注册
包含属性: 用户名、密码、电话、邮箱、身份证、地址、姓名、昵称…
可选唯一标识属性: 用户名、身份证、电话、
存储特点:随系统上线时间逐渐增加,需要永久存储
商品模块
包含属性:商品编码、商品名称、描述、品类、供应商名称、重量、有效期、价格…
可选唯一标识属性:(商品名称、供应商名称)、(商品编码)
存储特点:对于下线商品可以归档存储
订单模块
包含属性:订单号、用户姓名、电话、地址、商品编号、商品名称、数量、价格、订单状态、支付状态、订单类型…
可选唯一标识属性:订单号
存储特点:永久存储(分表、分库存储)
…
2、 逻辑设计
使用ER图对数据库进行逻辑建模
将需求转化为数据库的逻辑模型
通过ER图的形式对逻辑模型进行展示
同所选用的具体的DBMS系统无关
名词解释
关系:一个关系对应通常所说的一张表
元组:表中的一行即为一个元组
属性: 表中的一列即为一个属性;每个属性都有一个名称,称为属性名
候选码:表中的某个属性组,它可以唯一确定一个元组
主码:一个关系有多个候选码,选定其中一个为主码
域:属性的取值范围
分量:元组中的一个属性值
ER图形状表示
矩形:表示实体集,矩形内写实体集的名字
菱形:表示联系集
椭圆:实体的属性
如图
设计范式
先来聊聊数据操作异常及数据冗余
操作异常
- 插入异常:如果某实体随着另一个实体的存在而存在,即缺少某个实体时无法表示这个实体,那么这个表就存在插入异常。
- 更新异常:如果更改表所对应的某个实体实例的单独属性时,需要将多行更新,那么就说这个表存在更新异常
- 删除异常:如果删除表的某一行来反映某实体实例失效时导致另一个不同实体实例信息丢失,那么这个表中就存在删除异常
数据冗余
数据冗余是指相同的数据在多个地方存在,或者说表中的某个列可以由其他列计算得到,这样就说表中存在着数据冗余
第一范式
定义:数据库表中的所有字段都是单一属性,不可再分的。这个单一属性是由基本的数据类型所构成的,如整数,浮