我们目前所接触的数据库基本上是关系数据库,关系数据库中的关系模式是型,而关系是值。关系模式是对关系的描述。
什么是关系?关系实质上是一张二维表,其中每一行是一个元组,每一列是一个属性,每个元组是该关系涉及到属性集合笛卡尔积的一个元素。(笛卡尔积是这样的一个集合。集合中的元素是有序对,若A={0,1}B={a,b}则:A*B={<0,a>,<0,b>,<1,a>,<1,b>}),关系是元组的集合,所以关系模式要描述元组的集合,其中包括那些属性,属性来自域,属性与域之间的映射关系。
关系模式可以用五元组形式表示:R(U,D,Dom,F),其中R:表示关系名,U:表示属性集合,Dom,表示属性域(来自那个域),F:表示函数依赖。
但是一般情况下,我们通常把关系模式表示为:R(U)或者R(A,B)(其中A、B代表U中的属性)
那么E-R图转化成关系模式的步骤。
前提:是已经把需求中的实体,以及实体中联系确定。
第一:把每个实体都转化成关系模式R(A、B)形式。(A、B代表属性)
第二:实体中的属性即关系模式中的属性要求是满足第一范式(原子性,不可再分)
第三:也是最重要的步骤,实体之间联系的转换。
实体之间的联系分为:1:1 ,1:n,m:n 三种形式。
(1)1:1之间的转换。
将两个实体转化成关系模式之后,然后把任意实体的主键和联系的属性放到另一个实体的关系模式中。如图:
结果如下:
R1(教师编号、姓名、性别)
R2(班级号、专业号、学院号、教师编号、任职日期)
或者:
R1(教师编号、姓名、性别、班级号、任职日期)
R2(班级号、专业号、学院号)
(2)1:n的转换。
将两个实体各自转化成关系模式后,然后,把联系数量为1的实体的主键和联系的属性放到联系数量为n的实体关系模式中。
比如:学生和宿舍之间的关系。
转换之后的结果如下:
R1(学号、姓名、性别、宿舍号)
R2(宿舍号、床位数)
(3)n:n的转换。
将两个实体各自转换成关系模式后,然后,把两个实体中的主键和联系的属性放到另一个关系模式中.(注意多生成一个关系模式)
转换后的结果如下:
R1(学号、姓名、性别)
R2(奖励编号、奖励名称、奖励金额)
R3(学号、奖励编号、奖励日期)
注:E-R图中联系没有联系属性,EE-R图中含有联系属性。
含有下划线的属性代表是主属性,在表中当做主键。红字体代表的外键。