数据库的三种模型

article/2025/9/10 10:50:46

前言

数据模型是数据库系统的核心,本文简要介绍三种主要的数据库模型。


一、格式化模型

格式化模型是层次模型和网状模型的统称

1.层次模型

① 层次数据模型的概念

层次模型用属性结构来表示各类实体以及实体间的联系

② 层次模型的数据结构

特点:

  1. 结点的双亲是唯一的;
  2. 只能直接处理一对多的实体联系;
  3. 每个记录类型可以定义一个排序段,也称码字段;
  4. 任何记录值只有按其路径查看时才能显出它的全部意义;
  5. 没有一个子女记录值能够脱离双亲记录值而独立存在。

③层次模型的数据操纵

  • 查询
  • 插入
  • 删除
  • 更新

④层次模型的完整性约束

  1. 无对应的双亲结点值就不能插入子女结点;
  2. 如果删除双亲结点则相应的子女节点值也被同时删除;
  3. 更新操作时,应更新所有相应记录,以保证数据的一致性。

⑤层次模型的优缺点

  • 优点
    层次模型的数据结构比较简单清晰;
    查询效率高,性能优于关系模型,不低于网状模型;
    层次数据模型提供了良好的完整性支持。

  • 缺点
    结点之间的多对多联系表示不自然;
    对插入和删除操作的限制多,应用程序的编写比较复杂;
    查询子女结点必须通过双亲结点;
    层次命令趋于程序化;

2.网状模型

①网状模型的概念

网状数据库系统采用网状模型作为数据的组织方式
✧典型代表是DBTG系统:
■亦称CODASYL系统
■20世纪70年代由DBTG提出的一个系统方案
必实际系统
■Cullinet Software公司的IDMS
■Univac公司的DMS1100
■Honeywell公司的IDS/2
■HP公司的IMAGE

②网状模型的数据结构

满足下面两个条件的基本层次联系的集合:

  1. 允许一个以上的结点无双亲;
  2. 一个结点可以有多于一个的双亲。

表示方法(与层次数据模型相同)

  • 实体型:用记录类型描述
    每个结点表示-一个记录类型(实体)
  • 属性:用字段描述
    每个记录类型可包含若千个字段
  • 联系:用结点之间的连线表示记录类型(实体)之间的一对多的父子联系

③网状模型的操纵与完整性约束

网状数据库系统(如DBTG)对数据操纵加
了一些限制,提供了–定的完整性约束
■码:唯一标识记录的数据项的集合
■一个联系中双亲记录与子女记录之间是一-对多联系
■支持双亲记录和子女记录之间某些约束条件

④网状模型的优缺点

  • 优点
    a.能够更为直接地描述现实世界,如一个结点可以有多个双亲
    b.具有良好地性,存取效率较高
  • 缺点
    a.结构比较复杂,而且随着应用环境地扩大,数据库就变得越来越复杂,不利于最终用户掌握
    b.DDL、DML语言复杂,用户不容易使用
    c.记录之间联系是通过存取路径实现地,用户必须了解系统结构地细节

3.网状模型与层次模型的区别

■网状模型允许多个结点没有双亲结点
■网状模型允许结点有多个双亲结点
■网状模型允许两个结点之间有多种联系(复合联系)
■网状模型可以更直接地描述现实世界
■层次模型实际上是网状模型的一一个特例

二、关系模型

①关系模型的概念

关系数据库系统采用关系模型作为数据的组织方式
1970年美国IBM公司SanJose研究室的研究员E.F.Codd首次提出了数据库系统的关系模型
计算机厂商新推出的数据库管理系统几乎都支持关系模型

②关系模型的数据结构

在用户观点下,关系模型中数据的逻辑结构是一张二维表,它由行和列组成。

  • 关系(Relation)
    ●一个关系对应通常说的一张表

  • 元组(Tuple)
    ●表中的一行即为一个元组

  • 属性(Attribute )
    ●表中的一列即为一个属性,给每–个属性起一个名称即属性名

  • 主码(Key)
    ●也称码键。表中的某个属性组,它可以唯一 确定一个元组

  • 域(Domain )
    ●是一组具有相同数据类型的值的集合。属性的取值范围来自某个域。

  • 分量
    ●元组中的一一个属性值。

  • 关系模式 ●对关系的描述 关系名(属性1,属性2,,.属性n) 学生(学号,姓名,年龄,性别,系名,年级)

关系必须是规范的,满足一定的约束条件
最基本的约束条件: 关系的每一个分量必须是一个不可分的数据项,不允许表中还有表

一个工资表(表中有表)实例

③关系模型的操纵与完整性约束

  • 数据操作是集合操作,操作对象和操作结果都是关系
    ■查询
    ■插入
    ■删除
    ■更新
  • 存取路径对用户隐蔽,用户只要指出“千什么 ’,不必详细说明‘ “怎么干”
  • 关系的完整性约束条件
    ■实体完整性
    ■参照完整性
    ■用户定义的完整性

④关系数据库的优缺点

  • 优点
    1.建立在严格的数学概念的基础上
    2.概念单一
    ●实体和各类联系都用关系来表示
    ●对数据的检索结果也是关系
    3.关系模型的存取路径对用户透明
    ●具有更高的数据独立性,更好的安全保密性
    ●简化了程序员的工作和数据库开发建立的工作
  • 缺点
    1.存取路径对用户透明,查询效率往往不如格式化数据模型
    2.为提高性能,必须对用户的查询请求进行优化,增加了开发数据库管理系统的难度

总结

数据库领域当前的研究工作都是以关系方法为基础,所以大家学习数据库的时候应该把重点放在关系数据库上。


http://chatgpt.dhexx.cn/article/1Hi0misG.shtml

相关文章

关系数据模型的三个组成部分(关系数据模型的三个组成部分)

关系数据模型由什么组成 关系数据模型由含有相同数据类型的若干行组成。每一行有若干个字段。每一个字段各自可以有不同的数据类型。关系模型中的数据操作是集合操作,操作对象和操作结果都是关系,即若干元组的集合,而不象非关系模型中那样是单…

三种数据模型

数据库的类型是根据数据模型来划分的,而任何一个DBMS也是根据数据模型有针对性地设计出来的,这就意味着必须把数据库组织成符合DBMS规定的数据模型。目前成熟地应用在数据库系统中的数据模型有:层次模型、网状模型和关系模型。它们之间的根本…

数据模型组成要素

最近在看工作机会,目前的公司涨薪的机会渺茫,加上通勤过长。看来换份工作势在必行了。言归正传更新最新学习笔记。 一、数据模型的组成要素 精确地描述了系统的静态特性、动态特性和完整性约束条件三部分组成: 数据结构–描述系统的静态特性 刻画数据模型性质的重要方面 …

java stream 遍历map_遍历map的五种方法介绍

日常开发中Map集合遍历是经常使用的,下面介绍几种遍历方法的差异。 (推荐教程:java课程) 1、IteratorentrySet写法【推荐JDK8以下】,Map.Entry是Map接口的内部接口,获取迭代器,然后依次取出每个迭代器里面的Map.EntryI…

Java中如何遍历Map对象

欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。 欢迎跳转到本文的原文链接:https://honeypps.com/java/java-how-to-traverse-map-object/ 博主有时…

java遍历map(java遍历map的key)

java中map集合怎么遍历 遍历方法代码如下: import java.util.HashMap; import java.util.Map; public class App01 { public static void main(String[] args) { Map map1 new HashMap (); map1.put("A", "ABC"); map1.put("B", &qu…

js遍历map(js遍历map对象)

javascript怎么遍历map var map new HashMap();map.put(a,1);map.put(b,2);遍历:var key map.keySet();for (var i in key){ alert(map.get(key[i]));}注:js 中使用map,要先导入一个HashMap.js文件 没要求,引入这个文…

Java中如何遍历Map对象的4种方法

在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法。我们看一下最常用的方法及其优缺点。 既然java中的所有map都实现了Map接口,以下方法适用于任何map实现(HashMap, TreeMap, LinkedHashMap, Hashtable, 等等…

遍历map的四种方法

Map.entrySet() 这个方法返回的是一个Set<Map.Entry<K,V>>&#xff0c;Map.Entry 是Map中的一个接口&#xff0c;他的用途是表示一个映射项&#xff08;里面有Key和Value&#xff09;&#xff0c;而Set<Map.Entry<K,V>>表示一个映射项的Set。Map.Entry…

遍历Map的六种方式

遍历Map的六种方式 一.创建Map二.遍历Map方式一&#xff1a;使用entrySet遍历(推荐使用)方式二&#xff1a;使用keySet遍历方式三&#xff1a;使用entrySetIterator遍历方式四&#xff1a;使用keySetIterator遍历方式五&#xff1a;使用keySet、values方法遍历方式六&#xff1…

Map.entry详解

Map.entrySet() 这个方法返回的是一个Set<Map.Entry<K,V>>,Map.Entry 是Map中的一个接口,他的用途是表示一个映射项(里面有Key和Value),而Set<Map.Entry<K,V>>表示一个映射项的Set。Map.Entry里有相应的getKey和getValue方法,即JavaBean,让我们…

遍历map的几种方法

#先往map加入几个数据 Map<Integer,String> mapnew HashMap<>();map.put(1,"美好的周一");map.put(2,"美好的周二");map.put(3,"美好的周三");方法一&#xff1a;普通的foreach循环&#xff0c;使用keySet()方法&#xff0c;遍历key…

The operator ‘SUBTRACT‘ is not supported between objects of type ‘null‘ and ‘java.lang.Integer‘

找了半天发现是判断id值是否为空时&#xff0c;数据类型发生转换问题。关于Integer和int在面试的时候出现的频率很高。而我们所熟知的是Integer是int 的包装类型&#xff0c;int的初始值为0&#xff0c;Integer的初始值为null。 org.springframework.expression.spel.SpelEvalu…

Spark Transformation —— subtract

上手使用 def subtract(other: RDD[T]): RDD[T] def subtract(other: RDD[T], numPartitions: Int): RDD[T] def subtract(other: RDD[T], partitioner: Partitioner)(implicit ord: Ordering[T] null): RDD[T] 该函数类似于intersection&#xff0c;但返回在RDD中出现&…

java 中subtract_Java.math.BigDecimal.subtract()方法实例

全屏 Java.math.BigDecimal.subtract()方法实例 java.math.BigDecimal.subtract(BigDecimal subtrahend)返回一个BigDecimal&#xff0c;其值为 (this - subtrahend), 精度为 max(this.scale(), subtrahend.scale()). 声明 以下是声明java.math.BigDecimal.subtract()方法publi…

bedtools subtract 基因区段取差集

基本概述&#xff1a; bedtools subtract 通俗的说&#xff0c;得到 A - B 的区段。如果在A中发现了B区段&#xff0c;就把 B 扣除&#xff0c;通过不同的参数&#xff0c;扣除的标准不一样。其中&#xff0c;参数 -A 可以达成 Remove features with any overlap 的效果&#x…

cv::subtract

计算两个数组或数组和标量之间的每个元素差。也就是图像的相减操作 opencv documentation的说明&#xff1a; 参数说明&#xff1a; src1:第一个输入数组或标量。 src2:第二个输入数组或标量。 src3:输出数组与输入数组有相同的大小和相同数量的通道。 src4:可选操作掩码;…

opencv之subtract

函数原型 void cv::subtract(InputArray src1, InputArray src2, OutputArray dst, InputArray masknoArray(), int dtype-1) python: dst cv.subtract(src1,src2[,dst[,mask[,dtype]]]) 参数说明 src1:input array or scalar src2:input array or scalar dst:output array…

OpenCV函数subtract()使用心得及需要注意的地方

OpenCV函数subtract()的原型如下&#xff1a; void cv::subtract( InputArray src1,InputArray src2,OutputArray dst,InputArray mask noArray(),int dtype -1 ) 官方文档说明如下&#xff1a; 看了以上文档并结合自己的使用&#xff0c;补充说明以下几点&#xff1a;…