模型的转换 E-R图如何转换为关系模型呢?我们先看一个例子。
图21是学生和班级的E-R图,学生与班级构成多对一的联系。根据实际应用,我们可以做出这个简单例子的关系模式:
学生(学号,姓名,班级)
班级(编号,名称)
“学生班级”为外键,参照“班级编号”取值。
这个例子我们是凭经验转换的,那么里面有什么规律呢?在22节,我们将这些经验总结成一些规则,以供转换使用。 (1)一个实体型转换为一个关系模式
一般E-R图中的一个实体转换为一个关系模式,实体的属性就是关系的属性,实体的码就是关系的码。
(2)一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。
图22是一个一对一联系的例子。根据规则(2),有三种转换方式。
(i) 联系单独作为一个关系模式
此时联系本身的属性,以及与该联系相连的实体的码均作为关系的属性,可以选择与该联系相连的任一实体的码属性作为该关系的码。结果如下:
职工(工号,姓名)
产品(产品号,产品名)
负责(工号,产品号)
其中“负责”这个关系的码可以是工号,也可以是产品号。
(ii) 与职工端合并
职工(工号,姓名,产品号)
产品(产品号,产品名)
其中“职工产品号”为外码。
(iii) 与产品端合并
职工(工号,姓名)
产品(产品号,产品名,负责人工号)
其中“产品负责人工号”为外码。
(3)一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并。
(i) 若单独作为一个关系模式
此时该单独的关系模式的属性包括其自身的属性,以及与该联系相连的实体的码。该关系的码为n端实体的主属性。
顾客(顾客号,姓名)
订单(订单号,……)
订货(顾客号,订单号)
(ii) 与n端合并
顾客(顾客号,姓名)
订单(订单号,……,顾客号)
(4)一个m:n联系可以转换为一个独立的关系模式。
该关系的属性包括联系自身的属性,以及与联系相连的实体的属性。各实体的码组成关系码或关系码的一部分。
教师(教师号,姓名)
学生(学号,姓名)
教授(教师号,学号)
(5)一个多元联系可以转换为一个独立的关系模式。
与该多元联系相连的各实体的码,以及联系本身的属性均转换为关系的属性,各实体的码组成关系的码或关系码的一部分。
(6)具有相同码的关系模式可以合并。
(7)有些1:n的联系,将属性合并到n端后,该属性也作为主码的一部分
这类问题多出现在聚集类的联系中,且部分实体的码只能在某一个整体中作为码,而在全部整体中不能作为码的情况下才出现(其它情况本人还没碰到,呵呵,欢迎指教)。
比如上篇文章介绍的管理信息系统中订单与订单细节的联系。
关于什么是聚集,23节介绍。 这部分本应在概念设计中介绍的,用到了才想起来,这里补充一下。
关于现实世界的抽象,一般分为三类:
(1) 分类:即对象值与型之间的联系,可以用“is member of”判定。如张英、王平都是学生,他们与“学生”之间构成分类关系。
(2) 聚集:定义某一类型的组成成分,是“is part of”的联系。如学生与学号、姓名等属性的联系。
(3) 概括:定义类型间的一种子集联系,是“is subset of”的联系。如研究生和本科生都是学生,而且都是集合,因此它们之间是概括的联系。
例:猫和动物之间是概括的联系,《Tom and Jerry》中那只名叫Tom的猫与猫之间是分类的联系,Tom的毛色和Tom之间是聚集的联系。
订单细节和订单之间,订单细节肯定不是一个订单,因此不是概括或分类。订单细节是订单的一部分,因此是聚集。 有了关系模型,可以进一步优化,方法为:
(1) 确定数据依赖。
(2) 对数据依赖进行极小化处理,消除冗余联系(参看范式理论)。
(3) 确定范式级别,根据应用环境,对某些模式进行合并或分解。
以上工作理论性比较强,主要目的是设计一个数据冗余尽量少的关系模式。下面这步则是考虑效率问题了:
(4) 对关系模式进行必要的分解。
如果一个关系模式的属性特别多,就应该考虑是否可以对这个关系进行垂直分解。如果有些属性是经常访问的,而有些属性是很少访问的,则应该把它们分解为两个关系模式。
如果一个关系的数据量特别大,就应该考 虑是否可以进行水平分解。如一个论坛中,如果设计时把会员发的主贴和跟贴设计为一个关系,则在帖子量非常大的情况下,这一步就应该考虑把它们分开了。因为 显示的主贴是经常查询的,而跟贴则是在打开某个主贴的情况下才查询。又如手机号管理软件,可以考虑按省份或其它方式进行水平分解。 这部分主要是考虑使用方便性和效率问题,主要借助视图手段实现,包括:
(1) 建立视图,使用更符合用户习惯的别名。
(2)对不同级别的用户定义不同的视图,以保证系统的安全性。
(3)对复杂的查询 *** 作,可以定义视图,简化用户对系统的使用。
物理设计主要工作是选择存取方法(索引),以及确定数据库的存储结构,这里就不说明了。
可以在“属性”窗口中显示数据库关系图的属性。
在“属性”窗口中显示数据库关系图属性
1
打开数据库关系图设计器。
2
通过在该设计器中单击对象以外的任意位置,确保没有在数据库关系图设计器中选择任何对象。
3
在“视图”菜单中,单击“属性窗口”。
该关系图的属性随即显示在“属性”窗口中。
打开数据库关系图
只有关系图的所有者或者数据库的 db_owner 角色的成员才能打开关系图。
1
在对象资源管理器中,展开“数据库关系图”文件夹。
2
双击要打开的数据库关系图的名称。
- 或 -
右键单击要打开的数据库关系图的名称,然后选择“设计数据库关系图”。
此时,将在数据库关系图设计器中打开该数据库关系图,您可以在其中编辑关系图。
参阅:>
创建数据库关系图
(1) 确保SSMS正在运行,且ApressFinancial数据库被展开,以便看到其中的"数据库关系图"和"表"节点。选择"数据库关系图"节点并右击,选择"安装关系图支持程序"(参看图6-10)。
(2) 如果这是在该数据库上创建的第一个关系图,则需要安装支持对象。如果没有这些对象,就无法创建关系图,所以在随后显示的对话框(参看图6-11)上点击"是"。
(3) 在创建关系图时,所看到的第一个界面是"添加表"对话框(参看图6-12)。如果希望在关系图中包含所有表的话,选择其中列出的所有表,再点击"添加",这会"清空"该界面。点击"关闭"。
(4) 在经过一段时间后,会返回到SSMS中,而数据库关系图则已经被构建。在这一时刻,关系图会非常大,以至于不能在一个界面上同时显示出所有的表,可以通过关系图工具条上的"大小"组合框来更改显示的比例,如图6-13所示。
创建新的数据库关系图
安装关系图支持
选择表
"大小"组合框
(5) 这时的关系图与图6-14所示类似(如果布局有不同,不要惊讶)。
迄今为止创建的表和关系
这就是创建一个基本关系图所需要的步骤。
以上就是关于数据库的逻辑结构设计的图向关系全部的内容,包括:数据库的逻辑结构设计的图向关系、sql server2008中无法使用数据库关系图、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)