三种数据模型

article/2025/9/10 11:03:05

数据库的类型是根据数据模型来划分的,而任何一个DBMS也是根据数据模型有针对性地设计出来的,这就意味着必须把数据库组织成符合DBMS规定的数据模型。目前成熟地应用在数据库系统中的数据模型有:层次模型、网状模型和关系模型。它们之间的根本区别在于数据之间联系的表示方式不同(即记录型之间的联系方式不同)。层次模型以“树结构”表示数据之间的联系。网状模型是以“图结构”来表示数据之间的联系。关系模型是用“二维表”(或称为关系)来表示数据之间的联系的。

1.层次模型(Hierchical)

  层次模型是数据库系统最早使用的一种模型,它的数据结构是一棵“有向树”。根结点在最上端,层次最高,子结点在下,逐层排列。层次模型的特征是:

  • 有且仅有一个结点没有父结点,它就是根结点;
  • 其他结点有且仅有一个父结点。图所示为一个系教务管理层次数据模型,图(a)所示的是实体之间的联系,图(b)所示的是实体型之间的联系。

  Image:数据模型.jpg

  最有影响的层次模型的DBS是20世纪60年代末,IBM公司推出的IMS层次模型数据库系统。

2.网状模型(Network)

  网状模型以网状结构表示实体与实体之间的联系。网中的每一个结点代表一个记录类型,联系用链接指针来实现。网状模型可以表示多个从属关系的联系,也可以表示数据间的交叉关系,即数据间的横向关系与纵向关系,它是层次模型的扩展。网状模型可以方便地表示各种类型的联系,但结构复杂,实现的算法难以规范化。其特征是:

  • 允许结点有多于一个父结点;
  • 可以有一个以上的结点没有父结点。

  下图所示为一个系教务管理网状数据模型。

  Image:系教务管理层次数据模型.jpg

3.关系模型(Relation)

  关系模型以二维表结构来表示实体与实体之间的联系,它是以关系数学理论为基础的。关系模型的数据结构是一个“二维表框架”组成的集合。每个二维表又可称为关系。在关系模型中,操作的对象和结果都是二维表。关系模型是目前最流行的数据库模型。支持关系模型的数据库管理系统称为关系数据库管理系统,Access就是一种关系数据库管理系统。图所示为一个简单的关系模型,其中图(a)所示为关系模式,图(b)所示为这两个关系模型的关系,关系名称分别为教师关系和课程关系,每个关系均含3个元组,其主码均为“教师编号”。

  Image:图关系模型.jpg

  • 描述的一致性,不仅用关系描述实体本身,而且也用关系描述实体之间的联系;
  • 可直接表示多对多的联系;
  • 关系必须是规范化的关系,即每个属性是不可分的数据项,不许表中有表;
  • 关系模型是建立在数学概念基础上的,有较强的理论依据。

  在关系模型中基本数据结构就是二维表,不用像层次或网状那样的链接指针。记录之间的联系是通过不同关系中同名属性来体现的。例如,要查找“刘晋”老师所上的课程,可以先在教师关系中根据姓名找到教师编号“1984030”,然后在课程关系中找到“1984030”任课教师编号对应的课程名即可。通过上述查询过程,同名属性教师编号起到了连接两个关系的纽带作用。由此可见,关系模型中的各个关系模式不应当是孤立的,也不是随意拼凑的一堆二维表,它必须满足相应的要求。

  关系是一个二维表,即元组的集合。关系框架是一个关系的属性名表。形式化表示为:

  R(A_1,A_2,\cdot,A_n)

  其中,R为关系名,Ai(i=1,2,…,n)为关系的属性名。

  关系之间通过公共属性实现联系。例如,图所示为两个关系,通过“教师编号”公共属性实现两个关系之间的联系。

  关系数据库是指对应于一个关系模型的所有关系的集合。例如,在一个教务管理关系数据库中,包含教师关系、课程关系、学生关系、任课关系、成绩关系等。


http://chatgpt.dhexx.cn/article/84QRpnUA.shtml

相关文章

数据模型组成要素

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

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;…

moment系列一:add() 方法和subtract() 方法的使用

在工作中&#xff0c;因为自己去搜博客的时候老是找不到自己想要的答案&#xff0c;甚至一篇博客下来&#xff0c;找了好久都没收获&#xff0c;倍感疲惫&#xff0c;所以这里就废话不多说&#xff0c;直接上内容吧。 moment 中文官网地址&#xff1a;http://momentjs.cn momen…

基于改进EAST算法的文本检测

这段时间阅读研究了EAST算法以及在EAST算法上的改进并完成了复现运用到其他场景中去。 当今社会已进入图像大数据时代&#xff0c;图像数量庞大种类繁多&#xff0c;包含大量的有用知识。从图像中高效、精准、全面地提取文本和地理信息坐标等有用知识这一课题&#xff0c;也成…