实体关联知识讲解
Hibernate实体关联关系映射----总结
Hibernate实体关联关系映射----总结在我看来,Hibernate提供这些映射关系,常⽤就是⼀对⼀和多对⼀,并且在能不⽤连接表的时候尽量不要⽤连接表。
多对多会⽤到,如果⽤到了,应该⾸先考虑底层数据库设计是否合理。
在实际开发中,在Hibernate关联关系之外常常还有另外⼀种选择⽅案,表各⾃作为单表映射,业务逻辑控制外键关系(有时候就是⼀个相关联的列,但不⼀定要加外键约束),这样更加灵活,并且数据的完整性同样有保证。
当然,“单表映射,业务控制外键关系”并不是说Hibernate的实体关联功能是多余的,Hibernate的实体关联的优点很多,随便拿本书都是讲优点,⽤好了会让开发⼈员感觉更⽅便,现在我也是两种⽅案结合使⽤。
⽐如对于不很确定的两个实体,常常选⽤单表关联。
以前在初学Hibernate还没有完全搞清楚这些关联关系的时候,就是⽤单表映射,业务控制外键关系做的,发现没有任何问题,程序同样运⾏得很好。
看了这些是不是后悔浪费时间学习映射关系了?呵呵,Hibernate的OR Mapping是Hibernate的灵魂,我相信Hibernate的创始⼈⽐我们⼀般⼈的理解更深刻。
只有学会了这些才能体会Hibernate设计者的思想。
学⼀个东西,不光⾃⼰写代码,还应该能看懂别⼈的代码才⾏。
因此系统学习这些关联映射还是⼤有必要的。
以上都是我⾃⼰的观点。
欢迎在此交流讨论。
Hibernate在实际项⽬开发中,hbm.xml包括数据库脚本都是通过Xdoclet⽣成的,在此不采⽤Xdoclet的⽬的是为了便于理解这些映射模型。
实体-数据表-映射⽂件三者对⽐看,太直观了。
瞌睡了,暂时先写到此,有新思路了再补上。
-----------------------------------------------------回Hibernate:Hibernate关联关系映射⽬录│├─单向关联│├─│├─│├─│├─│├─│├─│├─│└─└─双向关联├─├─├─├─├─└─。
实体联系模型
实体联系模型实体-联系模型基本概念实体:实体是有别于其他对象的⼀个事物,⽐如⼈,教师,学⽣,课程,专业。
实体集:⼀系列实体组成的集合,在数据库中对应的就是⼀个表。
属性:⼀组属性构成⼀个实体,⽐如学⽣可能具有学号,姓名,年龄等属性。
每个实体中的属性都有⼀个值。
所以⼀个数据库中包含若⼲个实体集,每个实体集中有若⼲个实体,每个实体中有⼀些属性。
联系:多个实体之间相互关联,⽐如教师Katz 和学⽣Shankar 可能存在⼀个联系advisor ,表⽰Katz 是Shankar 的⽼师联系集:相同类型联系的集合。
如果E 1,E 2,E 3,...,E n 是实体集,联系集R 是如下集合的⼀个⼦集,n >=2,(e 1,e 2,...,e n )是其中的⼀个联系。
(e 1,e 2,...,e n )|e 1∈E 1,e 2∈E 2,...,e n ∈E n 说⽩了,联系集就是咱们⽤数据库时建的那些⽤来联系两个表的表,⽐如选课表⽤来联系学⽣和课程之间的⼀个关系。
⽽这个联系⽤数学表⽰就是(student _id ,course _id ),所有这些元组就组成了联系集{(student _id ,course _id )|student _id ∈student ,course _id ∈course },也就是选课表。
参与:实体集之间的关联称为参与,⽐如⼀个学⽣Shankar 和⼀门课程Comp. Sci.共同参与到选课这个联系中。
联系实例:两个实体集中的实体参与到⼀个联系中时,就构成了⼀个联系实例,⽐如学⽣Shankar 选了Comp. Sci.课程,那么它们就构成了选课联系中的⼀个联系实例。
⾓⾊:实体在联系中充当的功能。
描述性属性:联系中可以具有⼀些描述性属性,⽐如通过⼀个date 来记录学⽣在何时选了⼀门课。
联系集的度:参与联系集的实体集个数,⼀般情况下联系集的度为2,称为⼆元联系集。
属性简单属性和复合属性之前的属性都是简单属性,就是只有⼀个值的属性,复合属性可以继续划分称更⼩的属性。
实体关系建模概念说明
弱实体集 (续)
注意: 强实体集的主键并不显式地存于弱实体集中, 而是隐含地通
过标识联系起作用.
如果 loan-number 显式存在, payment 就成了强实体, 则payment
与 loan 之间的联系变得冗余。因为payment 与 loan共有的属性 loan-number 定义了一个隐含的联系。
第2章: 实体-联系模型
实体集 联系集
设计问题
映射约束 键 E-R 图 扩展E-R E-R 模式设计 E-R 模式到表的转换
实体集
数据库可被建模为:
实体集合, 实体间联系.
实体是客观存在的对象并且与其他对象可区分.
例如: 特定的人, 公司, 事件, 植物
为E 创建一个特殊的标识属性 将 R 的所有属性加给 E 对R 中每一个联系 (ai , bi , ci),
1.创建实体集E 中的一个新实体 ei 3.将 (ei , bi ) 加入 RB 2. 将 (ei , ai ) 加入 RA 4. 将 (ei , ci ) 加入 RC
非二元联系转换成二元联系 (续)
体是如何通过 works-for 联系集相关的.
角色在 E-R 图中通过对连接菱形与矩形的直线做标记来表示. 角色标记是可选的, 用于明确联系的语义
基数约束
在联系集与实体集之间用有向直线()表示“一”,无向直线(—)
表示“多”.
例如:从customer到loan的一对一联系:
通过联系borrower 一个客户最多只能与一笔贷款相关联
E-R 图
矩形表示实体集
菱形表示联系集
直线连接实体集及其属性,实体集与联系集 椭圆表示属性 双椭圆表示多值属性 虚线椭圆表示导出属性 下划线表示主键属性 (见后)
实体关系模型
实体关系模型科技名词定义中文名称:实体关系模型英文名称:entity relationship model定义:该模型直接从现实世界中抽象出实体类型和实体间联系,然后用实体联系图(E-R示数据模型,是描述概念世界,建立概念模型的实用工具。
应用学科:实体关系模型(Entity Relationship Diagram)地理信息系统术语,该模型直接从现实世界中抽象出实体类型和实体间联系,然后用实体联系图(E-R图)表示数据模型,是描述概念世界,建立概念模型的实用工具。
目录什么是E-R图E-R图的基本要素E-R图(Entity Relationship Diagram)即实体联系图,也称实体关系图什么是E-R图E-R图即实体-联系图(Entity Relationship Diagram),是指提供了表示实体型、属性和联系的方法,用来描述现实世界的概念模型。
E-R方法:是“实体-联系方法”(Entity-Relationship Approach)的简称。
它是描述现实世界概念结构模型的有效方法。
实体联系模型,实体关系模型或实体联系模式图(ERD)是由美籍华裔计算机科学家陈品山(Peter Chen)发明,是概念数据模型的高层描述所使用的数据模型或模式图,它为表述这种实体联系模式图形式的数据模型提供了图形符号。
这种数据模型典型的用在信息系统设计的第一阶段;比如它们在需求分析阶段用来描述信息需求和/或要存储在数据库中的信息的类型。
但是数据建模技术可以用来描述特定论域(就是感兴趣的区域)的任何本体(就是对使用的术语和它们的联系的概述和分类)。
在基于数据库的信息系统设计的情况下,在后面的阶段(通常叫做逻辑设计),概念模型要映射到逻辑模型如关系模型上;它依次要在物理设计期间映射到物理模型上。
注意,有时这两个阶段被一起称为"物理设计"。
E-R模型图E-R图的基本要素通常,使用实体-联系图(entity-relationship diagram)来建立数据模型。
概念数据模型中实体与实体之间的联系
概念数据模型中实体与实体之间的联系
在概念数据模型中,实体(Entity)是描述现实世界中的一个独立对象或概念,可以是具体的实体(如人、物品、地点)或抽象的概念(如事件、过程)。
实体之间的联系(Relationship)用于描述实体之间的关系、依赖或互动。
实体与实体之间的联系可以分为以下几种类型:
1. 一对一关系(One-to-one relationship):两个实体之间存在唯一的关系,即一个实体实例对应另一个实体实例。
2. 一对多关系(One-to-many relationship):一个实体实例对应多个另一个实体实例,但反过来,每个另一个实体实例只对应一个实体实例。
3. 多对多关系(Many-to-many relationship):多个实体实例可以与多个另一个实体实例相互关联。
4. 自反关系(Reflexive relationship):实体与自身存在关系。
例如,在一个员工实体中,可能存在上级与下级之间的关系。
5. 聚合关系(Aggregation relationship):表示实体之间整体与部分之间的关系。
一个实体可以被其他实体包含,或者多个实体可以共同组成一个新的实体。
6. 继承关系(Inheritance relationship):表示实体之间的层次结构关系。
一个实体可以继承另一个实体的属性和行为。
这些不同类型的实体之间的联系可以通过概念数据模型中的关系图示或关系表达式来表示。
关系图示使用图形符号表示实体和实体之间的连接,关系表达式用来描述实体之间的联系及其性质。
数据库设计中的实体关系图与属性分析
数据库设计中的实体关系图与属性分析数据库设计是构建数据库系统的基础,它涉及到实体关系图的设计与属性分析。
本文将就数据库设计中的实体关系图以及属性分析进行探讨和解析,旨在帮助读者更好地理解数据库设计的过程和方法。
一、实体关系图实体关系图是数据库设计中的重要工具,它用于描述数据库中的实体以及它们之间的联系。
实体关系图主要由实体、属性和关系三个基本要素构成。
1. 实体实体是指在现实世界中具有独立存在和具体特征的事物,也可以说是数据库中的数据对象。
在实体关系图中,实体由椭圆形表示,实体名字位于椭圆形内部。
一个实体可以具有多个属性。
2. 属性属性是实体所具有的某种性质或特点。
在实体关系图中,属性由矩形框表示,属性名位于矩形框内部。
属性可以分为简单属性和复合属性两种。
简单属性是指不能再分解的属性,而复合属性是由若干简单属性组成的属性。
3. 关系关系是实体之间的联系。
在实体关系图中,关系由菱形表示,关系名位于菱形内部。
关系可以分为一对一关系、一对多关系和多对多关系三种类型。
一对一关系是指一个实体与另一个实体之间存在唯一对应的关系;一对多关系是指一个实体与另一个实体之间存在一对多的关系;多对多关系是指多个实体与多个实体之间存在多对多的关系。
二、属性分析属性分析是数据库设计中对属性的定义和解析。
在进行属性分析时,需要考虑属性的命名、数据类型、长度、约束以及默认值等方面。
1. 属性命名属性命名应当具有描述性和唯一性。
命名要求简洁明了,能够准确反映属性所代表的意义。
属性的命名应使用英文单词或缩写,并遵循命名规范。
2. 数据类型属性的数据类型是指属性所能够存储的数据的类型。
常见的数据类型有整型、浮点型、字符型、日期型等。
在选择数据类型时,应根据属性的实际需求和数据库的存储能力进行选择。
3. 属性长度属性长度是指属性所能够存储的数据的最大长度。
属性长度的选择应考虑到实际数据的需求,要保证属性的长度能够容纳到所有可能的数据,同时也不能过度浪费存储空间。
知识图谱文献综述(第四章实体关系学习)
知识图谱⽂献综述(第四章实体关系学习)1. 任务定义、⽬标和研究意义 关系定义为两个或多个实体之间的某种联系,实体关系学习就是⾃动从⽂本中检测和识别出实体之间具有的某种语义关系,也称为关系抽取。
关系抽取的输出通常是⼀个三元组(实体 1,关系,实体 2)。
例如,句⼦“北京是中国的⾸都、政治中⼼和⽂化中⼼”中表述的关系可以表⽰为(中国,⾸都,北京),(中国,政治中⼼,北京)和(中国,⽂化中⼼,北京)。
关系抽取是知识图谱构建和信息抽取中的⼀个关键环节,具有重要的理论意义和⼴阔的应⽤前景,为多种应⽤提供重要的⽀持,主要表现在: (1)⼤规模知识图谱的⾃动构建。
很多互联⽹应⽤都需要知识图谱的⽀撑,这个知识图谱不仅包含 WordNet、HowNet 等常识知识图谱中的通⽤语义知识,⽽且包含百科全书、领域知识图谱中的领域语义知识。
如果能把多源异构知识集成为⼀个⼤的知识图谱,将可能提⾼很多互联⽹应⽤系统的性能,并开创语义⽹时代的很多应⽤。
现有的知识图谱如 WordNet、HowNet 和 CYC 等⼤多数依靠专家⼈⼯编撰。
随着互联⽹的发展,知识呈爆炸式增长,⼈⼯构建知识图谱特别是构建领域知识图谱时遇到了很⼤困难,不仅费时费⼒,⽽且存在知识覆盖率低、数据稀疏和更新缓慢等问题。
利⽤关系抽取技术,知识图谱可以根据结构化的抽取结果⾃动⽣成。
典型的例⼦有:Freebase、Yago 和 BDpedia。
(2)为其它信息获取技术提供⽀持。
1. 对信息检索提供⽀持:可以对复杂的查询进⾏关联搜索和推理,提供智能检索结果。
例如,对于“⾝⾼ 170 以上的中国射⼿座明星”,有了关系抽取技术的⽀持,通过知识图谱构建,就可以通过推理的⽅法获得结果。
图 1 展⽰了百度搜索引擎对“⾝⾼ 170 以上的中国射⼿座明星”查询返回的结果,这个结果的背后就受到⼤规模知识图谱的⽀撑。
2. 对问答系统提供⽀持:在问答中,关键步骤是建设⼀个领域⽆关的问答类型体系并找出与问答类型体系中每个问答类型相对应的答案模式,这就需要关系抽取技术的⽀持。
第4章 实体-联系方法
例如,假设实体学生还有社会关系这个属性, 那么一 个学生可能有0个、 1个或多个亲属, 该实体集中不同的 学生实体在属性社会关系上有不同数目的值, 这样的属性 称多值属性。
在具体设计中, 可根据应用需求对某个多值属性的 取值数目进行上、 下界的限制。 例如, 上述学生社会关 系属性限制在6个以内。
(6) 派生属性: 这类属性的值可以从别的相关属性或实体 派生出来。 例如, 学生的年龄可以通过其出生日期计算 出来。 形式化地说,实体集的属性是将实体集映射到域的函数。
第4章 实体—联系方法
4.1.2 联系(relationship)
联系是多个实体间的相互关联。
实体之间会有各种关系,例如学生实体与课程实 体之间可有选课关系,学生与教师之间可能有讲授关 系等。 这种实体与实体间的关系抽象为联系。
第4章 实体—联系方法
实 (人)
体:用以描述现实世界中可以区分的东西。
实体值:就是符合实体型定义的每个具体实体。
实体集: 是具有相同类型及相同性质(或属性)的具 体实体集合。(人们:张三,李四)
第4章 实体—联系方法
例如, 全体学生就是一个实体集, 全部课程 也是一个实体集。 实体集可以相交。 例如:假设某些教师在本校在职学习, 那么他们既
第4章 实体—联系方法
(4) 多对多: A中的一个实体可以同B中任意数目的实 体相联系, B中的一个实体也可以同A中任意数目的实 体相联系, 如图4.2(d)所示。
例如:一门课程同时有若干个学生选修,而一个学生 可以同时选修多门课程,课程与学生之间具有多对多 联系。
第4章 实体—联系方法
A B A B A B A B
实体与联系之间的3种对应关系
实体与联系之间的3种对应关系
实体与实体间的联系有三种,包括:一对一关系、多对多关系和一对多关系。
1. 一对一关系(1:1):表示两个实体之间存在一对一的对应关系,即一个
实体只与另一个实体相关联,反之亦然。
例如,一个乘客只能坐一个机位,一个机位只能由一位乘客乘坐,所以乘客和飞机机位之间的联系是一对一的联系。
2. 一对多关系(1:n):表示一个实体与多个实体之间存在一对多的对应关系。
例如,一个班级有许多学生,而一个学生只能编入某一个班级,所以班级和学生之间的联系是一对多的联系。
3. 多对多关系(m:n):表示两个实体之间存在多对多的对应关系,即两个或多个实体相互关联。
例如,一个教师可以讲授多门课程,同一门课程也可以由多个教师讲授,所以教师和课程之间的联系是多对多的联系。
这些对应关系在数据建模、数据库设计、以及日常生活和工作中非常常见,有助于理解不同实体之间的关系并据此进行合理的设计和安排。
《实体联系模型》课件
本体论是语义网的核心组成部分,它定义了领域内共享的概念和实体,以及它们之间的关 系。通过使用本体论,可以实现不同系统之间的互操作性和信息共享。
语义推理
基于本体论的语义推理能够推导出隐藏在数据中的知识,从而提高信息的使用效率和准确 性。
大数据与实体联系模型
大数据处理
随着大数据技术的不断发展,如何有效地处理大规模数据 成为一个重要问题。实体联系模型作为一种数据模型,需 要适应大数据处理的需求。
实体联系模型
目录
• 实体联系模型概述 • 实体联系模型的基本元素 • 实体联系模型的设计过程 • 实体联系模型的实现与应用 • 实体联系模型的发展与未来趋势 • 问题与挑战
01
实体联系模型概述
定义与概念
定义
实体联系模型(ER模型)是一种 用于描述现实世界中实体、属性 以及它们之间关系的概念模型。
概念
它提供了一种抽象的方式来表示 数据结构,以便更好地理解和管 理数据。
实体与属性的定义
实体
在ER模型中,实体是指客观存在的 事物,如人、物、组织等。每个实体 都有一个唯一的标识符。
属性
属性用于描述实体的特征或描述信息 ,如人的姓名、年龄等。每个属性都 有一个名称和一个数据类型。
关系类型的分类
一对一关系(1
数据整合
实体联系模型在大数据环境下需要更好地整合不同来源、 不同格式的数据,从而提供更为全面和准确的信息。
实时处理
随着数据产生速度的加快,实体联系模型需要支持实时数 据处理和分析,以满足快速变化的环境和需求。
06
问题与挑战
数据冗余问题
总结词
数据冗余问题是指实体联系模型中存在的重复数据,这些重复数据可能导致数据管理效率低下,增加数据维护成 本,并可能引发数据不一致的问题。
01 实体关联关系映射
本讲大纲: 1、数据模型与领域模型 2、理解并配置多对一单向关联 3、理解并配置多对一双向关联 4、理解并配置一对一主键关联 5、理解并配置一对一外键关联 6、理解并配置多对多关联关系 7、了解级联操作
支持网站:
数据模型与领域模型
在正式进入Hibernate的高级应用之前需要首先了解什么是数据模型与领域 模型,这两个概念将会帮助读者更好地理解实体对象的关联关系映射。 数据模型 数据模型是对数据库特征的抽象,也就是用户从数据库中看到的模型,例如一张 数据表或者用户从数据表中所看到的存储信息,此模型既要面向用户又要面向系 统,面向用户是需要将存储数据完整地展现在用户面前,使用户可以对数据进行 增、删、改、查的操作;面向系统是对告诉计算机如何对数据进行有效的管理。 主要用于对数据库管理系统(DBMS)的实现。 领域模型 领域模型是对现实世界中的对象的可视化表现,又称为概念模型、领域对象 模型或分析对象模型。没有所谓唯一正确的领域模型。所有模型都是对我们试图 要理解的领域的近似。领域模型主要是在特定群体中用于理解和沟通的工具。有 效的领域模型捕获了当前需求语境下的本质抽象和理解领域所需要的信息,并且 可以帮助人们理解领域的概念、术语和关系。它是现实世界与计算机之间的一条 无形的纽带,也是需求分析设计人员一件强有力的工具。
理解并配置多对一单向关联
关联是类(类的实例)之间的关系,表示有意义和值得关注的连接 单向多对一的映射实现比较简单,在平时的应用中单向多对一的映 射也是很常见的,将以产品和生产商为例,实现单向的多对一映射。两 个持久化类的依赖关系如图17.1所示。将类Product引用了类Factory ,但是类Factory没有引用类Product。在类Product映射的表 tab_product中建立外键factoryid关联类Factory的映射表 tab_factory的主键factoryid。两个表的关联关系如图17.2所示。
关系型数据库中实体之间的关系
关系型数据库中实体之间的关系关系型数据库实体间有三种关联关系:⼀对⼀,⼀对多,多对多。
⼀对⼀关系(1:1): 如果实体集(表)A 中的每⼀个实休(就是每⾏记录),在实体集B中只有⼀条数据与它对应, 反之实体集B 中的每⼀个实体,在实体A中只有⼀条数据与它对应 这样的实体关系主是⼀对⼀关系 实例: 员⼯表、员⼯详细信息表之间的关系是员⼯表中的⼀⾏与详细信息表中的⼀⾏对应⼀对多关系(1:n): 如果实体集A中每⼀个实体,在实体集B中有n个与之对应(n>1)(当n为1时,就是⼀对⼀的关系) 反之在实体集B中每⼀个实体,在实体集A中最多只有⼀个实体与之对应 这样的实体就是⼀对多关系 实例: 学⽣表与班级表,多个学⽣属于同⼀个班级,班级表中的⼀⾏与学⽣表的多⾏数据对应 在学⽣表中新增字段(班级号),该字段作为学⽣表的外键与班级表中的班级号关联。
每⼀个学⽣实体在班级号字段的值,表⽰该学⽣属于的班级。
多对多关系(m:n): 如果实体集A中每⼀个实体,在实体集B中有m个与之对应(m>1) 反之如果实体集B中每⼀个实体,在实体集A中也有n个与之对应(n>1) 这样的实体关系就是多对多关系 实例: 学⽣表与教师表,⼀位学⽣有多位⽼师来教,⼀位⽼师也可以教多位学⽣,可以看作由两个⼀对多关系组合⽽成外键: mysql中的innodb引擎才⽀持外键A实体的某个字段指向 B实体的主键, 则称A实体的那个字段为该实体的外键, ⼀个表⾥可以有多个外键,也可以没有外键;被指向的实体称为主实体(主表),也叫⽗实体(⽗表),负责指向的实体称为从实体(从表),也叫⼦实体(⼦表)。
⼀般在哪个表⾥定义外键,这个表就是⼦表在创建的时候应该先创建主表,然后再创建从表, 插⼊数据时也应该先插⼊主表数据在删除表的时候应该先删除从表(⼦表), 然后再删除主表设置级联操作在主表发⽣数据改变时,与之相关的从表应该要怎么处理可以使⽤关键词on update, on delete来标识允许的级联操作有:cascade: 如果主表更新或者删除数据时,那么从表也会执⾏相应的操作set null: 如果主表更新或者删除数据时, 那么从表相应的数据会设置成nullrestrict: 拒绝主表的操作(默认)/*删除主表信息时,从表相应的字段设置为null(该字段定义时能为null)*/Alter table student add foreign key (class_id) references class (class_id) On delete set null/*主表执⾏删除或更新时,从表执⾏同样的操作*/alter table student add foreign key (class_id) references class (class_id) on delete cascade on update cascade。
管理信息系统课件之实体关系分析
数据库技术
DDL(Data Definition Language,数据定义语言): 用于定义 数据的结构,比如 创建、修改或者删除数据库; CREATE TABLE DROP TABLE CREATE INDEX DROP INDEX DCL(Data Control Language,数据控制语言):用于定义数据 库用户的权限。 ALTER PASSWORD
S2 S2
T1
T2
T3
T4
T5
W1
W2
W3
关系模型:用二维表结构表示。
结算编码 J0012 J0043 合同号 HT1008 HT1109 数量 2 000 600 金额 50 000 13 000
J0033
GT1123
2 300
6 000
数据库技术
面向对象模型:用对象和类来表示实体类型和实体间联系的数据 模型 。
3、关系的规范化(在下节详细介绍)
(四)数据库设计
1、信息的转换 2、数据库设计的步骤 (1)对现实世界进行需求分析 (2)建立信息世界中E-R(概念)模型 (3)从E-R图导出计算机世界的关系数据模型
3、数据库设计案例: (1)“教学管理”数据库模型的设计; (2)“库存管理”数据库模型的设计。(由同学自己完 成)
案例1:“教学管理”E-R图
系
1
分配
m
学院评估
教师
m
成绩
学生
m
授课班评估
教学
n n
学习Βιβλιοθήκη 课程根据“教学管理”E-R图转化成关系模型如下:
(实体)系(系代号,系名称,系主任姓名,办公地址, 电话) (实体)教师(教师编号,教师姓名,专业特长,系代号) (实体)学生(学号,姓名,性别,年龄,系代号) (实体)课程(课程号,课程名,学分) (联系)学习(学号,课程号,成绩) (联系)教学(教师号,课程号,授课班级评估,学院评 估)
第4章 实体关系
维护一对一关系 - 2
Inventory inventory = entityManager.find(Inventory.class, 1); Product product = entityManager.find(Product.class, 100); Inventory.setProduct(product); product.setInventory(inventory); • 当执行完Inventory.setProduct(product)后,只是修改了库存信息对应的 产品,但是product中引用的仍然是原先的库存信息 • 如果后续代码需要使用这个product变量中的库存信息,则得到的是一个 错误的引用 • 因此,应该手动执行product.setInventory(inventory),从而将关系双方都 修改为正确的数据 • 如果确定在执行完Inventory.setProduct(product)后不会再使用product变 量中的库存信息,则可以不再设置product中的inventory
维护一对一关系 - 1
• 基于外键的一对一关系:
Inventory inventory = entityManager.find(Inventory.class, 1); Product product = entityManager.find(Product.class, 100); Inventory.setProduct(product); // 修改关联的产品为 是100的产品 修改关联的产品为id是 的产品 Inventory inventory = entityManager.find(Inventory.class, 1); Product product = entityManager.find(Product.class, 100); // 下属代码无法修改成功,因为 下属代码无法修改成功,因为Product不是关系拥有方,无法修改关联关系 不是关系拥有方, 不是关系拥有方 product.setInventory(inventory); // 修改关联的库存信息为 是1的库存信息 修改关联的库存信息为id是 的库存信息
第7章 实体-联系(E-R)模型
联系:指对象之间的相互关联。
属性:用来描述实体和联系。每个属性都与一组数值的集合相对 应,属性的取值均来自该集合。
约束:对实体、联系和属性的约束。
7.1 E-R模型的基本概念
7.1.1 实体 实体是现实世界中独立存在的、可区别于其他对象的“对象”或“事物”。实 体是关于被收集的信息的主要数据对象。一个实体可以是物理存在的对象,如 人、汽车、商品、职工等;也可以是抽象存在的对象,如公司、企业、工作或感 兴趣的信息事件。每个实体都具有一组属性。下面是实体的一些例子。 人:学生,病人,医生,职工,工程师。 事件:研讨班,销售,比赛。 物体:建筑物,汽车,机器,家具。 在E-R模型中,实体是存在于用户业务中抽象且有意义的事物。这些事物被模式 化成可用属性描述的实体。实体之间存在多种联系。 1. 实体 实体(或实体集)是一组具有相同特征或属性的对象的集合。E-R模型中,相似的 对象被分到同一个实体中。实体可以包含物理(或真实)存在的对象,也可以包含 概念(或抽象)存在的对象。每个实体用一个实体名和一组属性来标识。一个数据 库通常包含许多不同的实体,实体的一个实例表现为一个具体的对象,比如一个 具体的学生。E-R模型中的“实体”对应关系中的一张表,实体的实例对应表中
本章将主要介绍E-R模型的一些扩展知识,并在最后说明了E-R模型 存在的一些问题。
主要内容
7.1 E-R模型的基本概念 7.2 E-R模型存在的问题 7.3 E-R图符号 7.4 小结
主要内容
7.1 E-R模型的基本概念 7.2 E-R模型存在的问题 7.3 E-R图符号 7.4 小结
7.1 E-R模型的基本概念
7.1 E-R模型的基本概念
属性可以分为以下几类:简单属性、复合属性、单值属性、多值属性、派生属 性。下面分别介绍几类属性。
实体关系模型概念
3.多对多的关系: 多对多的关系: 多对多的关系
在关联式资料库中的表示: 员工资料表和计划资料是多对多的参与关联, 而这多对多的参与关联又可以形成参与资料 表如下图。 6号员工吴吉雄参与了1号计划(八寸晶圆量 产)和2号计划(十二寸晶圆量产计画) 而八寸晶圆计划也有员工周德璋参与,而十 二寸晶圆计划也是一样。因此员工和计画资 料表形成了多对多的参与关系,而这关系我 们用参与资料表来代表。
实体与属性
实体与属性
在这边员工是实体,而员工编号、地址、姓名、电 话、性别、薪水、员工所在的部门编号则是员工的 属性,因为员工编号为独一无二的,唯一的,每一 个员工都有不同的员工编号,所以员工编号是键值 属性。 这是员工资料表,每一位员工的员工编号都不同。 每一个员工的资料列都是一个实体,每一个员工都 有员工编号,性别、地址与薪水、和所在的部门, 这些就是员工的属性。 在关联式资料库中,我们称每一笔资料为资料列, 而将属性称为栏位。 在实体关系模型中,我们将每一笔资料当作是实体 集的一部份,而实体的组成则为属性用称为栏位。
3.多对多的关系: 多对多的关系: 多对多的关系
4.部份参与或全部参与关系: 部份参与或全部参与关系: 部份参与或全部参与关系
4.部份参与或全部参与关系: 部份参与或全部参与关系: 部份参与或全部参与关系
员工资料与部门有著一对一的管理关系,也就是一个部 门会有一个员工当主管。 在上图中部份员工不是管理者所以并没有参与关联而部 门则是全部参与,也就是只要有部门就会有主管的员工。 实体二完全参与关系用双实线来表示;而实体一则是部 份参与关系用单一线条表示。 在员工管理部门的关系上,E员工并不是管理者,所以 它并没有参与管理关系;而在部门则是全部参与管理关 系,如上图的d1、d2、d3、d4、d5
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
时间:6学时 教学方法:PPT讲解、示 例讲解、练习
20
4.5.1 单向多对多关联(了解)
•
单向关联映射:
<class name="com.neusoft.entity.TCategory" table="t_category"> <id name="id" column="category_id" type="ng.Long"> <generator class="native"/> </id> <property name="name" column="category_name" type="ng.String"/> <set name="items" table="t_category_item" cascade="save-update" > <key column="category_id"/> <many-to-many class="com.neusoft.entity.TItem" column="item_id"/> </set> </class> <class name="com.neusoft.entity.TItem" table="t_item"> <id name="id" column="item_id" type="ng.Long" > <generator class="native"/> </id> <property name="name" column="item_name" type="ng.String"/> </class>
参见例子工程:hibernate_04_02_m2o
10
第四章:实体关联
实体关联:
4.1 实体关联
4.2 单向多对一关联 4.3 单向一对多关联 4.4 双向一对多关联 4.5 多对多关联 4.6 一对一主键/外键关联 4.7 实体关联的常见问题
时间:6学时 教学方法:PPT讲解、示 例讲解、练习
18
4.4.2 双向关联的关系维护
•
哪一端维护关联关系 – inverse = “true” – 由双向关联另一方维护该关联,己方不维护该关联(只能进行 查询操作)。
19
第四章:实体关联
实体关联:
4.1 实体关联
4.2 单向多对一关联 4.3 单向一对多关联 4.4 双向一对多关联 4.5 多对多关联 4.6 一对一主键/外键关联 4.7 实体关联的常见问题
13
4.3.2 持久化的传播
•
对于Hibernate的实体关联,对实体对象进行的持久化操作(如 :save、delete),可以传播到关联的引用对象,称为级联。 级联的方式通过cascade属性设置,主要有以下几种值 – none:默认值,告诉Hibernate忽略关系 – save-update:当进行save或update时关联 – delete:当进行delete时关联 – all:进行save、update、delete时都关联 – all-delete-orphan:与all类似,此外,删除任何已经从关联 删除的持久化对象 – delete-orphan:删除任何已经从关联删除的持久化对象
时间:6学时 教学方法:PPT讲解、示 例讲解、练习
8
4.2.1 单向多对一关联
•
类图
CM2O_Student -id: int -name: String -email: String -trainingClass: CM2O_Class
CM2O_Class * 1 -id: int -name: String
17
4.4.1 双向一对多关联的实现
• 映射配置
<class name="com.neusoft.entity.C_Class" table="c_class"> <id name="id" column="class_id" type="ng.Long" > <generator class="native"/> </id> <property name="name" column="class_name" type="ng.String"/> <set name="students" cascade="delete" outer-join="true"> <key column="class_id"/> <one-to-many class="com.neusoft.entity.CS_Student"/> </set> </class> <class name="com.neusoft.entity.CS_Student" table="cs_student"> <id name="id" column="student_id" type="ng.Long"> <generator class="native"/> </id> <property name="name" column="student_name" type="ng.String"/> <property name="email" column="email" type="ng.String"/> <many-to-one name="trainingClass" class="com.neusoft.entity.C_Class" column="class_id" outer-join="true"/> 参见例子工程:hibernate_04_04_o2m2 </class>
4
4.1.3 类的单向关联
CM2O_Student -id: int -name: String -email: String -trainingClass: CM2O_Class CM2O_Class * 1 -id: int -name: String
CO2M_Class -id: int -name: String -students: Set<CO2M_Student> *
11
4.3.1 单向一对多关联
•
类图
CO2M_Class -id: int -name: String -students: Set<CO2M_Student> *
CO2M_Student -id: Integer -name: String -email: String
1
12
4.3.1 单向一对多关联的实现
3
4.1.2 无关联的实体
•
类图
CNA_Student CNA_Class -id: Integer -name: String -id: Integer -name: String -email: String -classId: Integer
参见例子工程:hibernate_04_01_no_relate
6
4.1.5 Hibernate中实体的关联
•
无关联关系 – 对象的关联关系通过编写代码维护 关联 – 单向 – 双向 Hibernate关联 – 自动检索关联的对象(数据) – 以面向对象的方式维护关联关系 – 可持久化关联的对象
•
•
7
第四章:实体关联
实体关联:
4.1 实体关联
4.2 单向多对一关联 4.3 单向一对多关联 4.4 双向一对多关联 4.5 多对多关联 4.6 一对一主键/外键关联 4.7 实体关联的常见问题
时间:6学时 教学方法:PPT讲解、示 例讲解、练习
16
4.4.1 双向一对多关联
•
类图
CM2O2_Class -id: int -name: String -students: Set<CM2O2_Student> 1 *
CM2O2_Student -id: int -name: String -email: String -trainingClass: CM2O2_Class
9
4.2.1 单向多对一关联实现
• 映射配置
<class name="com.neusoft.entity.C_Class" table="c_class"> <id name="id" column="class_id" type="ng.Long" > <generator class="native"/> </id> <property name="name" column="class_name" type="ng.String"/> </class> <class name="com.neusoft.entity.CS_Student" table="cs_student"> <id name="id" column="student_id" type="ng.Long"> <generator class="native"/> </id> <property name="name" column="student_name" type="ng.String"/> <property name="email" column="email" type="ng.String"/> <many-to-one name=“classObject” column=“class_id” class=“com.neusoft.entity.C_Class” not-null=“true” cascade="save-update" /> </class>