您的位置:首页 > 数据库

数据库设计(一)(需求分析,演示,设计范式,表及字段关系)

2017-03-22 00:00 120 查看

数据库设计

需求分析
1.了解系统中所要存储的数据
2.了解数据的存储特点(例如日志:存储量大,但又不是主要数据)
3.了解数据的生命周期

要搞清楚的问题
1.实体及实体之间的关系(1对1,1对多,多对多)
2.实体所包含的属性
3.那些属性或属性的组合可以唯一标识一个实体

实例演示
模块:用户,商品,订单,购物车,供应商
用户:用户记录用户嘻嘻你
属性有:用户名,密码,电话,邮箱,身份证,地址,姓名,昵称
唯一标识属性:用户名,身份证,电话
存储特点:随系统上线时间逐渐增加,永久保存

商品:用户记录网站销售的商品信息
唯一标识:商品编码,(供应商,名称)
特点:对于下线商品可以归档存储,切记不能删除

订单模块:
标识:订单号,(用户名,下单时间,商品)
特点:永久存储(分表,分库存储)

购物车:
唯一标识:(用户名,商品编号,加入时间),购物车编号
特点:不用永久存储(设置归档,清理规则)

供应商模块:用户保存所销售商品的供应信息
标识:(供应商编号),(营业执照)
存储特点:永久存储,(不会太多,自然保存)

首先要去分析这个项目有哪些模块--->然后针对具体模块分析有哪些属性--->针对属性分析哪个属性或哪几个属性的集合可以用来标识这个属性[唯一标识]------->分析这个模块数据是否永久存储,是否数据增长很快,是否经常查询---->如果是就要考虑分库分表了。如果不是,那么这些数据是否只会存储一定时间,是否需要永久记录--->如果是我们就定期归档及数据的迁移操作了。

关系:
用户 一对多 订单
用户 一对多 购物车
购物车 多对多 商品
订单 多对多 商品
商品 多对多 供应商

逻辑设计:
1.将需求转化为数据库逻辑模型
2.通过ER图的形式对逻辑模型进行展示
3.同所选用的具体的DBMS系统无关

设计范式:
常见数据库设计范式包括:第一,第二,第三范式以及BC范式还有第四第五,重点是前三范式
这也是目前我们大多数数据库设计所要遵循的范式

数据操作异常及数据冗余
分三种:1.插入异常:如果某实体随着另一个实体的存在而存在,即缺少某个实体时无法表是这个实体,那么这个表就存在插入异常
2.更新异常:如果更改表所对应的某个实体实例的单独属性时,需要将多行更新,那么就说这个表存在更新异常。
3.删除异常:如果删除表的某一行来反映某实体实例失效时导致另一个不同实体实例信息丢失,那么这个表中就存在删除异常
数据冗余:是指相同的数据在多个地方存在,或者说表中的某个列可以有其他列计算得到,这样就说表中存在着数据冗余

数据库范式:

第一范式:
数据库表中的所有字段都是单一属性,不可再分。
这个单一属性是有基本的数据类型所构成的
换句话说:第一范式要求数据库中的表都是二维表

第二范式:
定义:数据库的表中不存在非关键字段对任一候选关键字段的部分函数依赖。
部分函数依赖是指存在着组合关键字种的某一关键字决定非关键字的情况
换句话说:所有单关键字段的表都符合第二范式。
存在问题:增删改

第三范式:
在第二范式的基础之上定义的。
如果数据表中不存在非关键字段对任意候选关键字段的传递函数依赖则符合第三范式。
举例:
商品名称 价格 商品描述 重量 有效期 分类 分类描述
可乐 3 250 2014。6 酒水饮料 碳酸饮料
苹果 8 500 生鲜食品 水果
存在传递函数依赖关系:
商品名称-》分类-》分类描述,也就是说存在非关键字段“分类描述”对关键字段“商品名称”的传递函数依赖
存在问题:每存一个商品都会记录分类和分类描述,存在数据冗余,还有数据的增删改

BC范式:
定义:在第三范式基础上,数据库表中如果不存在任何字段对任一候选关键字段的传递函数依赖则符合BC范式。
也就是说如果是复合关键字,则复合关键字之间也不能存在函数依赖关系
举例:
供应商 商品ID 供应商联系人 商品数量
一厂 1 张三 10
一厂 2 李四 20
二厂 1 王五 20
假定:供应商联系人智能受雇于一家供应商,每家供应商可以供应多个商品,则存在如下决定关系:
(供应商,商品ID)-》(联系人,商品数量)
(联系人,商品ID)-》(供应商,商品数量)
存在下列因此不符合BCNF要求:
(供应商)-》(供应商联系人)
(供应商联系人)-》(供应商)
并且存在数据操作异常及数据冗余
解决,拆表
1表:供应商 商品ID 商品数量 2表: 供应商 供应商联系人

这样好记
1NF:列不可分就满足1NF了。
2NF:不存在部分依赖,比如 (A,B)→C。(消除非主属性对主属性的传递依赖,即完全依赖于主键)
3NF:不存在传递依赖,比如A→B→C。(在2NF基础上消除了传递依赖)


物理设计:

1.选择合适的数据库管理系统
Oracle,SQLServer,MySQL及PgSQL
2.定义数据库,表及字段的命名规范
3.根据所选的DBMS系统选择合适的字段类型。(varchar还是char)
4.反范式化设计。(为了特定读取,省去查询或者其他操作,增加了数据库的冗余,换来了读取效率)

数据库的选择:
常见的DBMS系统:Oracle SQLServer 这两款是商业数据库 MySQL PgSQL 这两款属于开源数据库 --成本的考虑
配合的语言
用于场景(公司性质) 商业数据库(更适合企业级项目) 开源数据库(适用于互联网项目)

未完待续(码字不易)……
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  MySQL 数据库设计
相关文章推荐