数据建模基础理论 – 数据建模及规范化(1)
2014-03-03 19:51
260 查看
数据建模概要
数据建模的过程是将现实中的业务不断地进行抽象化(Abstraction),实现从现实世界(RealWorld)中的业务为概念世界(Conception World)中的模型,再到计算机世界(ComputerWorld)中的表的转换过程。
![](https://img-blog.csdn.net/20140303194813984?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGJzaW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
将现实世界中的业务根据抽象化的方法,转化为概念世界的数
4000
据模型,最终转换为能在数据库中的表,来保存该现实业务规则和表达现实业务特征的数据。在这个过程当中,为了保证将现实业务正确地、完整地、无冗余地保存到数据库中,需要在将现实世界抽象为概念世界模型之后对数据进行规范化(Normalization)。
本文中所说的规范化不是以数据库原理课程中复杂的关系代数的方式进行描述,虽然关系型数据库及其关系模型的理论基础是数学,但是本文中所说是实际应用时,更易于理解的例子来说明规范化。
规范化的目的
规范化的最重要的目的是为了消除数据的重复,从而解决由于数据的重复而导致的更改异常现象。
下面通过一个实际生活中常见的例子来说明更改异常现象。
现实生活中的,订单明细简如下图:
![](https://img-blog.csdn.net/20140303195009265?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGJzaW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
将订单明细用逻辑模型来表达之后,如下图:
![](https://img-blog.csdn.net/20140303195039109?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGJzaW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
这是一个典型的为经过规范化的表格。接下来就以这个表格为例子来说明三种更改异常。
更改异常(ModificationAnomaly)分为如下三种:
(1)插入异常(Inertion Anomaly)
在上面的表格中,订单号码和供货公司同时存在于该表中,”订货时必须明确供货公司”这条业务规则我们很容易就能看看出来,这也是没有问题的,但是如果在系统中添加供货公司的信息时,却一定要订货才行,因此,“添加供货公司时必须要先下订单”这样的业务规则是不正确的,如果修改这样的异常,满足“订货前需要先添加供货公司”和”允许单独管理供货公司相关信息“这样的业务规则,就需要将供货公司这个实体单独提取出来。
(2)更改异常(Update Anomaly)
同样是在该表中,如果需要修改供货公司的信息,例如修改供货公司的名称时,需要对该订单中的所有行进行修改,如果只是修改其中一行的话,就会产生异常,这就是数据的冗余可能会导致数据不一致。
(3)删除异常(Delete Anomaly)
想删除某供货公司的信息的话,则需要将该供货公司的所有订单信息同时删除。
数据建模的过程是将现实中的业务不断地进行抽象化(Abstraction),实现从现实世界(RealWorld)中的业务为概念世界(Conception World)中的模型,再到计算机世界(ComputerWorld)中的表的转换过程。
将现实世界中的业务根据抽象化的方法,转化为概念世界的数
4000
据模型,最终转换为能在数据库中的表,来保存该现实业务规则和表达现实业务特征的数据。在这个过程当中,为了保证将现实业务正确地、完整地、无冗余地保存到数据库中,需要在将现实世界抽象为概念世界模型之后对数据进行规范化(Normalization)。
本文中所说的规范化不是以数据库原理课程中复杂的关系代数的方式进行描述,虽然关系型数据库及其关系模型的理论基础是数学,但是本文中所说是实际应用时,更易于理解的例子来说明规范化。
规范化的目的
规范化的最重要的目的是为了消除数据的重复,从而解决由于数据的重复而导致的更改异常现象。
下面通过一个实际生活中常见的例子来说明更改异常现象。
现实生活中的,订单明细简如下图:
将订单明细用逻辑模型来表达之后,如下图:
这是一个典型的为经过规范化的表格。接下来就以这个表格为例子来说明三种更改异常。
更改异常(ModificationAnomaly)分为如下三种:
(1)插入异常(Inertion Anomaly)
在上面的表格中,订单号码和供货公司同时存在于该表中,”订货时必须明确供货公司”这条业务规则我们很容易就能看看出来,这也是没有问题的,但是如果在系统中添加供货公司的信息时,却一定要订货才行,因此,“添加供货公司时必须要先下订单”这样的业务规则是不正确的,如果修改这样的异常,满足“订货前需要先添加供货公司”和”允许单独管理供货公司相关信息“这样的业务规则,就需要将供货公司这个实体单独提取出来。
(2)更改异常(Update Anomaly)
同样是在该表中,如果需要修改供货公司的信息,例如修改供货公司的名称时,需要对该订单中的所有行进行修改,如果只是修改其中一行的话,就会产生异常,这就是数据的冗余可能会导致数据不一致。
(3)删除异常(Delete Anomaly)
想删除某供货公司的信息的话,则需要将该供货公司的所有订单信息同时删除。
相关文章推荐
- 程序员应该知道的数据库设计的两个误区
- mysql 数据库设计
- MySQL 数据库设计复习笔记及项目实战
- 浅谈数据库设计技巧(上)
- 浅谈数据库设计技巧(下)
- 大数据革命-eXtremeDB列数据库
- linux下dbdesigner4的安装
- 数据库三大范式详解
- 数据库的设计及hibernate实体映射 【转】
- Java抓取网页数据
- 数据库设计中的14个技巧
- 数据库主键设计之思考
- Sql Server 2008修改表结构后无法保存的问题
- 《MS SQL Server 2000管理员手册》系列——9. 建立数据库
- MyEclipse中hibernate反向工程实例(一对多关联)
- 大型电子商务系统设计
- 数据库 范式
- 数据库设计三范式
- 数据建模基础理论 - 数据完整性
- 数据库设计的黄金经验