北大青鸟光谷校区

北大青鸟光谷校区

  • 北大青鸟徐东校区
  • 北大青鸟光谷校区
  • 北大青鸟高新校区
  • 荆州青鸟之家
  • 襄阳青鸟之家

17740513250

百日千才

从面向对象的角度规范数据库表的设计

发布日期:2023-03-31来源:武汉北大青鸟武汉校区作者:admin

  在关系型数据库中,重要的概念就是实体与关系。设计一个商业数据库的过程,主要就是确定商业实体,研究实体关系,并在此基础上创建数据表的过程。至于建立在数据表之上的视图、索引、存储过程和触发器等优化和操作工作,则相对比较容易。

  因此,数据库设计的重点,就在于商业实体的界定和实体关系的分解。而难点则在于从关系到实际建表的 转化。许多初学者,对这个转化往往感觉似是而非、难以把握!

  本文根据作者多年的设计经验,从面向对象的角度,探讨了数据库的实体及其关系问题,并给出了数据表的设计原则和规范。供各位初级程序员和学生参考,期望对您的学习和工作有所启发。如有不认同之处,还望坦诚交流或批评指正。

  一、实体与对象

  数据库中的实体,其实就是我们程序设计中所说的对象。抽象地讲,实体就是一个独立存在,具备一定的行为能力和个体特征的事物(包括人和物)。比如:人、动物、微生物;汽车、火车、电动车;桌子、房子和票子(货币);电视、电脑、机器人等等,都是自然界的实体,也可以成为我们数据库中的实体。请记住:实体就是对象。只是数据库设计中,习惯称作实体。

  二、实体具有属性和行为

  凡是实体,都具有自己的属性特征。比如:人有姓名、性别、肤色、生日、学历、爱好等等,桌子有结构、形状、大小、颜色、承重能力等等。属性是我们辨认和描述实体的主要依据。不同的实体,属性不一样。

  实体,还有自己的行为能力。比如:人会吃饭、睡觉、工作、交友、旅游、恋爱等,属于主动行为能力;房子能住人、货币能流通,属于被动行为能力。

  如何区分属性和行为呢?

  属性描述实体的名称和状态,包括结构、时间、空间、声音和光电状态等,是相对静态的;而行为描述实体的动作能力,一般表现为一个动态的过程。比如,张三的生日是 1990 年 7 月 20 日,描述了张三这个实体出生时的时间状态,是属性。而孕妇李四的分娩是行为,描述的是李四生产婴儿的动作过程。李四的分娩行为是一个可以重复的过程,每次正常怀孕的后都会分娩;而张三的生日属性值只能有一个,是只读属性,且不能更改。张三的身高也是属性,描述了他的空间高度状态,但在张三成长的行为过程中,身高属性是随成长 行为变化的,身高属于可读可写属性。

  三、实体关系的本质

  实体之间为什么会发生关系呢?其实这是因为实体的行为造成的。如果没有行为,实体之间可以永远不发生关系。正是因为人类有了旅行的行为能力和住宿的要求,才会发生旅客与宾馆客房的住宿关系。所以,实体关系的本质就是实体的行为能力。在发生关系的两个实体之间,一定有一个具备主动行为能力,而另一个具有被动行为能力。我们可以锁定一类实体,通过研究它的属性集,跟踪它们与当前项目相关的行为过程,逐步理清商业项目的逻辑流程和数据流程,完成数据库表的设计。而从关系出发,研究实体之间错综复杂的关系,往往让初学者理不清头绪,无从下手,容易弄糊涂。

  因此,本文主张,在数据库设计的实践中,应该从面向对象的角度,来研究实体与当前项目需求相关的属性和行为,从而揭示出实体之间的抽象关系。这样有利于把抽象的实体关系,具体化为实体的属性和行为研究,更接近于人的感性认知习惯,不会有难以把握、琢磨不定的感觉。

  四、创建数据库表的基本步骤和原则

  既然与实体相关的信息,可以分为属性和行为两类,那么用于记载实体信息的数据库表,也就自然地要分成属性和行为两类了,即属性信息表和行为记录表。又由于有些属性的取值范围是确定的,比如:学历包括文盲、小学、初中、高中、、、硕士、博士和博士后等,当某个在线用户注册时,我们希望他能选取这些确定值当中的一个,来描述他自己的高学历,既规范了输入,又便于以后查询。因此,我们可以把这些学历值单独地保存在一张数据表里面,构成一个字典表。在用户注册时主动提供给用户选用。于是,数据库表就分成了基本属性表、字典表和行为记录表三大类。

  创建数据库表的基本步骤和原则是:

  1、 根据需求调查与分析,确定当前项目涉及到的所有实体类(即同一类实体的抽象描述)。比如:客户类,即是所有可能的宾馆客人的抽象描述。客房类,即是宾馆部可住房 间的抽象描述。

  2、 根据需求分析,确定每个类的详细属性和行为集合。

  3、 按照实体、属性、行为的逻辑,绘制 E-R 图(注意:行为的结果表现为关系),用于开发团队内部以及与用户之间的交流与确认。

  4、 按照如下原则创建数据表模型:

  1 )一张表只描述一个实体类的属性信息;

  2 )一张表只记录一个实体类的一种行为过程;

  3 )一张表只记录一个属性的字典值。

  换一个角度说,就是有多少类实体,就要建多少个属性信息表,有多少种行为(或者叫事件)就建多少个行为记录表,再加上为属性提供可选值的字典表,就是我们要设计的部数据表了。

  5、 按照规范化的要求,使用三个范式标准检查每张表的属性字段是否符合原子性要求,以及属性字段是否与主键字段直接相关,并排除数据表中不必要的冗余字段。

  6、 确定表之间的主外键关系 ,包含字典表的主外键关系 。

  五、实例:宾馆住宿管理系统数据表

  (一)实体属性表

  员工属性表

序号 字段名称 数据类型 备注
1 员工 ID Nvarchar (50) 主键:代表客人的编号
2 员工姓名 Nvarchar (50)  
3 性别 Nvarchar (20)  
4 身份证件类型 Nvarchar (50) 外键:依赖于《证件类型字典表》
5 身份证件编号 Nvarchar (50)  
6 员工生日 datetime  
7 联系电话 Nvarchar (50)  
8 家庭住址 Nvarchar (200)  
  客人属性表

序号 字段名称 数据类型 备注
1 客人 ID Nvarchar (50) 主键:代表客人的编号
2 客人姓名 Nvarchar (50)  
3 性别 Nvarchar (20)  
4 身份证件类型 Nvarchar (50) 外键:依赖于《证件类型字典表》
5 身份证件编号 Nvarchar (50)  
6 客人生日 datetime  
7 联系电话 Nvarchar (50)  
8 家庭住址 Nvarchar (200)  
  客房属性表

序号 字段名称 数据类型 备注
1 客房 ID Nvarchar (50) 主键:代表客房的编号
2 客房名称 Nvarchar (50)  
3 客房类型 Nvarchar (50) 外键:依赖于《客房类型字典表》
4 所在楼层 Nvarchar (20)  
5 当前状态 Nvarchar (20) 外键:依赖于《客房状态字典表》
6 备注 Nvarchar (500)  
(二)字典表

  证件类型字典表  

序号 字段名称 数据类型 备注
1 证件类型 ID Nvarchar (50) 主键:代表证件类型的编号
2 证件类型名 Nvarchar (50) 如:身份证、学生证、军官证
3 发证单位 Nvarchar (20)  
4 备注 Nvarchar (250)  
  客房类型字典表

序号 字段名称 数据类型 备注
1 客房类型 ID Nvarchar (50) 主键:代表证件类型的编号
2 客房类型名 Nvarchar (50) 如:标准间、豪华间、总统套房
3 床位数 int  
4 房价 money 单位:元 / 天
5 备注 Nvarchar (250)  

  客房状态字典表

序号 字段名称 数据类型 备注
1 客房状态 ID Nvarchar (50) 主键:代表证件类型的编号
2 客房状态名 Nvarchar (50) 如:维修、空闲、住人
3 备注 Nvarchar (250)  
(三) 行为记录表

   住宿登记表

序号 字段名称 数据类型 备注
1 登记 ID Nvarchar (50) 主键:代表住宿登记的编号
2 客人 ID Nvarchar (50) 外键:依赖《客人属性表》
3 入住房间编号 Nvarchar (50) 外键:依赖《客房属性表》
4 入住日期 datetime  
5 登记服务员 ID Nvarchar (50) 外键:依赖《员工属性表》
  住宿结算表

序号 字段名称 数据类型 备注
1 登记 ID Nvarchar (50) 主键:代表住宿结算的编号
2 退房日期 datetime  
3 结算日期 datetime  
4 结算服务员 ID Nvarchar (50) 外键:依赖《员工属性表》

  六、小结

  本文的核心是在经典的关系数据库的设计思想中,引入了对象行为的概念,用行为来揭示关系的本质,用行为记录表来记载行为过程的详细信息,让描述行为特征的信息字段从属性集合中独立出来,即理清了实体关系的逻辑,又纯洁了实体的属性集合。再加上字典表概念的引入,使关系数据表的设计不再扑朔迷离,无从下手,而是脉络清晰,逻辑严密,便于理解。本文没有给出改进后的实体关系图—— E-R 图的画法,欢迎有兴趣的同行参与讨论并给出方案建议。

关闭

只为了方便您就学 北大青鸟光谷校区 北大青鸟武汉校区

武汉市洪山区珞喻路724号(地铁二号线光谷广场站F口出

Copyright (c) 2006-2023 武汉宏鹏教育咨询有限公司 版权所有 All Rights Reserved.