二、数据模型
二、数据模型
数据模型回顾
-
数据模型(Data Model)
- 是信息领域采用的模型
- 将现实世界的各种事物以及事物之间的联系,表示为数据以及数据之间的联系
- 是对现实世界数据特征的抽象和模拟
- 用来描述数据、组织数据和操作数
- 是数据库系统的核心和基础
说明:数据模型主要分为三类:概念数据模型、基本数据模型、物理数据模型
-
概念数据模型(概念模型)
- 作用:描述现实世界中的实体、属性、关系,用于需求分析阶段。
- 常用表示方法:实体-关系模型(E-R模型)
- 面向:系统分析员、数据库设计人员,用于设计数据库的整体结构。
-
基本数据模型(数据模型)
- 作用:描述数据库在**数据库管理系统(DBMS)**中的结构和操作方式
- 这是数据库系统内使用的核心模型,它定义了数据在数据库中的组织方式。
基本数据模型细分为
类型 描述 层次数据模型 数据呈“树形结构”,如早期的 IBM IMS 系统。每个子节点只能有一个父节点。 网状数据模型 类似网状结构,节点间可有多个连接,关系复杂。 关系数据模型 用“表格”来表示数据,是目前最主流的数据模型,如 MySQL ,Oracle。 面向对象数据模型 将对象和类引入数据库,支持封装、继承等面向对象特性,常用于复杂应用。 -
物理数据模型(Physical Data Model)
- 描述数据如何在磁盘等物理介质上存储,是最底层的数据模型。
- 包括:也结构、索引结构、记录存储方式等。
- 与操作系统、硬件关系密切,由 DBA 设计与优化
-
数据模型的三要素:
这三要素适用于上述每一个基本数据模型:
要素 说明 数据结构 描述数据的组织形式(如表、树、图) 数据操作 描述能对数据执行的操作(如增删改查) 数据完整性约束 约束数据的合法性(如主键唯一、外键关联、非空等)
-
在数据库中使用数据模型来抽象、表示和处理现实世界中的数据和信息。
-
基本过程—两步抽象
- 把现实世界中的客观对象抽象为概念模型;
- 把概念模型转换为某一DBMS支持的数据模型;
主要内容
介绍具体的数据模型
- E-R概念模型
- 层次数据模型
- 网状数据模型
- 关系数据模型
- 面向对象数据模型
2.1 E-R概念模型
- 概念模型
- 也称信息模型
- 是按用户的观点对数据和信息建模
- 是现实世界到信息世界的抽象表示
- 信息
- 客观世界中存在的事物在人们头脑中的反应,人们把这种反应用文字、图形等形式记录下来,经过命名、整理、分类就形成了信息。
- 概念模型的用途
- 用于信息世界的建模
- 用于数据库设计,是数据库设计的有力工具
- 是现实世界到机器世界的一个中间层次
- 数据库设计人员和用户之间进行交流的语言
- 概念数据模型的基本要求
- 较强的语义表达能力,能够方便、直接地表达应用中的各种语义知识;
- 简单、清晰、易于用户理解。
- 最常用的概念模型
- 实体-联系模型(Entity-Relationship data model,E-R模型)
- 实体
- 属性
- 实体之间的联系
- 实体-联系模型(Entity-Relationship data model,E-R模型)
E-R模型的基本概念
-
实体(Entity)
- 表示客观存在的可以相互区别的事物。
- 可以是具体的对象,如一个学生、一本书、一辆汽车。
- 也可以是抽象的概念或联系,如一堂课、一次比赛等。
- 实体用特征来描述,如学生可以用姓名、性别、年龄来表征。
- 实体是指现实世界存在的个体,具有同类特征的个体的集合形成一个实体集(Entity Set)。比如所有学生组成“学生实体集”
- 实体集用实体名和表征实体的多个特征的集合来描述,其描述称为实体的“型”(Entity Type)。
- 实体集中的每个实体称为实体型的值或实例。
-
属性(Attribute)
-
实体所具有的某一特征称为属性;
-
一个实体可以由若干个属性来刻画;
如:学生有学号、姓名、性别、年龄、系等方面的属性。
-
属性有“类型”和“值”之分
- “类型”为属性名,如姓名、性别、年龄是属性的名称/种类;
- “值”为属性的具体内容,如(张三,男,20);
-
属性的取值范围称为属性的域(domain);如性别的域 = {男,女},年龄的域 = 所有自然数。
-
实体标识符:一个或一组用来区分实体集中每个实体的属性。例如:学号可以作为学生实体的标识符。简称:键(码)(Key);例如:“学号”可以作为学生实体的唯一标识,“身份证号”、“员工编号”也常作为 Key。
-
-
实体间的联系(Relationship)
-
在现实世界中
- 事物内部的联系
- 事物之间的联系
-
在信息世界(概念模型)中
-
实体内部的联系
是指组成实体的各属性之间的联系。
-
实体之间的联系
是指不同实体集之间的联系。
-
-
二元联系:两个实体集之间的联系
-
多元联系
-
一元联系
-
实体间联系的分类
- 两个实体集之间的三类联系
- 一对一的联系(1:1)
- 实体集A中的一个实体至多与实体集B中的一个实体相对应,反之亦然,则称实体集A与实体集B为一对一的联系。
- 记作(1:1)
- 示例:班级与班长之间的联系
- 一个班长只有一个正班长
- 一个班长只在一个班中任职
- 一对多的联系(1:n)
- 实体集A中的一个实体与实体集B中的多个实体相对应,反之,实体集B中的一个实体至多与实体集A中的一个实体相对应。
- 记作(1:n)
- 示例:班级与学生之间的联系
- 一个班级中有若干名学生,
- 每个学生只在一个班级中学习
- 多对多的联系(m:n)
- 实体集A中的一个实体与实体集B中的多个实体相对应;反之,实体集B中的一个实体与实体集A中的多个实体相对应。
- 记作(m:n)
- 示例:课程与学生之间的联系
- 一门课程同时有若干个学生选秀
- 一个学生可以同时选秀多门课程
左边是一对一,中间是一对多,右边是多对多
-
多个实体集也可以存在联系,称多元联系。
-
若规定:
- 一个供应商可供应多种零件给多个工程;
- 一个工程可由多个供应商供应多种零件;
- 一中零件可由多个供应商供应给多个工程。
-
供应商、零件和工程间存在着多对多的联系,表示为 m:n:p。
-
不同于多个实体两两之间的联系
-
-
实体集内部不同实体间的联系
-
一对多的联系
- 职工实体集内部具有领导与被领导的联系
- 某一职工(干部)“领导”若干名职工
- 一个职工仅被另一个职工直接领导
-
一对一的联系
- 夫妻关系
-
多对多的关系
- 朋友关系
-
E-R数据模型
-
概念模型的表示方法
- E-R模型,也称为E-R方法
- UML类图(软件工程、面向对象)
- …………
-
E-R模型
用E-R图表示现实世界中实体与实体间联系的模型
-
E-R图
里面有三种基本组成部分:
- 实体
- 联系
- 属性
-
实体
-
实体型用矩形表示,矩形框内写明实体名。
例如:
-
-
属性
-
用椭圆形表示,用属性名标注,并用无向边将其与相应的实体连接起来
例如:
-
-
联系
-
联系本身
用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体联系起来,同时在无向边旁标上联系的类型(1:1、1:n或m:n)。
-
联系的属性
联系本身也是一种实体型,可以有属性。如果一个联系具有属性,则这些属性也要用无向边与该联系连接起来。
-
-
联系的表示方法
-
联系表示方法示例
-
E-R图实例
——学生选课的E-R图
-
E-R模型中实体间联系的语义
-
基数比约束
如在二元联系中 1:1,1:n,m:n的联系
-
参与约束
根据实体集中的实体是否全部参与联系来描述实体参与联系的约束
- 一个实体集中的所有实体都参与联系称为完全参与,否则称为部分参与。
-
实体的参与度
实体参与联系的最小和最大次数,称实体的参与度
- 可以表示基数比约束和参与约束
-
-
联系的语义的示例
- 如果规定一个学生最少选修2门课,最多选修5门课,则学生在选课联系中的参与度是(2,5)
- 规定一门课至少有10个学生选秀,至多有60个学生选秀,则课程在选课联系中的参与度是(10,60)
-
弱实体
-
E-R模型中有一类特殊的实体,这钟实体的存在是依赖于其他实体而存在的,称这类实体为弱实体。
-
相对于弱实体,它所依赖的实体称为强实体。
-
弱实体不能脱离依赖实体而独立存在,全部参与联系,也就是说每一个弱实体必须参与某个与强实体的联系。
-
弱实体本身不一定具有标识属性。
-
在E-R模型中,弱实体用双框矩形表示;
为了表示全部参与,与菱形框间用双线连接。
-
-
弱实体示例
-
在学生管理信息中,学生实体与家长实体之间存在着“所属”关系,家长实体是不能脱离学生实体而独立存在的,成为弱实体。
-
-
子类实体
-
在扩展E-R数据模型中增加了子类和超累的概念,使E-R数据模型具有了更多的语义。
-
将实体集根据个体的不同特性分为多个子集,由此产生了子类实体。(子类和超类)
-
子类使根据个体的不同特征进行特殊化的结果;
超类使对不同实体集的共同特征的概括。
-
子类可以超类的所有属性,也可以继承超类的联系。
-
子类可以有自己的联系。
-
子类的表示方法参见示例。
-
-
子类实体示例
-
学校的职工,按照不同工作的特点可以分为教师、实验人员和机关工作人员等。他们除具有共同的特性如名字、年龄、性别外,还有各自的不同特性。
职工就是超类,下面的教师、实验员、机关工作人员就是子类。
-
E-R模型示例
-
教务管理(示例1)
里面有以下实体
- 学院
- 职工
- 学生
- 家长
- 课程
- 教科书
- 教师
- 实验员
- 机关工作人员
-
教务管理实体之间的联系
- 一个学院有若干名职工,一个职工仅在一个学院工作,学院与职工间是1:m的联系;
- 一个学院有若干名学生,一名学生仅在一个学院学习,学院和学生之间是1:m的联系;
- 一个学生可以选秀多门课,一门课可供若干学生选修,学生与课程之间是m:n的联系;
- 一个学生有一位家长联系,一位家长对应一个学生,学生与家长间是1:1的联系;
- 一个教师可以讲授多门课,在讲授某门课时同时确定所用教材;一门课可以有多个授课老师,不同教师可以用不同的教材;一种教材可用于多门课且被不同的教师选在。教师、课程、教科书之间存在p:m:n的联系。
-
物资管理(示例2)
-
基本实体:仓库、零件、供应商、项目、职工
-
基本联系:
- 一个仓库可以存放多种零件,一种零件可以存放在多个仓库中;
- 一个仓库有多个职工当仓库保管员,一个职工只能在一个仓库工作;
- 职工之间具有领导与被领导的关系:即仓库主任领导若干保管员
- 一个供应商可以供给若干项目多种零件,每个项目可以使用不同供应商供应的零件,每种零件可有不同供应商供给。
-
E-R模型小结
- E-R模型被广泛地用于数据库概念模型的设计;
- 在E-R图中仅表示现实世界中的信息结构及信息之间的关系,不涉及任何信息在计算机中的表示;
- 只要用户的需求不变,E-R模型是稳定的;
- 运用E-R模型,可以很方便地将其转换为具体的DBMS所支持的数据模型
2.2 层次数据模型
-
层次数据模型是数据库系统中最早出现的数据模型,典型代表是1968年IBM推出的IMS。
-
现实世界中,许多实体之间的联系都表现出一种很自然的层次关系,如家族关系,行政机构等。
-
层次模型能很好地模拟自然的层次关系。
-
层次模型采用树形结构表示各类实体以及实体间的联系。
- 有且只有一个结点没有双亲结点,这个结点称为根结点;
- 根以外的其它结点有且只有一个双亲结点。
- 除此之外,还有子女结点、兄弟结点、叶结点
-
层次模型的表示方法
- 实体:用记录类型描述,每个结点表示一个记录类型。记录类型(Record Type)就是对某类数据项结构的一种整体定义,它由一组有序的字段(字段名+字段类型)组成。
- 属性:用字段描述,每个记录类型可包含若干个字段(field)。字段是指数据中表格或记录中的一个数据项,它用于存储某种特定类型的信息,通常也被称为属性或列。
- 联系:用结点之间的连线表示**记录类型(实体)**之间的一对多的联系(包括一对一的联系)。
-
层次模型的就基本数据结构
- 记录:存取数据的基本单位,由若干字段组成。
- 由记录组成的层次结构
-
若干记录(类)型按照层次结构组织成一个层次数据库模式。
-
一个层次数据库模式可以有多个实例,每个实例是一棵值树。
-
一个层次数据模式的所有实例组成一个层次数据库。
层次模型示例
- 每个结点表示一个记录类型
- 结点之间是父子关系
- 数据组织为单根树结构
说明:
图中元素 | 属于 | 专业术语解释 |
---|---|---|
学院 | 记录类型 | 学院是顶层记录类型,包含多个班级和教研室 |
班级 | 记录类型 | 学院的下级记录类型,是学生的父记录 |
教研室 | 记录类型 | 学院的下级记录类型,是教师的父记录 |
学生 | 记录类型 | 最底层记录类型,描述学生的详细数据 |
教师 | 记录类型 | 最底层记录类型,描述教师的详细数据 |
每个记录类型都是由若干字段组成的:
例如学生(记录类型)的字段如下:
字段名 | 字段类型 |
---|---|
学号 | CHAR(10) 或INT |
姓名 | VARCHAR(20) |
年龄 | INT |
性别 | CHAR(1) |
班级编号 | CHAR(6) |
层次数据库模式示例
这就是由上一张(学院、班级、课程、学生、教师)构成的层次数据库模式
整体结构说明:
- 根节点:
D
:表示 学院(Deparment)- 包含字段
D#
(编号)、DN
(院名)、DEAN
(院长)
- 包含字段
- 子结点1:
C
:表示 班级(Classroom)- 有字段
C#
(班级编号)、SP
(专业) - 属于某个学院
D
(通过指向箭头)
- 有字段
- 子结点2:
T
:表示 教研室(Teaching Section)- 有字段
T#
(教研室编号)、TNAME
(教研室名) - 也属于某个学院
D
- 有字段
- C下的子结点:
S
:表示 学生(Student)- 字段:
S#
(学号)、SN
(学生姓名)、SIX
(性别)、AGE
(年龄) - 属于某课程C
- 字段:
- T下的子结点:
E
:表示 教师(Employee)- 字段:
E#
(教师编号)、ENAME
(教师名)、TITLE
(职称) - 属于某教研室T
- 字段:
专业术语对应
元素 | 专业术语 | 说明 |
---|---|---|
D、C、T、S、E | 记录类型(Record Type) | 结构树中的结点,每个都表示一个实体类 |
D#、DN、S#、ENAME等 | 字段(Field) | 每条记录的属性字段 |
INT、CHAR、VARCHAR | 字段类型(Field Type) | 每个字段的数据类型(未标出但应存在) |
箭头 | 父子关系 | 层次模型中父记录到子记录的从属关系 |
层次数据库模式的实例
这则是比上一个示例更加详细,每一个实体类下面都有各自的实例。
层次模型的特点
- 结点的双亲是唯一的
- 只能直接处理一对多的实体联系
- 每个记录类型定义一个排序字段,也称为码字段
- 记录值只有按其路径查看时,才能显出它的全部意义
- 没有一个子女记录值能够脱离双亲记录值而单独存在
层次数据模型的数据操纵
- 查询
- 插入
- 删除
- 更新
层次模型的完整性约束
- 无相应的双亲结点值就不能插入子女结点值
- 删除双亲结点值时相应子女结点值也被同时删除
层次模型的存储结构
-
邻接法
按照层次树谦虚遍历的顺序把所有记录纸依次邻接存放,即通过物理空间的位置相邻来实现层次顺序
-
链接法
用指针来反映数据之间的层次联系
多对多联系在层次模型中的表示
用层次模型间接表示多对多联系,即将多对多联系分解成一对多联系。
-
冗余结点法:存在数据的不一致问题
-
虚拟结点法:引入虚拟指针,增加系统开销
层次模型的优缺点
- 优点:
- 数据结构比较简单,清晰、自然、直观,容易理解
- 层次数据库的查询效率高
- 提供了良好的完整性支持
- 缺点
- 多对多联系表示不自然
- 对插入和删除操作的限制多
- 查询子女结点必须通过双亲结点
- 层次命令趋于程序化
2.3 网状数据模型
-
现实世界中事物之间的联系更多的是非层次关系的,用层次模型表示这种关系很不直观;网状模型可以清晰的表示这种非层次关系。
-
在网状模型,结点间的联系可以是任意的:
-
一个结点可以有多个双亲结点;
-
允许多个结点可以无双亲结点。
-
-
网状模型的典型代表
-
DBTG系统,亦称CODASYL系统
2015点24分70年代由DBTG(数据库任务组)提出的一个系统方案,非实际系统,C.W.Bachman,1973年图灵奖,数据库首个图灵奖,奠定了数据库系统的基本概念、方法和技术(三级模式)
-
-
实际系统
- Cullinet Softwar公司的 IDMS
- Univac公司的 DMS1100
- Honeywell公司的IDS/2
- HP公司的IMAGE
-
网状模型的表示方法(与层次模型相同)
- 实体:用记录类型描述,每个结点表示一个记录类型。
- 属性:用字段描述,每个记录类型可包含若干个字段。
- 联系:用结点之间的连线表示记录(类)型之间的一对多的联系(包括一对一的联系)。
-
网状模型(与层次模型的区别)
- 允许多个结点没有双亲结点
- 允许结点有多个双亲结点
- 允许两个结点之间有多种联系(复合联系)
- 联系可以不唯一
- 要命名每个联系,并指出双亲记录和子女记录
- 网状模型可以更直接地描述显示世界;描述结果是一个有向图。
- 层次模型实际上是网状模型的一个特例
-
网状模型示例
-
网状模型中联系的表示方法
- 联系比较复杂;
- 引入”系(Set)“的概念来表示联系;
- 系可以看成一个二级树,由一个父结点和多个子女结点组成,表示上下层之间的1:m的联系。
-
网状模型的系结构和模型实例
-
多对多联系在网状模型中的表示
-
间接表示多对多联系
-
方法:将多对多联系直接分解成一对多联系
-
-
网状模型的数据操纵与完整性约束
- 数据操纵与层次模型相同;
- 完整性约束与层次模型宽松;
- 允许插入尚未确定双亲结点值的子女结点值;
- 允许只删除双亲结点值;
- 具体的网状数据库系统都对数据操纵加了一些限制。
-
网状模型的优点
- 没有层次结构的显示,能够更好的模拟事物之间各种复杂的联系;
- 一般采用指针实现数据间的联系,存取效率较高。
-
网状模型的缺点
- 结构比较复杂;随着应用的扩大,数据库结构将越来越复杂,不容易掌握;
- 数据定义和数据操纵语言比较复杂,用户不容易使用;
- 访问数据时必须自行选择存取路径,复杂的导航机制,增加了程序编写的负担。
2.4 关系数据模型
- 目前数据库系统中应用最普遍的数据模型
- 关系模型的历史
- 1970年美国IBM公司的研究员E.F.Codd首次提出了数据库系统的关系模型。
- 他在”大型共享数据银行的数据关系模型“(A Relation Model of Data for Large Shared Data Banks)中解释了关系模型,定义了某些关系代数运算,研究了数据的函数相关性,定义了关系的第三范式;从而开创了数据库的关系方法和数据规范化理论的研究。他为此获得了1981年的图灵奖。
- 此后许多人把研究方向转到关系方法上,陆续出现了关系数据库系统。
- 1977年IBM公司研制的关系数据库的代表System R开始运行,其后又进行了不断的改进和扩充,出现了基于System T的数据库系统SQL/DB。
- 20世纪80年代以来,计算机厂商新推出的数据库管理系统几乎都支持关系模型,非关系系统的产品也都加上了关系接口。
- 关系数据库已成为目前应用最广泛的数据库系统,如现在广泛使用的小型数据库系统Foxpro、Access,大型数据库系统Oracle、Informix、Sybase、DB2、SQL Server、GaussDB、OceanBase等都是关系数据库系统。
- 1970年美国IBM公司的研究员E.F.Codd首次提出了数据库系统的关系模型。
关系模型的数据结构
-
在关系模型中,基本数据结构被限制为二维表,一张二维表称为一个关系。
例如:学术关系
关系模型的基本概念
-
关系(Relation)
- 一张二维表,由多个行和列组成。
- 一个关系可以用来描述一个实体集。
- 关系是数学上集合论中的一个概念,关系模型是以关系为基础发展起来的。
-
属性(Attribute)
- 一个关系有多个列,每一列称为关系的一个属性
- 如:学生关系中的学号、姓名、出生年月等
-
域(Domain)
- 属性的取值范围。
- 如:学号的域是7位字符数字的集合,学生姓名是汉字字符串的集合等
-
元组(tuple)
- 关系是元组的集合;
- 一个元组对应实体集中的一个个体;
- 一个元组由若干个分量组成,每个分量对应一个属性值。
- 在学生关系中,一个元组对应一个学生实体,学生实体是由6个分量组成的。
-
键(key)【码】
- 键是由一个或多个属性组成的,能够唯一标识一个元组。
- 一个关系中可能有多组属性能够起标识元组的作用。因而,一个关系中可能有多个键,选择其中的一个作为主键,,其余为候选键。
-
关系模式(relation schema)
-
对关系结构的描述称为关系模式。
-
关系模式可用如下形式表示:
-
关系名(属性名1,属性名2,……,属性名n)。
-
如学生关系可表示为:
学生(学号,姓名,出生年月,性别,入学年份,班级)
-
-
-
关系数据库模式
- 一组关系模式的集合
-
关系数据库
- 一组关系模式所对应的关系的集合。关系数据库 = 关系数据库模式 + 实际数据。
关系模型的表示方法
-
关系模型中基本的数据结构是单一的关系
-
实体和实体间的联系都用关系表示
- **实体(型):**直接用关系(表)表示
- **属性:**用属性名表示
- 实体间的联系
- 一对一联系:隐含在实体对应的关系中
- 一对多联系:隐含在实体对饮的关系中
- 多对多联系:直接用关系表示
-
关系模型示例
-
学生、课程、学生与课程之间的多对多联系
那么该图的关系数据库模式:
学生(学号,姓名,出生年月,性别,入学年份,班级);学号为主键
课程(课程号,课程名,学分,任课教师);课程号为主键
选秀(学号,课程号,成绩,备注);学号和课程号为外键
-
关系模型的规范条件
-
关系必须是规范化的,需满足一定的条件;
-
最基本的规范条件是:
关系的每一个分量必须是一个不可分的数据项。
-
下表不符合关系模型的要求
因为该图的工资,扣除是一个可分的数据项,工资可以再分为基本工资、岗位津贴、业绩津贴。
关系模型的完整性约束
-
为了维护数据库中的数据与现实世界的一致性,需要对数据施加一定的约束条件
- 实体完整性
- 参照完整性
- 用户自定义完整性
这些在后面章节(比如第三章,第七章)会详细介绍
关系模型的数据操纵
- 关系模型中,对关系中的数据可进行查询、插入、删除和修改操作;
- 在关系数据库系统中,对数据的全部操作都可以归结为对关系的运算;
- 对关系可以进行多种运算,运算结果形成一个新关系:操作对象和操作结果都是关系。
- 关系运算分为:关系代数和关系演算。
- 数据的存取对用户是透明的,——用户只要指出“做什么”,不比详细说明“怎么做”。
关系模型的优点
- 数据结构简单
- 建立在严格的数学概念的基础上
- 概念单一
- 实体和各类联系都用关系来表示
- 数据的检索结果也是关系
- 存取路径对用户透明
- 具有更高的数据独立性,更好的安全性
- 简化了编程工程和数据库开发建立的工作
关系模型的不足
- 存取路径对用户透明导致查询效率往往不如非关系数据模型;
- 为提高性能,必须对用户的查询请求进行查询优化,增加了开发数据库管理系统的难度;
- 语义比较贫乏,不能明确表示实体间的联系,难以描述复杂对象。
2.5 面向对象数据模型
-
20世纪80年代初提出来的
-
源于面向对象程序设计
-
数据库技术与面向对象程序设计方法学相结合的产物
-
数据结构不是记录,而是具有复杂结构的对象
-
有助于解决传统数据模型的不足
-
许多课题有待进一步研究
-
面向对象数据库系统支持的核心概念
- 对象
- 类
- 消息
- 方法
- 封装
- 继承
- 多态
-
类的层次结构
- 教员、行政人员、工人中只有本身的特殊属性和方法
- 同时它们又继承教职员工类和人的所有属性和方法
- 逻辑上它们具有人、教职员工和本身的所有属性和方法
本章小结
- 数据模型:
- 信息世界的概念模型
- 表示信息结构的模型,不涉及信息在计算机中的表示
- 常用的概念模型有实体-联系模型,即E-R模型。
- E-R模型可用于数据库设计的概念建模
- 数据库系统支持的数据模型
- 层次数据模型
- 网状数据模型
- 关系数据模型(重点,也是后面使用的数据库数据模型)
- 面向对象数据模型
- …………
- 信息世界的概念模型
型;
- 为提高性能,必须对用户的查询请求进行查询优化,增加了开发数据库管理系统的难度;
- 语义比较贫乏,不能明确表示实体间的联系,难以描述复杂对象。
2.5 面向对象数据模型
-
20世纪80年代初提出来的
-
源于面向对象程序设计
-
数据库技术与面向对象程序设计方法学相结合的产物
-
数据结构不是记录,而是具有复杂结构的对象
-
有助于解决传统数据模型的不足
-
许多课题有待进一步研究
-
面向对象数据库系统支持的核心概念
- 对象
- 类
- 消息
- 方法
- 封装
- 继承
- 多态
-
类的层次结构
[外链图片转存中…(img-DL5Au0dE-1747456206709)]
- 教员、行政人员、工人中只有本身的特殊属性和方法
- 同时它们又继承教职员工类和人的所有属性和方法
- 逻辑上它们具有人、教职员工和本身的所有属性和方法
本章小结
- 数据模型:
- 信息世界的概念模型
- 表示信息结构的模型,不涉及信息在计算机中的表示
- 常用的概念模型有实体-联系模型,即E-R模型。
- E-R模型可用于数据库设计的概念建模
- 数据库系统支持的数据模型
- 层次数据模型
- 网状数据模型
- 关系数据模型(重点,也是后面使用的数据库数据模型)
- 面向对象数据模型
- …………
- 信息世界的概念模型
相关文章:
二、数据模型
二、数据模型 数据模型回顾 数据模型(Data Model) 是信息领域采用的模型将现实世界的各种事物以及事物之间的联系,表示为数据以及数据之间的联系是对现实世界数据特征的抽象和模拟用来描述数据、组织数据和操作数是数据库系统的核心和基础 …...
获取淘宝店铺所有商品信息接口数据指南
在电商运营和数据分析中,获取淘宝店铺的商品信息是常见的需求。淘宝开放平台提供了丰富的 API 接口,方便开发者获取商品的详细信息,包括商品列表、商品详情、销量等。本文将详细介绍如何从零开始获取淘宝店铺的所有商品信息,包括注…...
目标检测工作原理:从滑动窗口到Haar特征检测的完整实现
目标检测探索指南 🔍 目标检测就像是一位细心的侦探!我们需要在图像中寻找并定位特定的目标,就像侦探在现场搜寻线索一样。让我们一起来探索这个充满挑战的图像处理领域吧! 目录 1. 什么是目标检测?2. 滑动窗口检测3.…...
【LUT技术专题】针对降噪优化的通道感知轻量级LUT算法:DnLUT
DnLUT:Ultra-Efficient Color Image Denoising via Channel-Aware Lookup(2025 CVPR) 专题介绍一、研究背景二、DnLUT方法2.1 Pairwise Channel Mixer2.2 Rotation Non-overlapping Kernel(L型卷积) 三、实验结果四、总…...
支持同步观看的媒体服务器GhostHub
简介 什么是 GhostHub ? GhostHub 是一个基于滑动界面的媒体服务器,旨在实现实时同步、聊天和隧道分享。它允许用户快速共享和浏览媒体内容,无需复杂的配置或帐户。 主要特点 零配置: 即开即用,无需安装或创建帐户。滑动浏览: 提…...
告别 pip:使用 uv 加速你的 Python 包管理
使用 uv:更快的 Python 包管理工具 随着 Python 生态的演进,包管理工具也在不断升级迭代。uv 是 Astral(同样维护 ruff 的团队)推出的下一代 Python 包与项目管理器,主打 单一可执行文件、极致性能,可在多数场景下取代 pip、pip-tools、pipx 与 virtualenv 等传统工具,…...
使用glsl 来做视频矫正
描述、优点 使用glsl来代替opencv的undistort 和 鱼眼矫正,并且最后使用opencv的LUT给glsl 来使用,来达到加速的目的,并且做到和opencv 一模一样的效果,达到实时视频的加速矫正。 优点: 没有cuda,也可以做到实时视频矫正,包含各类板子和amd的cpu,intel核显 矫正的基本作…...
【VSCode】快捷键合集(持续更新~)
一、基础编辑操作 注释/取消注释 Ctrl /:快速注释或取消注释当前行或选中行。ctrlshift/:块注释 代码格式化 • Shift Alt F:格式化整个文档,统一代码风格。 行操作 • Alt ↑/↓:向上/向下移动当前行。 • Shi…...
MATLAB学习笔记(七):MATLAB建模城市的雨季防洪排污的问题
使用 MATLAB 对城市雨季防洪排污问题进行建模与仿真,需要结合数学模型、工程经验和 MATLAB 的数值计算、数据可视化及优化工具。以下是详细的步骤指南,包含实际案例和代码示例: 一、问题分析与建模框架 1. 问题拆解 • 核心目标: …...
由浮点数x的位级表示求其整型值
由浮点数x的位级表示,得到浮点数的十进制表示,在超过32位整型数的表示范围时,返回0X80000000;在32位整型数的表示范围内时,返回强制转化为整型的值。舍入时采用向0舍入。 程序代码 typedef unsigned long int float_…...
【Qt】Qt常见控件的相关知识点
1.close退出槽函数 2.设置快捷键,QMenu 。 适用&字母就能设置快捷键,运行qt程序,最后就可以按Alt对应的字母进行快捷操作。 3.QMenuBar内存泄露问题 如果ui已经自动生成了menubar,我们再次生成一个新的菜单栏,而…...
数据结构*优先级队列(堆)
什么是优先级队列(堆) 优先级队列一般通过堆(Heap)这种数据结构来实现,堆是一种特殊的完全二叉树,其每个节点都满足堆的性质。如下图所示就是一个堆: 堆的存储方式 由于堆是一棵完全二叉树,所以也满足二…...
Windows本地化部署Dify完整指南
Windows本地化部署Dify完整指南 作者:朱元禄 版权声明:本文为朱元禄原创文章,转载请注明出处及作者信息 关键词:Dify部署,Windows安装Dify,Dify本地化,Dify教程,Dify配置,朱元禄 一、Docker Desktop安装与配置 1.1 下载Docker De…...
全局异常处理:如何优雅地统一管理业务异常
在软件开发中,异常处理是保证系统健壮性的重要环节。一个良好的异常处理机制不仅能提高代码的可维护性,还能为使用者提供清晰的错误反馈。本文将介绍如何通过全局异常处理和业务异常统一处理来编写更加优雅的代码。 一、传统异常处理的痛点 1.1 典型问…...
AI517 AI本地部署 docker微调(失败)
本地部署AI 计划使用OLLAMA进行本地部署 修改DNS 访问github 刷新缓存 配置环境变量 OLLAMA安装成功 部署成功 计划使用docker进行微调 下载安装docker 虚拟化已开启 开启上面这些 准备下载ubuntu docker ragflow dify 用git去泡...
C++(初阶)(十八)——AVL树
AVL树 AVL树概念实现AVL树的结点插入插入方法 平衡因子更新更新停止条件旋转右单旋左单旋左右双旋右左双旋 遍历AVL平衡检测 完整代码 概念 1,AVL树是最先发明的⾃平衡⼆叉查找树,AVL树是⼀颗⾼度平衡搜索⼆叉树, 通过控制高度差去控制平衡。…...
2022河南CCPC(前四题)
签到题目 #include <bits/stdc.h> using namespace std; #define int long long #define PII pair<int,int> #define fi first #define se second #define endl \n #define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);void solve() {int n;cin>>…...
【滑动窗口】LeetCode 1658题解 | 将 x 减到 0 的最小操作数
将 x 减到 0 的最小操作数 一、题目链接二、题目三、题目解析四、算法原理五、编写代码六、时空复杂度 一、题目链接 将 x 减到 0 的最小操作数 二、题目 三、题目解析 以示例1为例: 四、算法原理 像"题目解析"中正面删除并修改数组元素的操作太困难&…...
电机试验平台:创新科技推动电动机研究发展
电机试验平台是电机制造和研发过程中不可或缺的重要设备,其功能涵盖了电机性能测试、电机寿命测试、电机质量评估等多个方面。随着科技的不断发展和电机应用领域的日益扩大,对电机试验平台的要求也越来越高。本文将从现代化电机试验平台的设计与应用两个…...
linux-软件的安装与部署、web应用部署到阿里云
一、软件安装方式概述 CentOS安装软件的方式主要包括: - 源码安装 - rpm安装(二进制安装) - yum安装(在线安装) 1.源码安装: 源码包是指C等语言所开发的源代码文件的一个压缩包,通常压缩为.…...
Qt Widgets模块功能详细说明,基本控件:QLabel(一)
一、基本控件(Widgets) Qt 提供了丰富的基本控件,如按钮、标签、文本框、复选框、单选按钮、列表框、组合框、菜单、工具栏等。 1、QLabel 1.1、概述 (用途、继承关系) QLabel 是 Qt 框架中用于显示文本、图像或动画的控件,属…...
Ubuntu 安装 squid
1. 安装Squid及工具 Debian/Ubuntu sudo apt update sudo apt install squid apache2-utils CentOS/RHEL sudo yum install squid httpd-tools 2. 创建用户名密码文件 创建密码文件(首次使用 -c 参数,后续添加用户省略) sudo htpasswd…...
中药药效成分群的合成生物学研究进展-文献精读130
Advances in synthetic biology for producing potent pharmaceutical ingredients of traditional Chinese medicine 中药药效成分群的合成生物学研究进展 摘要 中药是中华民族的文化瑰宝,也是我国在新药创制领域的重要驱动力。许多中药材来源于稀缺物种…...
芯片生态链深度解析(三):芯片设计篇——数字文明的造物主战争
【开篇:设计——数字文明的“造物主战场”】 当英伟达的H100芯片以576TB/s显存带宽重构AI算力边界,当阿里平头哥倚天710以RISC-V架构实现性能对标ARM的突破,这场围绕芯片设计的全球竞赛早已超越技术本身,成为算法、架构与生态标准…...
Echart地图数据源获取
DataV.GeoAtlas地理小工具系列 选择需要的区域地图,选中后输出即可: 地图钻取代码 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>map</title><style>html, body, #map{margin: 0;…...
【C++ - 仿mudou库one thread one loop式高并发服务器实现】
文章目录 项目介绍项目模块和服务器主要设计模式项目主要流程前置知识1.bind函数2.定时器任务TimerTask和时间轮思想TimerWheel3.正则表达式4.通用型容器Any类 服务器设计模式1)单Reactor单线程模式2)单Reactor多线程模式3)多Reactor多线程模…...
本地缓存更新方案探索
文章目录 本地缓存更新方案探索1 背景2 方案探索2.1 初始化2.2 实时更新2.2.1 长轮询2.2.1.1 client2.2.2.2 server 本地缓存更新方案探索 1 背景 大家在工作中是否遇到过某些业务数据需要频繁使用,但是数据量不大的情况,一般就是几十条甚至几百条这种…...
Java—异常体系
Java的异常体系是Java语言中用于处理程序运行过程中可能出现的错误的机制。通过异常处理,程序可以在遇到问题时自动反馈,从而避免程序崩溃。Java异常体系中包含两大类:错误(Error)和异常(Exception)。 一、错误(Error)…...
深度学习(第3章——亚像素卷积和可形变卷积)
前言: 本章介绍了计算机识别超分领域和目标检测领域中常常使用的两种卷积变体,亚像素卷积(Subpixel Convolution)和可形变卷积(Deformable Convolution),并给出对应pytorch的使用。 亚像素卷积…...
5.15 学习日志
1.SST(总平方和)、SSR(回归平方和)、SSE(残差平方和)之间的关系。 在使用线性回归模型时,经常提到的统计量MSE(Mean Squared Error、均方误差):是 SSE 的平均…...
重排序模型解读:gte-multilingual-reranker-base 首个GTE系列重排模型诞生
模型介绍 gte-multilingual-reranker-base 模型是 GTE 模型系列中的第一个 reranker 模型,由阿里巴巴团队开发。 模型特征: Model Size: 306MMax Input Tokens: 8192 benchmark 关键属性: 高性能:与类似大小的 reranker 模型…...
计算机发展的历程
计算机系统的概述 一, 计算机系统的定义 计算机系统的概念 计算机系统 硬件 软件 硬件的概念 计算机的实体, 如主机, 外设等 计算机系统的物理基础 决定了计算机系统的天花板瓶颈 软件的概念 由具有各类特殊功能的程序组成 决定了把硬件的性能发挥到什么程度 软件的分类…...
【通用智能体】Search Tools:Open Deep Research 项目实战指南
Open Deep Research 项目实战指南 一、项目运行方式(一)运行环境要求(二)运行方式(三)传统本地运行(四)Docker 容器运行 二、操作步骤(一)使用搜索功能&#…...
nodejs 文件的复制
在 Node.js 中,文件复制操作可以通过多种方式实现,具体取决于文件大小、性能需求以及是否需要保留文件元数据(如权限、时间戳等)。以下是几种常见的文件复制方法及其示例代码: 1. 使用 fs.copyFile(简单高…...
GO语言学习(三)
GO语言学习(三) GO语言的独特接口可以实现内容和面向对象组织的更加方便,我们从这里来详细的讲解接口,让大家感受一下interface的魅力 interface定义 首先接口是一组方法签名的组合,我们通过接口来实现定义对象的一…...
高频面试题(含笔试高频算法整理)基本总结回顾61
干货分享,感谢您的阅读! (暂存篇---后续会删除,完整版和持续更新见高频面试题基本总结回顾(含笔试高频算法整理)) 备注:引用请标注出处,同时存在的问题请在相关博客留言…...
C++:C++内存管理
C 内存分区 C 内存分为 5 个主要区域: 栈 (Stack):存储局部变量、函数参数和返回地址。由编译器自动分配和释放,效率高但空间有限。 堆 (Heap):动态分配的内存区域,需手动管理(new/delete 或 malloc/free…...
目标跟踪相关综述文章
文章年份会议/引用量IFObject tracking:A survery20067618Object Tracking Methods:A Review2019554Multiple object tracking: A literature review20201294Deep learning for multiple object tracking: a survey2019145Deep Learning for Visual Tracking:A Comprehensive S…...
JavaScript【6】事件
1.概述: 在 JavaScript 中,事件(Event)是浏览器或 DOM(文档对象模型)与 JavaScript 代码之间交互的一种机制。它代表了在浏览器环境中发生的特定行为或者动作,比如用户点击鼠标、敲击键盘、页面…...
Python训练打卡Day26
函数专题1:函数定义与参数 知识点回顾: 函数的定义变量作用域:局部变量和全局变量函数的参数类型:位置参数、默认参数、不定参数传递参数的手段:关键词参数传递参数的顺序:同时出现三种参数类型时 到目前为…...
通俗版解释CPU、核心、进程、线程、协程的定义及关系
通俗版解释(比喻法) 1. CPU 和核心 CPU 一个工厂(负责干活的总部)。核心 工厂里的车间(比如工厂有4个车间,就能同时处理4个任务)。 2. 进程 进程 一家独立运营的公司(比如一家…...
微积分基本规则及示例解析
微积分中的基本规则是构成微积分理论和应用的基石。以下是一些微积分中的基本规则,我将用简单的例子来解释它们,以便小学生也能理解。 1. **极限规则**: - 常数的极限:\(\lim_{x \to a} c c\) - 例如,\(\lim…...
Baklib知识中台构建企业智能服务新引擎
知识中台构建智能服务新范式 随着企业数字化转型进入深水区,传统知识管理模式的局限性日益显现——分散的文档系统、低效的信息检索以及割裂的业务场景,严重制约着组织效能的释放。在此背景下,Baklib提出的知识中台解决方案,通过…...
Python实例题:Python百行制作登陆系统
目录 Python实例题 题目 python-login-systemPython 百行登录系统脚本 代码解释 用户数据库: 注册功能: 登录功能: 主程序: 运行思路 注意事项 Python实例题 题目 Python百行制作登陆系统 python-login-systemPython…...
Java求职面试:从核心技术到大数据与AI的场景应用
面试场景: 在某互联网大厂的面试间,一位严肃的面试官正准备对面前的求职者谢飞机进行技术面试。谢飞机虽然有些紧张,但他相信凭借自己的机智和幽默能够顺利通过。 第一轮提问:核心语言与平台的基础问题 面试官:“谢…...
系统架构设计(六):面向对象设计
核心概念 概念含义说明对象(Object)现实世界事物的抽象表示,包含属性(状态)和方法(行为)类(Class)一类对象的抽象模板继承(Inheritance)子类继承…...
国内AWS CloudFront与S3私有桶集成指南:安全访问静态内容
在现代web应用架构中,将静态内容存储在Amazon S3中并通过CloudFront分发是一种常见且高效的做法。本指南将详细介绍如何创建私有S3桶,配置CloudFront分配,并使用Origin Access Identity (OAI)来确保安全访问。 步骤1:创建S3桶 首先,我们需要创建一个名为"b-static&…...
MATLAB进行深度学习网络训练
文章目录 前言环境配置一、环境部署二、数据准备三、训练配置与执行四、模型评估与优化五、高级技巧六、实战案例:COVID-19 肺部 CT 图像分类 前言 在 MATLAB 中进行深度学习网络训练主要分为数据准备、网络构建、训练配置和模型评估四个核心步骤。以下是详细教程&…...
jvm安全点(三)openjdk17 c++源码垃圾回收之安全点结束,唤醒线程
1. VMThread::inner_execute() - 触发安全点 cpp 复制 void VMThread::inner_execute(VM_Operation* op) { if (op->evaluate_at_safepoint()) { SafepointSynchronize::begin(); // 进入安全点,阻塞所有线程 // ...执行GC等操作... SafepointSynchronize::…...
局部放大maya的视图HUD文字大小的方法
一、问题描述: 有网友问:有办法局部放大maya的字体吗比如hud中currenttime打开之后画面右下角有个frame 想放大一下能做到吗? 在 Maya 中,可以通过自定义 HUD(Heads-Up Display)元素的字体大小来局部放大特…...