根据sqlercn老师的教学视频学习整理。谢谢老师!侵删。
一,数据库设计定义
1,根据业务系统的具体需要,结合所选用的DBMS(数据库管理系统——MySQL,Oracle,SQLServer,PgSql),为这个业务系统构造出最优的数据存储模型
2,建立好数据库中的表结构及表与表之间的关联关系的过程
3,有效的对应用系统中的数据进行存储,并可以高效的对已存储的数据进行访问
二,数据库设计目的
数据库设计目的三,数据库设计步骤
数据库设计步骤3.1,需求分析
3.1.1,为什么要进行需求分析
1,了解系统中所要存储的数据
2,了解数据的存储特点
3,了解数据的生命周期
3.1.2,需求分析需要弄清的事项
1,实体及实体之间的关系(1对1,1对多,多对多)
2,实体所包含的属性有哪些
3,哪些属性或属性的组合可以唯一标识一个实体
3.1.3,实例
小型的电子商务网站,该商务网站系统中应包含如下几个核心模块:
用户模块,商品模块,订单模块,购物车模块,供应商模块
用户模块:
用于记录注册用户的信息
1,属性:用户名,密码,电话,邮箱,身份证号,地址,姓名……
2,可选唯一标识属性:用户名,身份证号,电话
3,存储特点:随系统上线时间逐渐增加,需要永久存储
商品模块:
用户记录网站中所销售的商品信息:
1,属性:商品编码,商品名称,商品描述,商品品类,供应商名称,重量,有效期,价格……
2,可选唯一标识属性:(商品名称,供应商名称)、(商品编码)
3,存储特点:对于下线商品可以归档存储
订单模块:
用于用户订购商品的信息
1,属性:订单号,用户姓名,用户电话,收货地址,商品编号,商品名称,数量,价格,订单状态,支付状态,订单类型……
2,可选唯一标识属性:(订单号)
3,存储特点:永久存储(分表,分库存储)
购物车模块:
用户保存用户购物时选择的商品
1,属性:用户名,商品编号,商品名称,商品价格,商品描述,商品分类,加入时间,商品数量……
2,可选唯一标识属性:(用户名,商品编号,加入时间)、(购物车编号)
3,存储特点:不用永久存储(设置归档,清理规则)
供应商模块:
用于保存所销售商品的供应商信息
1,属性:供应商编号,供应商名称,联系人,电话,营业执照号,地址,法人……
2,可选唯一标识属性:(供应商编号),(营业执照号)
3,存储特点:永久存储
各功能模块之间的关系
各模块之间的关系
3.2,逻辑设计
3.2.1,逻辑设计如何工作
1,将需求转换为数据库的逻辑模型
2,通过ER图的形式对逻辑模型进行展示
3,同所选用的具体的DBMS系统无关
3.2.2,名词解释
1,关系:一个关系对应通常所说的一张表
2,元组:表中的一行即为一个元组
3,属性:表中的一列即为一个属性,每个属性都有一个名称,称为属性名
4,候选码:表中的某个属性组,它可以唯一确定一个元组
5,主码:一个关系有多个候选码,选定其中一个为主码
6,域:属性的取值范围
7,分量:元组中的一个属性值
3.2.3,ER图实例说明
ER图说明
电商系统的ER图
加下划线的为主码或者主键
3.2.4,数据操作异常及数据冗余
操作异常:
1,插入异常:如果某实体随着另一个实体的存在而存在,即缺少某个实体时无法表示这个实体,那么这个表就存在插入异常
2,更新异常:如果更改表所对应的的实体所对应的的某个实例的单独属性时,需要多行更新,那么就说明这个表存在更新异常
3,删除异常:如果删除表的某一行来反应某实例,实例失效时,导致另一个不同实体实例信息丢失,那么这个表中就存在删除异常
数据冗余:
只相同的数据在多个地方存在,或者说表中的某个列可以由其它列计算得到,这样就说表中存在着数据冗余
3.2.5,范式
第一范式
第二张表不符合第一范式要求
要求数据库中的表都是二维表,数据库中所有字段都是单一属性,不可再分
第二范式
不符合第二范式要求的表
所有单关键字的表都符合第二范式。数据库中的表不存在非关键字段对任一候选关键字段的部分函数依赖
解决方式
第三范式
不符合第三范式要求的表
数据表中不存在非关键字段对任意候选关键字段的传递函数依赖
解决方法
BC范式
不符合BC范式要求的表
在第三范式的基础上,数据库表中不存在任何字段对任一候选关键字段的传递函数依赖
不符合BC范式要求的表
解决问题
3.3,物理设计
3.3.1,如何进行物理设计
1,选择合适的数据库管理系统(Oracle,SQLServer,MySQL及PgSQL)
2,定义数据库,表及字段的命名规范
3,根据所选的DBMS系统选择合适的字段类型
4,反范式化设计(以空间换时间)
3.3.2,如何进行物理设计
一般会选择MySQL3.3.3,MySQL常用存储引擎
读写速度比(3:1)
MySQL常用存储引擎
3.3.4,数据库及表结构建立
表及字段的命名规范
1,可读性原则(cust_address)
2,表意性原则
3,长名性原则(缩写容易引起误会)
字段类型的选择原则
生日可以使用的存储方式
1,字段类型对数据库设计的影响:列的数据类型,一方面影响数据存储空间的开销,另一方面会影响数据查询性能。
2,当一个列可以选择多种数据类型时,应优先考虑数字类型(int),其次是日期或二进制类型,最后是字符类型。
3,对于相同级别的数据类型,应该优先选择占用空间小的数据类型
上图生日可以使用4种类型进行存储,选择顺序为:int——>Datetime——>Char——>varchar。虽然Char和varchar属于同级别的数据类型。但是Char占用空间更小。所以Char优先于varchar
不同数据类型占用的存储空间
字段类型选择原则制定原因
1,在对数据进行比较(查询条件,JOIN条件及排序)操作时,同样的数据,字符处理往往比数据处理慢
2,在数据库中,数据处理以页(16K字节一页)为单位,列的长度越小,利于性能提升。
char和varchar选择原则
1,如果列中要存储的数据长度差不多是一致的,则应考虑用Char,否则应用varchar。
2,如果列中最大数据长度小于50Byte,则一般也考虑用Char。(如果这个列很少使用,则基于节省空间和减少I/O的考虑,也可以使用varchar)
3,大于50Byte的不适宜用Char
float和Decimal选择原则
1,decimal用于存储精确数据(金融领域使用),float只能存储非精确数据。
2,float存储空间比decimal小。所以如果是存储非精确数据则使用float。
如何选择主键
1,区分业务主键和数据库主键:业务主键用于表示业务数据,进行表与表之间的关联;数据库主键为了优化数据库存储(Innodb会生成6个字节的隐含主键)
2,根据数据库类型考虑主键是否要顺序增长
3,主键的字段类型所占空间要尽可能小
其他注意事项
1,避免使用外键约束:会降低数据导入效率,增加维护成本
2,避免使用触发器:会降低数据导入效率,出现意想不到的数据异常,使业务逻辑变得复杂
3,避免预留字段:完全没有必要,和增加字段没啥区别
网友评论
头大