从类模型映射到关系模型

合集下载

2017 第4章 E-R模型到关系的转换(1)

2017 第4章 E-R模型到关系的转换(1)

基本E-R模型的转换——一对多联Manage n
dname budget
Employees
Departments
基本E-R模型的转换——一对多联系
方法一:将一对多联系转换为一个独立的关系表 关系模式: Manages (did, ssn, since)
E-R模型转换实例分析
每个教授只讲授一门课程,每门课程可有几位 教授讲授 假定一些课程可由一组教授联合讲授 假定一些特定课程只能由一组教授联合讲授, 且这些教授中的任一位不可能独立讲授这门课 程(思考题)

E-R模型转换实例分析
职工号 姓名 电话
n
课号 课时 讲授 班级
m
学分
教授
课程
学期
hourly_wages
hours_worked
ISA
contractid
Hourly_Emps
Contract_Emps
扩展的E-R模型的转换——类层次
方法一:三个实体集转换成三个关系表 实体集Employees的转换比较简单 关系Hourly_Emps的属性包括:ssn, hourly_wages, hours_worked; ssn是主关键字; 同时ssn一个外键; 当超类中实体被删除时子 类中的对象也必须删除 Contract_Emps的转换相类似 思考题:为什么在关系Hourly_Emps的属性 中不包含属性name和lot? 体现继承性了吗?
基本E-R模型的转换——多对多联系
name ssn lot Employees m did n dname budget
Works_in3 p
Departments
from
Duration
to

概念模型向关系模型的转换

概念模型向关系模型的转换

学号
姓名
年龄
性别
学生 m
选修 n
课程
转换的关系模型为:
学生(学号,姓名,年龄,性 别);
成绩
课程(课程号,课程名,学时 数);
选修(学号,课程号,成绩)。
课程号 课程名 学时数
【例2】将含有1:n联系的E-R图转换为关系 模型。
仓库号
地点
仓库
1 仓储
n 产品
面积 数量
方案1:联系形成的关系独立存在。 仓库(仓库号,地点,面积); 产品(产品号,产品名,价格); 仓储(仓库号,产品号,数量)。
方案2:联系形成的关系与n端对象合并。 仓库(仓库号,地点,面积);
产品(产品号,产品名,价格,仓库 号,数量)。
概念模型向关系模型的转换
1. 实体集的转换规则
一个实体集转换为关系模型中的一个关系,实体的属性就 是关系的属性,实体的码就是关系的码,关系的结构是关 系模式。
2. 实体集间联系的转换规则
(1) 1:1联系的转换方法 1) 将1:1联系转换为一个独立的关系:与该联系相连的各 实体的码以及联系本身的属性均转换为关系的属性,且每 个实体的码均是该关系的候选码。 2) 将1:1联系与某一端实体集所对应的关系合并,则需要 在被合并关系中增加属性,其新增的属性为联系本身的属 性和与联系相关的另一个实体集的码,新增属性后原关系 的码不变。
产品号
产品名
价格
(3) m:n联系的转换方法
在向关系模型转换时,一个m:n联系 转换为一个关系。转换方法为:与该联系 相连的各实体集的码以及联系本身的属性 均转换为关系的属性,新关系的码为两个 相连实体码的组合(该码为多属性构成的 组合码)。
【例3】将图中含有m:n二元联系的E-R图, 转换为关系模型。

概念模型ER图及概念模型转化成关系模型

概念模型ER图及概念模型转化成关系模型

m
n
1
办卡
属于
1 学生卡
1 班级
课程号 课程名
学分
卡号
余额
班号
辅导员
二、概念模型转化成逻辑模型
将E-R图转换为关系模型实际是将实体集、 属性以及联系转换为相应的关系模式, 1.实体集的转换规则:概念模型中的一个 实体集转换为关系模型中的一个关系,实 体的属性就是关系的属性,实体的码就是 关系的码,关系的结构是关系模式,
较强的语义表达能力,能够方便、直接地表达应用中的 各种语义知识
简单、清晰、易于用户理解,
2. 信息世界中的基本概念
1 实体 Entity
客观存在并可相互区别的事物称为实体,
可以是具体的人、事、物或抽象的概念,
2 属性 Attribute
实体所具有的某一特性称为属性, 一个实体可以由若干个属性来刻画,
3. 概念模型的表示方法ER图
实体型
用矩形表示,矩形框内写明实体名,
学生
教师
E-R图 续
An Introduction to Database System
属性
用椭圆形表示,并用无向边将其与相应的实体连 接起来
学生
学号
姓名
性别
年龄
E-R图 续
An Introduction to Database System
2. 实体集间联系的转换规则
以下举例基于以下的E-R图
成绩
选课 n 课程
学号
姓名
学生
m
n
1
办卡
属于
1 学生卡
1 班级
课程号 课程名
学分
卡号
余额
班号
辅导员
An Introduction to Database System

将对象映射到关系数据库

将对象映射到关系数据库

________________________________________
满江红翻译团队:
-5-
图 3. 在一个类图里包含"shadow 信息"
我还没有讨论的一种 shadow 信息是用一个 boolean 类型的标志来表示当前一个 对象是否存在于数据库中。这里的问题是当你把数据保存到一个关系型数据中, 如果原先的对象是从数据库中获取出来的,你需要使用一个 SQL update 语句来 保存数据,否则应该使用 SQL insert 语句。一个普通的解决方法是为每个类实 现一个 isPersistent 的 boolean 型信号标志(图 3 里没有显示),当数据是从 数据库里面读取的时候把它的值设置成 true,如果对象是新创建的话则设置为 false。
最简单的映射就是把一个属性映射到一个字段。当双方拥有一样的基本类型的时 候,这甚至可以变得更简单。例如,双方都是 date 类型,或者属性是 string 类型而字段是 char 型,或者属性是 number 类型而字段是 float 类型。
映射术语
映射 (动词). 指的是如何把对象和对象之间的关系持久化到永久存储设备(这在里是关系 型数据库)中的行为。
将对象映射到关系数据库:对象/ 关系映射(O/R Mapping)详解
大多数现代商业应用开发项目使用面向对象技术,比如采用Java或者C#来创建应 用软件,同时使用关系型数据库来存储数据。但这并不是要说你没有其它选择, 也有许多应用程序是使用面向过程的语言开发,比如COBOL,而且也有许多系统 使用对象型数据库或者XML数据库来存储数据。然而,因为面向对象和关系数据 库技术到目前为止已经成为一种事实上的标准,在本章节中我假设你正在使用这 些技术。如果你采用其它的存储技术,本文里的许多概念仍然适用,只需要做一 点点修改(不必担心,Realistic XML总括了对象与XML映射的相关问题)。

概念模型与关系模型之间的对应关系

概念模型与关系模型之间的对应关系

概念模型与关系模型之间的对应关系在数据库设计中,概念模型与关系模型二者之间的对应关系是至关重要的。

理解了这样的关系,我们才能够更好地理解和设计数据库模型。

首先,概念模型充分考虑了实体的属性与实体的关系。

它是对现实世界的映射模型,是对于现实世界中的事物及其关系的一个抽象表示。

概念模型中,可以包括实体、属性以及实体之间的关系。

实体是现实世界中能够区别的对象,属性则是描述实体的特性,实体之间的关系则是实体与实体之间的相互关联。

相比之下,关系模型则是一种模型,其主要思想是通过二维表格形式来表示实体和实体间的关系,这种表格称作关系。

在关系模型中,表是数据库的基本元素,每一个表代表一种实体。

表中的每一行对应一个实体的实例,每一列则对应该实体的一个属性。

因此,从概念模型到关系模型的转化是数据库设计的重要步骤。

在这个过程中,实体转变为表,实体的属性转变为表的属性,实体之间的关系则通过表之间的关联关系来表达。

这是基于对现实世界的抽象和简化,以方便数据的存储和管理。

例如,如果有一个"学生"的实体,其属性有"姓名"、"学号"等。

在转化为关系模型时,就会有一个"学生"的表,每一行代表一个学生,其中"姓名"、"学号"等列即为表的属性。

如果学生与课程存在一种关系,那么在关系模型中,可以通过学生表和课程表的关联来表示这种关系。

然而这个转变并非一对一的对应,经常会涉及到一对多、多对一或者多对多的关系。

这个过程中可能会需要涉及到对数据的冗余和数据完整性的处理。

这也是数据库设计的一项重要工作。

总的来说,概念模型与关系模型的对应关系,就是一个从现实世界的抽象和概念化,到能够用于实际操作和存储的模型的转换过程。

在这个过程中,不仅要充分考虑到实体的属性和关系,也要考虑到数据的存储和管理。

数据模型映射关系

数据模型映射关系

数据模型映射关系
数据模型映射关系是指在不同的数据模型或数据库之间建立的对应关系。

这种映射关系用于将一个数据模型中的数据和结构转换为另一个数据模型或数据库中的相应表示。

以下是一些常见的数据模型映射关系的示例:
1. 概念模型到逻辑模型的映射:在数据库设计过程中,概念模型(如实体关系图)被转换为逻辑模型(如关系型数据库的表结构)。

这种映射涉及将实体、属性和关系转换为相应的表、列和主键-外键关系。

2. 逻辑模型到物理模型的映射:逻辑模型表示数据的逻辑结构和关系,而物理模型则关注数据在实际存储介质中的组织和布局。

这种映射涉及将逻辑表和列转换为物理表和文件,以及确定存储策略、索引等。

3. 数据库到应用程序的数据映射:在应用程序开发中,数据库中的数据需要与应用程序中的对象或模型进行映射。

这种映射涉及将数据库表中的列与应用程序中的属性或字段相对应,以便在应用程序中操作和显示数据。

4. 不同数据库之间的映射:当需要将数据从一个数据库迁移或集成到另一个数据库时,需要建立数据库之间的映射关系。

这包括映射表结
构、列类型、数据约束等,以确保数据在不同数据库之间的一致性和可移植性。

5. 数据模型到数据仓库的映射:在数据仓库环境中,源系统的数据模型需要与数据仓库的模型进行映射。

这种映射涉及将源系统中的表、字段和关系转换为数据仓库的维度、事实和层次结构。

orm 标准

orm 标准

orm 标准ORM(Object-Relational Mapping)是一种将对象模型映射到关系数据库的技术。

虽然不同的ORM框架可能有自己的特性和语法,但以下是一些常见的ORM标准和设计原则:对象关系映射:ORM的核心概念是将对象(如实体、数据访问对象等)映射到关系数据库中的表和字段。

通过使用映射元数据(如类和字段的名称、类型和关系),ORM框架可以自动将对象持久化到数据库中,并从数据库中加载对象。

封装SQL查询:ORM框架通常提供一种查询语言或API,用于执行数据库操作而无需直接编写SQL语句。

用户可以使用这些查询语言或API来检索、插入、更新和删除数据,而ORM框架将负责生成相应的SQL语句。

映射元数据:ORM框架使用映射元数据来定义对象和数据库之间的关系。

这些元数据通常包括类和字段的名称、类型、关系以及访问权限等信息。

ORM框架使用这些元数据来生成相应的数据库表和字段,并将对象映射到这些表和字段上。

延迟加载:ORM框架通常支持延迟加载,即在需要访问关联对象时才从数据库中加载它们。

这可以提高性能,并减少不必要的数据库查询。

事务管理:ORM框架通常提供事务管理功能,用于确保数据库操作的原子性和一致性。

事务可以确保一系列操作要么全部成功执行,要么全部回滚,从而保持数据的一致性。

关联管理:ORM框架支持对象之间的关联关系,如一对一、一对多和多对多等。

这些关联关系可以通过映射元数据来定义,并由ORM框架自动处理关联对象的加载、保存和删除操作。

继承映射:ORM框架通常支持将类的继承关系映射到数据库中的表继承关系。

这样可以实现数据的分类和组织,并减少数据冗余。

乐观锁和悲观锁:ORM框架通常提供乐观锁和悲观锁机制来处理并发操作。

乐观锁通过版本号或时间戳等机制来检测数据冲突,而悲观锁通过锁定机制来防止其他事务修改数据。

插件和扩展性:ORM框架通常提供插件和扩展机制,以便用户可以根据自己的需求定制功能或扩展框架本身。

数据模型映射关系

数据模型映射关系

数据模型映射关系
数据模型映射关系指的是将业务数据模型映射到物理数据模型的过程。

在常见的关系型数据库中,数据模型通常由实体和实体之间的关系组成,而物理数据模型则由表、字段、索引等物理数据库对象组成。

数据模型映射关系一般有以下几种形式:
1. 实体和表的映射:将业务数据模型中的实体映射为数据库中的表,实体的属性映射为表的列。

2. 一对一关系映射:当实体之间存在一对一的关系时,可以将两个实体映射为同一个表,或者将其中一个实体的主键作为另一个实体的外键。

3. 一对多关系映射:当实体之间存在一对多的关系时,可以将多的一方实体的主键作为一的一方实体的外键。

4. 多对多关系映射:当实体之间存在多对多的关系时,通常需要创建一个关联表,用于存储两个实体之间的关联信息。

除了上述常见的映射关系,还有一些特殊的映射关系,如继承关系的映射、枚举类型的映射等。

不同的数据库管理系统和ORM框架通常会提供不同的映射方式和工具,用于简化数据模型映射工作。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

根据领域模型分析数据模型Mapping from the Class Model to the Relational Model 从类模型映射到关系模型Having described the two domains of interest and the notation to be used, we can now turn our attention as to how to map or translate from one domain to the other. The strategy and sequence presented below is meant to be suggestive rather than proscriptive - adapt the steps and procedures to your personal requirements and environment.在需要对两个领域建模时,现在我们可以关注如何从一个领域映射或转换映射到另一个领域。

以下的策略和方法,就是要启发,而不是强制的步骤和程序应用到您的个人需求和环境。

1. Model ClassesFirstly we will assume we are engineering a new relational database schema from a class model we have created. This is obviously the easiest direction as the models remain under our control and we can optimise the relational data model to the class model. In the real world it may be that you need to layer a class model on top of a legacy data model - a more difficult situation and one that presents its own challenges. For the current discussion will focus on the first situation. At a minimum, your class model should capture associations, inheritance and aggregation between elements.1. 类建模首先,我们将假设从已创建的类模型生成一个新的关系数据库模型。

这显然是最容易的,可控制的,可以通过关系数据库模型反向优化类模型。

在现实世界中可能你需要将类模型作为数据模型的上层,这是更困难的情况,也对自己提出了一个挑战。

对于目前的讨论将集中在第一种情况。

至少,你的类模型应捕元素之间的联系、继承和聚集关系。

2. Identify persistent objectsHaving built our class model we need to separate it into those elements that require persistence and those that do not. For example, if we have designed our application using the Model-View-Controller design pattern, then only classes in the model section would require persistent state.2. 确认持久对象已建成的类模型,我们需要区分这些元素,那些需要持久化和那些不是。

例如,如果我们设计我们的应用程序使用Model - View- Controller设计模式,那么只有MODEL模型部分需要持久化状态。

3. Assume each persistent class maps to one relational tableA fairly big assumption, but one that works in most cases (leaving the inheritance issue aside for the moment). In the simplest model a class from the logical model maps to a relational table, either in whole or in part. The logical extension of this is that a single object (or instance of a class) maps to a single table row.3. 假设一个持久化类映射一个关系表大多数情况下,这都是一个合理的假设,除去继承问题以外(暂且不考虑)。

在最简单的模型中,逻辑模型中的一个类映射一个关系表的全部或一部分。

这种逻辑的延伸是一个单一的对象(或类的实例)映射关系表中的一行数据。

4. Select an inheritance strategy.Inheritance is perhaps the most problematic relationship and logical construct from the object-oriented model that requires translating into the relational model. The relational space is essentially flat, every entity being complete in its self, while the object model is often quite deep with a well-developed class hierarchy. The deep class model may have many layers of inherited attributes and behaviour, resulting in a final, fully featured object at run-time. There are three basic ways to handle the translation of inheritance to a relational model:4. 选择一个继承策略从面向对象模型转化成关系模型的过程中,继承可能是最有问题的关系和逻辑结构。

关系空间本质上是平面结构,每一个实体自我实现,而对象模型通常为多层次扩展的类结构。

多层级类模型可能有多层次继承的属性和行为,最终结果,运行时功能齐全的对象。

有三种基本方式对继承关系转换成关系模型:a.Each class hierarchy has a single corresponding table that contains all the inherited attributes for allelements - this table is therefore the union of every class in the hierarchy. For example, Person, Parent, Child and Grandchild may all form a single class hierarchy, and elements from each will appear in the same relational table;类层次结构有只有一个相应的表,包含所有元素的所有继承的属性。

因此这个表是类层次结构中所有类的联合。

例如,人,父母,子女和孙子都可能形成一个单一的类层次结构,单所有元素将出现在同一个关系表中;b.Each class in the hierarchy has a corresponding table of only the attributes accessible by that class(including inherited attributes). For example, if Child is inherited from Person only, then the table will contain elements of Person and Child only;层次结构中每个类都有一个相应的表。

表中包含类所要访问的所有属性(包括继承的属性)。

例如,如果孩子继承人,则该表将包含个人与儿童所有的元素;c.Each generation in the class hierarchy has a table containing only that generation's actual attributes. Forexample, Child will map to a single table with Child attributes only在类结构中,每一层有一个表,包含这一层的实际属性。

例如,Child将映射大偶一个简单表,只包含汉字的属性。

There are cases to be made for each approach, but I would suggest the simplest, easiest to maintain and less error prone is the third option. The first option provides the best performance at run-time and the second is a compromise between the first and last. The first option flattens the hierarchy and locates all attributes in one table - convenient for updates and retrievals of any class in the hierarchy, but difficult to authenticate and maintain. Business rules associated with a row are hard to implement, as each row may be instantiated as any object in the hierarchy. The dependencies between columns can become quite complicated. In addition, an update to any class in the hierarchy will potentially impact every other class in the hierarchy, as columns are added, deleted or modified from the table.以上的方法都有成功的案例,但我认为最简单,最容易维护和减少出错是第三个选择。

相关文档
最新文档