数据模型简介

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

一张地图、售楼处小区的沙盘、一架精巧的航模飞机都是具体的模型,可以让人联想到真是生活中的事物,模型是对现实世界中某个对象特性的模拟和抽象。

数据模型(data model)也是一种模型,是对现实世界数据特征的抽象。人们要把现实中的具体事物如人、物、活动、概念转换成计算机能处理的数据,所以数据模型就是现实世界的模拟,是数据、数据联系、数据语义以及一致性约束的概念工具的集合。它是数据库系统的核心和基础。

数据模型应满足三方面要求:一是能比较真实的模拟现实世界,而是容易为人理解,三是便于在计算机上实现。如同建筑设计和施工使用不同的图纸一样,在设计开发实施数据库应用系统中也需要使用不同的数据模型。作为现实世界到机器世界的中间层次,是第一层抽象建模。我们需要先掌握信息世界的一些基本概念。

  1. 什么是实体

这个和实体经济里面的“实体”有点像但又不一样。数据库里面呢,把客观存在并可互相区别的事物称为实体。实体可以是具体的人、事、物,也可以是抽象的概念或者联系。例如,一个学生、一个部门、一门课、最近过山车式的股市的各个板块等都可以是实体。

 

 

物以类聚,具有相同性质(属性)的实体集合称为实体集。例如,某大学所有教师或者所有本科生、所有研究生的集合。

具有相同属性的实体必然具有共同的特征和性质,用实体名及属性名集合来抽象和刻画同类实体,称为实体型。例如,学生(学号,姓名,性别,出生年月,所在院系,入学时间)就是一个实体型。因此,实体型是个抽象的概念。

1.属性

实体所具有的某一特性称为属性。一个实体可以由若干个属性刻画。例如,学生实体可以由学号、姓名、性别、出生年月、所在院系等组成。

:属性可取值的集合,也称值集。例如,某大学学号的域可能为[0000000,9999999],性别的域[男,女]等。

属性从不同维度可分为下面几种:

  • 简单属性和复合属性(可以划分为更小的部分)。复合属性举例:名字(姓和名),地址(城市、街道、门牌号),电话号码(国家号+地区号+用户号码)等。
  • 单值属性和多值属性。多值属性举例:张教师有两个手机号,娃有好几个特长(培训班)。
  • 派生属性:值从别的相关属性或实体派生出来。比如,年龄可以通过当前日期和生日(属性)计算出来。则,年龄为派生属性。
  • 空值:NULL,表示在某个属性上没有值。可能是没有该属性或者属性值还不知道。

2.

实体有一组性质可以唯一标识一个实体,称为。一个元组的属性值必须必须能够唯一区分元组的,或者说一个关系中没有两个元组在所有属性上的取值都相同。例如,学生的学号、职工的工号、居民的身份证号,课程编号等。在数据库设计中,使用主码(primary key)用来在一个表中区分不同元组。

一个关系模式(如r1)可能在它的属性中包括另一个关系模式(如r2)的主码。这个属性在r1上称作参照r2的外码(foreign key)。关系r1也成为外码依赖的参照关系,r2叫做外码的被参照关系。比如,我们有两个关系学生(学号,姓名,性别,专业号,出生年月)和专业(专业号,专业名)。学生关系的“专业号”是参照专业关系的外码。

3. 联系

联系指多个实体间的相互关联例如,定义老师76778 李数和学生01 赵一一 的联系“指导”,指明李数在2020/9/1这天成为赵一一的导师。学生和课程之间的联系为学生选课。如图1所示。

联系集是相同类型联系的集合。

 

实体型之间的联系可以分为以下三种:

  • 一对一联系(1:1)

如果对于实体集A中的每一个实体,实体集B中至多有一个(也可以没有)实体与之联系,反之亦然。则成实体集A和实体集B具有一对一联系,记为1:1。

例如,班级中只有一个正班长,一个正班长只能在一个班级中任职,则正班长和班级是一对一的关系。

  • 一对多联系(1:n)

A中的一个实体可以与B中的任意数目(n ≥0)实体相关联,而B中的一个实体至多与A中的一个实体相关联。

例如:一个班主任可以负责多名学生,一个学生只能对应一个班主任。班主任和学生就是一对多的关系。

 

  • 多对多联系(m:n)

A中的一个实体可以与B中任意数目(n≥0)实体相关联,而B中的一个实体也可以与A中的任意数目(m≥0)实体相关联。

例如:一门课程同时有若干学生选修,而一个学生可以同时选修多门课程。课程和学生之间具有多对多联系。热门选修课有多难抢你们都懂得。

 关系、属性、元祖间的关系见下表。


http://chatgpt.dhexx.cn/article/BG91TC8w.shtml

相关文章

mysql数据模型三要素_数据模型的作用及三要素是什么?

展开全部 数据模型三要素是数据结构、数据操作、数据约束。 1、数据结构 是计算机存储636f707962616964757a686964616f31333431376634、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合,即带“结构”的数据元素的集合。。通常情况下,精…

数据库的三种模型

前言 数据模型是数据库系统的核心,本文简要介绍三种主要的数据库模型。 一、格式化模型 格式化模型是层次模型和网状模型的统称 1.层次模型 ① 层次数据模型的概念 层次模型用属性结构来表示各类实体以及实体间的联系 ② 层次模型的数据结构 特点&#xff1a…

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

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

三种数据模型

数据库的类型是根据数据模型来划分的,而任何一个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:可选操作掩码;…