在前面的步骤中,我们创建了数据库的ER模型,ER模型属于概念级别的模型,需要映射为表才能被计算机存储。本章节的目标就是从ER模型中创建表,并检查这些表的结构。这组表应该代表逻辑数据库模型中的实体,关系,属性和约束。然后检查每个表的结构,确保建表过程中没有产生错误。如果表中有错误,则表明在建表的过程中或在ER模型中仍有发现的错误。将ER模型映射为表的过程如下所述的步骤:
1.  创建表。创建表的目标是从从ER模型映射表集合,在这步中,为ER模型创建表来表达实体,关系,属性和约束,每个标的结构来源于ER所描述的信息,这些信息包括ER图,数据字典和任何其他相关的文档。我们使用关系数据库定义语言DBDL来描述每个表的组成,首先确定表的名字,在后面跟着该表的简单属性的名字,并将这些属性的名字括在括号中,然后标示该表的主键以及任何备用键和外键,对于每个外键,还要给出包含被引用主键的表。在创建的过程中,需要注意以下的事项:
a)   如何表达实体,对于模型中的每个实体,创建一个包含实体的所有简单属性的表。例如对于复合属性Address,应该包含它的简单属性Street,state,zipcode,如果有可能,标示每个表中的主键的列。
     如何表达关系,一个实体与另一个实体间的关系由主键/外键机制表达,为了决定将外键属性放在哪里,首先必须标示关系中包含父实体和子实体。不同类型的关系和多值属性主要有:
                       i.  一对多的二元关系,对每个一对多的二元关系,关系一端的实体被设计为父实体,多端的实体被设计为字实体。为了描述这种关系,父实体主键的拷贝被放在字实体的表中。在一对多关系中有一个或者多个属性的情况下,这些属性也随着主键加到子表中。
                     ii.一对多递归关系,一对多递归关系和一对多的二元关系很相似,只不过父实体和子实体都是同一个表。
                    iii.  一对一二元关系。一对一的二元关系的表稍微有些复杂。因为不能使用元组的数目来表示一个关系中的父实体和子实体。而是需要使用参与过程来决定把实体结合为一个表来表示关系。考虑如下的参与约束。
1.  1:1关系的两边都是强制参与,在这种情况下,应该将两个实体合为一个表。并选择初始实体中的一个主键作为新表的主键。其他的键作为备用键。
2.1:1关系的一边是强制参与,在这种情况下可以使用参与约束来标示1:1关系的父实体和子实体,关系中强制参与的实体被设计为子实体,可选参与的实体被设计为父实体。
3.  1:1关系的两边均为可选参与。这种情况下父实体和子实体之间的设计是任意的。除非你可以得到关于关系的更多信息来帮助你判断使用那个设计。
b)一对一递归关系。对于一对一递归关系,应该遵循上面所描述的对1:1关系的参与规则。但是在这种情况下,父实体和子实体是相同的,对于两边有强制参与的1:1递归关系,应该用主键的两个拷贝,来把这个递归关系,描述为一个表,同前面一样,主键的一个拷贝代表外键,并且应该将他重命名来表示他代表的关系。
c) 多对多的二元关系,对于每个多对多的二元关系,创建一个表达关系的表,这个表包含关系的任何属性,我们将参与关系的实体的主键属性拷贝到新表中,使之为外键,一个外键或全部外键将组成新表的主键,可能结合此关系的一些属性。
d)复杂关系类型,有多于两个参与实体的关系是复杂关系,为每个复杂关系创建一个表达关系的表,将参与复杂关系的这些实体的主键复制到新表中,并作为外键,此表还包含与关系相关的全部属性,一个或多个外键将组成新表的主键,还可以加上关系中的一些其他属性。
e) 多值属性,对于每个与实体有关的多值属性,应该遵守上述1:*关系中所描述的规则,在一端的实体被指定为父实体,在多端的多值属性被指定为子实体,创建一个新的表包含这些多值属性,并将父实体的主键拷贝过来作为外键,除非多值属性自己本身是父实体的备用键,否则,新表的主键由多值属性和父实体的原始主键组成。
2.  用规范化的方法检查表的结构。这个步骤地目标是检查和使用规范化标准,使每个表的结构正确。用规范化的方法检查表可以避免不必要的数据重复。应该确保前面所建立的表至少是第三范式的,如果所标示的表不是第三范式的,可能表明ER模型的某部分是错误的。或者由模型创建表的时候产生了错误。
3.  检查表是否支持用户事务。这个步骤的目标是取保所产生的表支持用户所需要的事务。检查表是否支持事务的一种方法是检查是否支持事务的数据需求。以确保数据在一个或多个表中存在。同时,如果事务所需要的数据在多个表中,则应该检查这些表是否能够通过主键外键连接起来。
4.  检查业务规则。目标是检查逻辑数据库设计中表达的业务规则。业务规则适用于防止数据不完整,不准确或者不一致的约束,尽管DBMS在完整性方面的控制可能存在也可能不存在,但这不是问题所在,在这个阶段,你只关心高级设计,即确定需要什么样的数据完整性约束,而不管怎么样去实现,标示完整性约束之后,就可以得到一个完整而准确的描述视图的局部逻辑数据模型。如果必要的话,可以从逻辑数据模型产生物理数据库设计,在为用户构建系统的原形时,需要考虑如下的一个常见的完整性约束:
                       i.需要的数据,即某些列的数据是必须要填写的。
                     ii.列的值域约束,每个列都有一个值域,
                    iii.实体完整性,实体的主键不能为空。
                   iv. 多样性,多样性表达了数据库中数据间的关系的约束。比如班级必须有学生,而且必须有班主任,
                     v.参照完整性。外键包含的与父表象匹配的主键值。关于主键需要注意以下两点:1。主键允许为空吗?2.如何保证参照的完整性,当向字表中插入数据,删除数据,更新子表记录外键,向父表中插入数据,从父表删除数据时,应该进行哪些约束,如No Action,Cascade,set Null,set Defaule,No Check
5.  与用户讨论逻辑数据库设计。目标是为了确保局部逻辑数据模型与描述模型的文档确实表达了用户视图。此视图的逻辑数据库设计应该已经设计完全,并且全部存档,但在完成这个步骤之前,应该与用户一起研究这个设计。

转载于:https://blog.51cto.com/tianli/58491

数据库设计系列9--将ER模型映射为表相关推荐

  1. 数据库设计三大范式和ER模型

    1. 数据库设计之三范式的介绍 范式: 对设计数据库提出的一些规范,目前有迹可寻的共有8种范式,一般遵守3范式即可. 第一范式(1NF): 强调的是列的原子性,即列不能够再分成其他几列.(1NF强调字 ...

  2. 数据库设计系列[04]组织结构加入权限系统

    1引言 接着上一篇随笔"数据库设计系列[03]权限系统":在上篇随笔中,只是简单地介绍基于角色和操作访问控制模型,能把权限控制到页面和按钮.CDM图: 2 新的需求:组织结构 比如 ...

  3. oracle在线sql数据库设计,一款在线ER模型设计工具,支持MySQL、SQLServer、Oracle、Postgresql...

    在线QQ客服:1922638 专业的SQL Server.MySQL数据库同步软件 介绍一个在线ER模型生成工具,该工具可以在线为多个数据库的DDL文件生成ER模型图,并支持MySQL,SQLServ ...

  4. 某电商网站的数据库设计(2)——商品销售相关数据表的设计

    某电商网站的数据库设计(2)--商品销售相关数据表的设计 目录 某电商网站的数据库设计(2)--商品销售相关数据表的设计 四.销售信息表 1.非套装商品销售数据表 2.套装商品对应的单品销售数据表 3 ...

  5. 数据库设计之概念结构设计---------E-R图详解

    0.试述采用E-R方法进行数据库概念设计的过程. 答:采用E-R方法进行数据库概念设计,可以分成3步进行:首先设计局部E-R模式,然后把各局部E-R模式综合成一个全局的E-R模式,最后对全局E-R模式 ...

  6. 数据库设计之概念结构设计---------E-R图详解(流程和关系)

    0.试述采用E-R方法进行数据库概念设计的过程. 答:采用E-R方法进行数据库概念设计,可以分成3步进行:首先设计局部E-R模式,然后把各局部E-R模式综合成一个全局的E-R模式,最后对全局E-R模式 ...

  7. 数据库设计之概念结构设计---------E-R图详解 (各种各样的实例)

    http://blog.csdn.net/zxq1138634642/article/details/9121363 0.试述采用E-R方法进行数据库概念设计的过程. 答:采用E-R方法进行数据库概念 ...

  8. 【数据库系统概论】-数据库设计

    数据库设计概念 在数据库领域内,通常把使用数据库的各类信息系统都统称为数据库应用系统. 数据库设计,广义的讲,是数据库及其应用系统的设计,即设计整个数据库应用系统.狭义的讲,是设计数据库本身,即设计数 ...

  9. 数据库设计流程与E-R图

    E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型.属性和联系的方法,用来描述现实世界的概念模型. 业务数据库设计流程 在说ER图前,先来提一下关于 ...

最新文章

  1. leetcode--买股票的最佳时机II--python
  2. AngularJS之Service(四)
  3. AD管理之三,企业根CA的安装
  4. xss跨站脚本,纯安全测试干货分享-建议收藏
  5. 串行通信的波特率高速和低速区别
  6. Kotlin实战指南二十:flow
  7. 01_sklearn,安装sklearn,软件环境要求,第三方发行版
  8. .Net开发人员应该下载的十种必备工具(二)
  9. 如何让nodejs在linux后台运行
  10. vue2.0 element学习
  11. parquet格式_数据工程101:揭开Hadoop数据格式的神秘面纱:Avro,ORC和Parquet
  12. Pycharm同步代码到Github 踩坑
  13. CSS3之firefoxsafari背景渐变之争 - [前端技术][转]
  14. Python3.7.0安装报:0x80072efd
  15. 小米手机ROOT操作
  16. 什么是模拟信号?什么是数字信号
  17. 3d旋转--transform-style: preserve-3d,translate3d(x,y,z),perspective()
  18. 征途单机版mysql_win7架设征途单机 MYSQL卡到这一步
  19. pytest中参数化方法,并且根据执行的命令进行动态参数化
  20. 2021阿里蚂蚁花呗前端校招面试

热门文章

  1. python中的静态方法如何调用_关于Python中如何使用静态、类、抽象方法的权威指南(译)...
  2. flutter能开发游戏吗_游戏开发者都擅长“打自己的游戏”吗?
  3. 【企业管理】《人与绩效》读书笔记--怎样做员工
  4. Leaflet中使用leaflet-echarts插件实现Echarts的Migration迁徙图
  5. CentOS中配置Mysql表名忽略大小写以及提示:Caused by: org.quartz.impl.jdbcjobstore.LockException: Failure obtaining d
  6. Winform中实现设置ZedGraph的GraphPane的大小匹配ZedGraphControl
  7. Winform中设置ZedGraph曲线图的字体样式是避免出现边框
  8. Windows下配置Tomcat使用https协议
  9. 【LeetCode】414.第三大的数
  10. 关于flutter列表的性能优化,你必须要了解的