一.数据库设计
1. 概念:根据业务需要,结合所选用的DBMS(数据库管理系统),构造出最优的数据存储模型。
并建立好数据库中的表结构及表与表之间的关联关系的过程。
使之对数据有效的存储,高效的访问数据。
2. 当前流行的数据库:
关系型数据库系统:MySQL、Oracle、SQL Server、PgSql
NoSQL系统:Mongo、Memcache、Redis
3. 设计目的:
1.减少数据冗余
2.避免数据维护异常
3.节约存储空间
4.高效的访问
4. 步骤:
1.需求分析(1.所要存储的数据是什么?
2.数据的存储特点、生命周期(时效性 非时效性 非永久存储(设置归档、清理规则) 永久存储(分表分库存储))?
3.数据和属性各自的特点有哪些?)
需要解决的一些问题:
1.实体及其间关系(1:1 1:* *:*)
2.实体包含的属性
3.属性和属性的组合标识唯一实体
2.逻辑设计(ER图对数据库进行逻辑建模)
名词解释:
关系(表) 元组(表中一行) 属性(表中一列)
候选码(唯一确定一个元组) 主码(一个关系中有多个候选码,选其中一个为主码)
域(属性的取值范围) 分量(元组中的一个属性值)
ER图例说明:
矩形:实体
菱形:联系集
椭圆:实体的属性
线段:连接属性到实体,或实体到联系集
下划线:标识主码
3.物理设计(根据数据库自身的特点把逻辑设计转换为物理设计)
1.选择合适的数据库管理系统(eg:Oracle,mysql等等)
I.成本(版权费用等)
II.功能(大事物)
III.操作系统
IV.使用语言
商业数据库(企业级项目):Oracle(window和ninux等都可以) SQLServer(只支持window)(.lit语言)
开源数据库(适用于互联网项目):MySQL(window和ninux等都可以) PgSQL(window和ninux等都可以)
2.定义数据库、表及字段的命名规范
3.根据所选的DBMS系统选择合适的字段类型
4.反规范化设计(空间换时间)
允许存在一些数据冗余,提高读取效率
1.减少表的关联数量
2.增加数据的读取效率
3.反范式话一定要适度
4.维护和优化(1.新的需求进行建表2.索引优化3.大表拆分)
1.维护数据字典(1.使用第三方工具2.利用数据库本身的备注字段来维护eg:comment 3.导出数据字典)
2.维护索引
1.出现在where从句、group by从句、order by从句中的列
2.可选择性高的列要放在索引的前面
3.索引中不要包括太长的数据类型
3.维护表结构
4.在适当的时候对表进行水平拆分或垂直拆分
5.数据库设计范式
第一范式:数据库中的表都是二维表
第二范式:数据库的表不存在非关键字段对任一关键字段的部分函数依赖
部分函数依赖是指存在这组合关键字中的某一关键字决定非关键字的情况
第三范式:在第二范式的基础上,如果数据表中不存在非关键字段
对任意候选关键字段的传递函数依赖则符合
即不能存在非关键字段之间的函数依赖
BC范式:在第三范式基础上,数据库表中如果不存在任何字段对任一候选关键字段的传递函数依赖则符合
即如果是复合关键字,复合关键字之间也不可存在传递函数依赖
6.操作异常(插入异常、删除异常、更新异常)和数据冗余
浙公网安备 33010602011771号