当前位置: 首页 > news >正文

数据模型

 

  模型是现实世界特征的模拟和抽象。在数据库技术中,用数据模型的概念描述数据库的结构和语义,是对现实世界的数据抽象。数据模型是研究数据库技术的核心和基础。

 数据库技术中研究的数据模型分为两个层面:

一层是面向用户的,               称为概念模型

另一层面是面向计算机系统的,称为结构模型

 

1. 概念数据模型

  概念数据模型是独立于计算机系统的数据模型,用来描述某个特定组织关心的信息结构,属于信息世界的建模,所以概念模型应该能够方便、准确地表示客观世界中常用的概念。另外概念数据模型也是用户和应用系统设计员互相交流的桥梁,以保证数据模型能够正确地描述客观世界。

    概念模型的表示方法最常用的是P.P.Chen于1976年提出的"实体-联系图方法(Entity-Relationship Approach),简称E-R模型"。E-R实体联系图是直观表示概念模型的工具,其中包含了实体、联系、属性三个成分,联系的方法为一对一(1:1)、一对多(1:N)、多对多(M:N)三种方式,联系属于哪种方式取决于客观实际本身。

  E-R模型图,既表示实体,也表示实体之间的联系,是现实世界的抽象,与计算机系统没有关系,是可以被用户理解的数据描述方式。通过E-R模型图可以使用户了解系统设计者对现实世界的抽象是否符合实际情况,从某种程度上说E-R模型图也是用户与系统设计者进行交流的工具,E-R模型图已成为概念模型设计的一个重要设计方法。

    

E-R图具体范例

    实体和实体之间的联系用无向线段连接,在线段上标注联系的类型,实体和联系都由各自的属性。例如,在学生选课管理系统中涉及学生和课程两个实体,同时这两个实体之间有联系的(学生选学课程,课程为学生开设,这种联系是多对多的)。

E-R图在Powerdesigner的表现形式

2. 结构数据模型

  概念数据模型是对现实世界的数据描述,这种数据模型最终要转换成计算机能够实现的数据模型。现实世界的第二层抽象是直接面向数据库的逻辑结构,称为结构数据模型,这类数据模型涉及到计算机系统和数据库管理系统。结构数据模型的三个组成部分是:

  数据结构:实体和实体间联系的表示和实现。

  数据操作:数据库的查询和更新操作的实现。

  数据完整性约束:数据及其联系应具有的制约和依赖规则。

关系模型

  常用的结构数据模型是关系模型和面向对象模型,关系模型的理论基础是数学理论,数据的操作通过关系运算实现。在关系模型中用二维表表示实体及实体之间的联系,关系模型的实例称为关系。从数学的观点上看,关系是集合,其元素是元组(记录)。遵循一定的规则后,可以将E-R模型图转换成关系模型。

  将E-R模型图转换成关系模型的规则:E-R模型图中的主要成分是实体及实体之间的联系,对于实体的转换方式是:

  1)  将一个实体转换成一个关系模型。实体的属性为关系模型的属性,实体的标识符为关系模型的关键字,如上图所示的E-R模式中有两个实体:学生、课程,可以分别转换学生模型和课程模型:

  学生模型(学号,姓名,性别,年龄),学号是学生模型的关键字

  课程模型(课程号,课程名,学时数),课程号是课程模型的关键字

  2)  联系转换为关系模型。联系转换成关系模型时,要根据联系方式的不同采用不同的转换方式:

  • 联系的方式是一对一的(1:1),可以在两个实体关系模型中的任意一个关系模型中加入另一个关系模型的关键字和联系类型的属性。
  • 联系方式是一对多的(1:N),则在N端(为多的一端)实体的关系模型中加入1端实体关系模型的关键字和联系类型的属性
  • 联系方式是多对多的(M:N),则将联系也转换成关系模型,其属性是互为联系的两个实体的关键字和联系的属性

  关系模型是用关键字作向导来操作数据,数据的操纵是通过关系的运算来完成的,关系的数据模型是二维表,简单、易懂、编写应用程序时不涉及数据的存储结构、访问技术等细节。

转载于:https://www.cnblogs.com/java2016/p/5384300.html

相关文章:

  • 深度解析利用ES6进行Promise封装总结
  • 上传本地项目到git.oschina
  • ES6系统学习----从Apollo Client看解构赋值
  • 前端临床手札——文件上传
  • IDEA Git版本回滚提交方式
  • spring framework 模块简介
  • Vue2.5 零基础开发去哪儿网实战(二) - 起步 Vue.js
  • 数组(list)分组、分段
  • 编译并导入OpenSSL
  • Rsync软件错误总结
  • 《TCP/IP具体解释卷2:实现》笔记--ICMP:Internet控制报文协议
  • 小程序button引导用户授权
  • 初识云计算的三种服务模式 (IaaS SaaS PaaS)
  • 大数据hadoop领域技术总体介绍(各个组件的作用)
  • 使用git时候,屏蔽gitignore自身
  • [NodeJS] 关于Buffer
  • 2017届校招提前批面试回顾
  • HashMap ConcurrentHashMap
  • Java编程基础24——递归练习
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • LeetCode29.两数相除 JavaScript
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • Python - 闭包Closure
  • Python连接Oracle
  • Python实现BT种子转化为磁力链接【实战】
  • Vue 动态创建 component
  • Wamp集成环境 添加PHP的新版本
  • webgl (原生)基础入门指南【一】
  • yii2权限控制rbac之rule详细讲解
  • 初探 Vue 生命周期和钩子函数
  • 从零开始学习部署
  • 构建二叉树进行数值数组的去重及优化
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 解析带emoji和链接的聊天系统消息
  • 盘点那些不知名却常用的 Git 操作
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 系统认识JavaScript正则表达式
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • 再谈express与koa的对比
  • postgresql行列转换函数
  • ​什么是bug?bug的源头在哪里?
  • # .NET Framework中使用命名管道进行进程间通信
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (libusb) usb口自动刷新
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (备忘)Java Map 遍历
  • (初研) Sentence-embedding fine-tune notebook
  • (二)PySpark3:SparkSQL编程
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (力扣题库)跳跃游戏II(c++)
  • (算法)N皇后问题
  • (译) 函数式 JS #1:简介
  • .describe() python_Python-Win32com-Excel
  • .NET 5种线程安全集合