研究生(研究生号,导师号)
课程(课程号,课程名)
学生课程(学号,课程号)

?
两种方法的比较:
1)第一种方法实体较少,但是教师实体的职称、学生实体的学历和导师号存在较多的空值可能,在空值较少的情况下是个较好的选择。
2)第二种方法虽然实体较多,没有上述的空值问题。对于此类子类问题,要注意相应的处理方法,即子类中只留有必须的主键信息,全部信息都可以直接从父类中获取,这样查询更为简单易行。
?
6 子类问题
在电影公司数据库中表达电影的实体信息中,表达卡通片的主角配音演员信息
这是个子类问题,因为卡通片电影是电影的一种子类。
处理方式一:将子类视为父类的内容来处理

?
上述做法对应的关系模型为:
Movies(mid,title,isCartoon,sdid,did)
Studios(sdid,name)
Dubbers(did,name)
说明:
1)可以表达查询要求
2)对于非卡通片,did多为空
3)不适用于子类较多的情况,如引入爱情片(affectional film)的结局(finale)查询要求
?
对应的关系模型为:
Movies(mid,title,isCartoon,sdid,did, isAffectional, finale)
Studios(sdid,name)
Dubbers(did,name)
可以看出大部分电影的did和did信息皆为空
处理方式二:将子类单独表达
?
相应的关系模型为:
Movies(mid,title,sdid)
Studios(sdid,name)
Dubbers(did,name)
AffectionalFilms(mid,title,sdid,finale)
Cartoons(mid,title,sdid,did)
说明:
1)没有较多的空值问题
2)爱情片、卡通片和一般电影分开存储不便于那些不区分电影类型的常见检索(需要更多的表合并操作)
处理方式三:将子类单独表达,但是父类拥有全部记录信息,子类只有主键信息和自己的特殊信息。这种方式一般是最为有效的。
改进的关系模型为:
Movies(mid,title,sdid)
Studios(sdid,name)
Dubbers(did,name)
AffectionalFilms(mid,finale)
Cartoons(mid,did)
?
?
总结:
ER模型的设计一般步骤:
①客户调研,了解需求,收集数据
②根据用户需求来把数据细分到不可再分的基本数据项
③可以先将全部信息(或者称属性、字段)放入一个关系,虽然功能可行,但是冗余太大,易带来不一致的危险。使用“拆”的方法,将关系按照语义联系(实体-关系)细分。根据从客户那得到的原始信息识别出实体,依次将属性放入实体中(原则是只有该属性对于该实体来说是唯一确定的才能将这个属性归到这个实体里,否则看看能不能放到其他实体里)。注意有的属性是联系的属性,这时就要建立实体间的联系,并给联系加个属性。
从E-R模型到关系模型的变换规则:
①每个实体建一张表,实体的属性变为表的一个字段,要设个主属性。
②所有的多对多的联系也要转变为一张表,如果是多对一的联系就不要新建表了,在联系值为多的实体后面添加联系值为1的实体的主键,如果是一对一的联系那就随便在哪个实体后面加上另外一个实体的主键。