SQL数据库设计(一)---需求分析与逻辑设计
2016-05-22 21:20
239 查看
今天先来介绍 数据库设计中的需求分析和逻辑设计(ER图)阶段,明天介绍物理设计与维护优化,数据库设计是非常有意思的:-)
并建立好数据库中的表结构,以及表与表之间的关联关系的过程.使之能有效的对应用系统中的数据进行存储,
并可以高效的对已经存储的数据进行访问.
避免数据维护异常
节约存储空间
高效的访问
了解系统中所要存储的数据
了解数据的存储特点
了解数据的存储周期
实体包含的属性是什么
那些属性或属性的组合可以唯一标示一个实体
使用ER图对数据库进行逻辑建模,与DBMS无关。
不满足三个范式的设计的数据库会出现操作异常及数据冗余
操作异常
数据冗余:相同的数据在多个地方得到,或者说表中的某个列可以由其他列计算得到。
第一范式要求数据库中所有的表都是二维表.
部分函数依赖指存在组合关键字中某一关键字决定非关键字的情况.
所有单关键字段的表都符合第二范式
不满足第二范式的示例
[b]解决不满足第二范式造成的操作异常问题[/b]
如果数据库表不存在非关键字段对任意候选关键字段的传递函数依赖则符合第三范式
不满足第三范式的示例
解决不满足第三范式造成的操作异常
如果是复合关键字,则复合关键字之间也不能存在函数依赖关系.
参考资料
http://www.2cto.com/database/201409/331105.html
数据库设计
根据系统业务的需要,结合我们所选用的DBMS,为这个业务系统构建出最优的数据存储模型。并建立好数据库中的表结构,以及表与表之间的关联关系的过程.使之能有效的对应用系统中的数据进行存储,
并可以高效的对已经存储的数据进行访问.
优良的数据库设计
减少数据冗余避免数据维护异常
节约存储空间
高效的访问
需求分析
分析数据和属性各自的特点了解系统中所要存储的数据
了解数据的存储特点
了解数据的存储周期
需求分析中需要了解的问题
实体之间的关系实体包含的属性是什么
那些属性或属性的组合可以唯一标示一个实体
电商网站数据模块的分解
模块 | 属性 | 可选唯一标识属性 | 存储特点 |
---|---|---|---|
用户模块 | 用户名,密码,电话,邮箱,身份证号,地址,姓名等 | 用户名,身份证号,电话 | 随上线时间增加,需要永久存储 |
商品模块 | 商品编码,商品名称,商品描述,商品品类,供应商名称,重量,有效期,价格等 | (商品名称,供应商名称),商品编码 | 对于下线商品可以归档存储 |
订单模块 | 订单号,用户姓名,用户电话,收货地址,商品编号,商品名称,数量,价格,订单状态,支付状态,订单类型 | 订单号 | 永久存储(分表,分库存储) |
购物车模块 | 用户名,商品编号,商品名称,商品和价格,商品描述,商品分类,加入时间,商品数量 | (用户名,商品编号,加入时间),购物车编号 | 不用永久存储(设置归档,清理规则) |
供应商模块 | 供应商编号,供应商名称,联系人,电话营业执照号,地址,法人 | 供应商编号,营业执照号 | 永久存储 |
逻辑设计
ER图:逻辑模型得到展示方式使用ER图对数据库进行逻辑建模,与DBMS无关。
ER图的图形含义
电商网站数据模块ER图
逻辑设计名词解释
不满足三个范式的设计的数据库会出现操作异常及数据冗余
操作异常
数据冗余:相同的数据在多个地方得到,或者说表中的某个列可以由其他列计算得到。
第一范式(1NF)
数据库表中所有字段都是单一属性的,不可再分的,这些单一属性使用基本的数据结构构成的.第一范式要求数据库中所有的表都是二维表.
第二范式(2NF)
数据库中的表不存在非关键字段对任意候选关键的字段的部分函数依赖.部分函数依赖指存在组合关键字中某一关键字决定非关键字的情况.
所有单关键字段的表都符合第二范式
不满足第二范式的示例
[b]解决不满足第二范式造成的操作异常问题[/b]
第三范式(3NF)
第三范式是建立在第二范式的基础上的如果数据库表不存在非关键字段对任意候选关键字段的传递函数依赖则符合第三范式
不满足第三范式的示例
解决不满足第三范式造成的操作异常
BC范式(BCNF)
在第三范式的基础上,数据库表中如果不存在任何字段对任意候选关键字段的传递函数依赖则符合BC范式如果是复合关键字,则复合关键字之间也不能存在函数依赖关系.
参考资料
http://www.2cto.com/database/201409/331105.html
相关文章推荐
- Oracle数据库—— 游标的创建和应用
- Memcached安装gzip: stdin: not in gzip format问题解决办法
- SQL语句生成指定范围内随机数
- MongoDB简单入门
- Oracle数据库—— PL/SQL进阶编程
- oracle 安装心得记录
- Oracle数据库—— PL/SQL基础编程
- finally被置空导致数据库连接挂死
- 基于FS4412嵌入式系统移植(7) sqlite3交叉编译与移植
- mysqldump详细了解
- 数据库的一些基本语法二
- 数据库的一些基本语法一
- MySQL基本操作
- 如何编写一个分布式数据库
- 安装MySQL样本数据库Sakila
- Django连接数据mysql
- SQL注入测试平台 SQLol -1. 简介与安装
- MySQL 5.7启动失败
- MySql中启用InnoDB数据引擎的方法
- MySQL数据库MyISAM和InnoDB存储引擎的比较