第二章数据库建模DatabaseModeling数据库的设计步骤•需求收集和分析•设计概念结构•设计逻辑结构•设计物理结构•物理实现数据库的设计步骤•需求收集和分析–用户关心什么–用户要什么结果•设计概念结构•设计逻辑结构•设计物理结构•物理实现数据库的设计步骤•需求收集和分析•设计概念结构–存什么–关系(联系)如何–ODL或E/R图,是各种数据模型的共同基础•设计逻辑结构•设计物理结构•物理实现数据库的设计步骤•需求收集和分析•设计概念结构•设计逻辑结构–用什么数据模型–数据库的模式(databaseschema)–用户子模式•设计物理结构•物理实现数据库的设计步骤•需求收集和分析•设计概念结构•设计逻辑结构•设计物理结构–数据怎么存–根据DBMS产品、环境特点•物理实现数据库的设计步骤•需求收集和分析•设计概念结构•设计逻辑结构•设计物理结构•物理实现–运行DDL–装入测试数据–应用程序数据库的设计步骤想法需求ODLE/R关系RDBMSOODBMS§2.1ODL•对象定义语言–ObjectDefinitionLanguage–以面向对象的观点、方法,说明数据库的概念结构–可方便地直接转换成OODBMS的说明–经过努力,可以转换成RDBMS的说明面向对象的设计•对象标识—OID–对象与对象的区别•类–具有相同特性的对象归为一类–对象的归并必须有意义–属于同一类的对象其特性必须相同面向对象的设计•对象的三个特性–属性:特性–联系:引用–方法:函数•接口说明interface名字{特性表}•属性–对象某方面的特征,属性就是数据–只由基本数据类型构成–属性的类型,不能是类、也不能从类中构造InterfaceMovie{//MovieClass的ODL说明attributestringtitle;attributeintegeryear;attributeintegerlength;attributeenumFilm{color,blackAndWhite}filmType;};InterfaceStar{attributestringname;attributeStructAddr{stringstreet,stringcity}address;};记录结构类型•联系–对象的引用–对象的关联–对象集合的引用(1:N)RelationshipSetStarstars;–单一对象集合的引用(1:1)RelationshipStarstarOf;•反向联系–ODL要求显式表示存在的反向联系InterfaceMovie{//MovieClass的ODL说明attributestringtitle;attributeintegeryear;attributeintegerlength;attributeenumFilm{color,blackAndWhite}filmType;relationshipSetStarstarsinverseStar::starredIn;//Star与Movie的联系};•联系的多重性–N:N•在联系中,每个C都和D的集合有关,而在反向联系中,每个D都和C的集合有关–N:1•在联系中,每个C都和唯一的D有关,而在反向联系中,每个D都和C的集合有关–1:1•在联系中,每个C都和唯一的D有关,而在反向联系中,每个D都和唯一的C有关•InterfaceMoive{……relationshipSetStarstarsinverseStar::staredIn;relationshipStudioownedByinverseStudio::owns;};•InterfaceStar{……relationshipSetMoivestaredIninverseMoive::stars;};•InterfaceStudio{……relationshipSetMoiveownsinverseMoive::ownedBy;};NNN1•ODL中的类型–基本类型•原子类型•接口类型–结构类型,可由以下类型组合而成•集合–无重复,次序无关•包–可重复,次序无关•列表–可重复,次序相关•数组•结构§2.2实体联系图(E/R)•用图形的方法,描述实体及实体间的联系•世界由一组称作实体的基本对象及这些对象间的联系组成•元素–实体(Entity)•客观存在并可相互区别的事件或物体•对应于ODL中的对象–实体集(EntitySet)•同类(具有相同类型、相同性质)实体的集合•对应于ODL中的类•用矩形表示§2.2实体联系图(E/R)•元素–属性(Attribute)•实体所具有的某一特性•用与实体集相连的椭圆表示–联系(Relationship)•实体集之间的关联•可涉及多个实体集•可表示双向的联系•用与相应的实体集相连的菱形表示MoviesStarsStars-inlenghtfilmTypetitleyearnameaddress•E/R联系的多重性–N与1的表示MoviesStarsStars-inStudiosPresidentsRunsMoviesStudiosOwns•联系的多向性–E/R图能方便地描述两个以上实体集间的联系StarsMoviesContractsStudios一个制片公司与一位特定的影星签约来演一部特定的电影•联系中的角色–实体集在联系中的作用–参与联系的实体集互异•只标注联系名–同一实体集在一个联系中多次出现•标注联系名及角色名Sequel-ofMoviesOriginalSequelStarsMoviesContractsStudiosStudioofstarProducingstudio•联系中的属性–联系中可以包含属性•由联系而产生的属性–可为由联系产生的属性建立实体集StarsMoviesContractsStudiossalary•将多向联系转换成二元联系–新增连接实体集–引入连接实体集至原实体集的多对一的联系§2.3设计原则•真实性–设计应当忠于规范–存什么•避免冗余–任何事物只表达一次•避免引入过多的元素•选择合适的元素类型–属性?–类/实体集?–联系集?§2.4子类•特殊化与概括•子类与超类•属性的继承•ODL中的子类–子类继承其超类的所有特性•属性•联系InterfaceCartoon:Movie{relationshipsetStarvoices;}•ODL中的多重继承–类的层次–一个类可以有多个超类InterfaceMurderMystery:Movie{attributestringweapon;}InterfaceCartoon-MurderMystery:Cartoon,MurderMystery{}•E/R中的子类–Isa•E/R中的继承§2.5对约束的建模•建模包含对现实世界的对象及联系的描述,也包含对它们的一些约束–键码–单值约束–参照完整性约束–域的约束–一般约束•键码–在类的范围内唯一标识一个对象(或者在实体集的范围内唯一标识一个实体)的属性或属性集–一个类中的两个对象(或一个实体集中的两个实体)在构成键码的属性集上取值不能相同–ODL中键码的表示interfaceMovie(key(title,year)){……}•超码–一个或多个属性的集合,能在一个实体集中唯一地标识一个实体–一个类(或实体集)中可能有多个超码•候选码–其任意真子集都不为超码的超码–一个类(或实体集)中可能有多个候选码•主码–从候选码中选取的一个,一个类(实体集)中只有一个主码–E/R图中只能表示主码:主码属性名加上下划线•单值约束–要求某个角色的值是唯一的,如键码–当一个属性为单值时•可以要求该属性值存在(notnull)•可以允许该属性值任选(null)–构成键码的属性,必须有值存在(notnull)•参照完整性约束–要求由某个对象引用的值在数据库中确实存在–参照与被参照、引用与被引用–参照完整性约束的操作(各产品不同)•禁止删除被引用的对象•级联删除/修改–E/R图中参照完整性的表示MoviesStudiosOwns§2.6弱实体集•弱实体集的属性不足以形成主码•有主码的实体集称为强实体集•弱实体集只有作为一对多联系的一部分(多)才有意义•弱实体集与其拥有者之间的联系是标识性联系CrewsUnit-ofStudiosnumbernameaddr§2.7关于联系集•联系集的成份–参加联系的实体集的主码–联系集的属性•联系中属性的决策(二元联系)–1:1联系集的属性:放到任意一端–1:N联系集的属性:放到N端–N:M联系集的属性:只能留在联系集中•联系集的取舍(二元联系)–1:1联系:将一端的主码作为另一端的属性–1:N联系:将一端的主码作为N端的属性–N:M联系:必须保留联系集•联系集的键码(二元联系)–1:1联系:任意一端的主码–1:N联系:N端的主码–N:M联系:参加联系的所有实体集的主码•ODL、E/R建模–关心:存什么数据、关系如何–不关心:用什么数学模型、DBMS产品–透过E/R图,便于与用户交流•作业–思考所有带*的练习,并上网查阅解答–练习2.1.7/2.2.8/2.3.2/2.5.3/2.5.4/2.6.4(a)