数据库原理及应用【二】数据模型

层次模型

tree

  • Record and field
  • Parent-Child relationship(PCR)

在这里插入图片描述

每个记录类型只有一个父节点

无法表达多对多信息

采用虚记录解决多对多

网状数据模型

系:主记录->属记录
主记录和属记录都可以有好多个

在这里插入图片描述在这里插入图片描述

关系模型

表:table/relation

  • 拥有更高的抽象级别,可以用数学里面集合论的知识研究

  • 屏蔽底层编程细节,易于理解

  • 可以引入代数系统

  • 非过程化查询语言

  • 软链接,逻辑指针

  • 属性和域

  1. 原子数据:要求表的每个属性是原子的,不能再分。不允许出现表中套表。(一范式)
  2. 允许空值
  • 关系(表)和元组
    属性的个数称作目
    属性,列,字段
    元组,行,记录

主键:一组属性

  • unique
  • not null
  • 可以决定其他元组的其他属性
  • 属性组的子集不满足上述条件。如果不满足这个条件就称作超键。
  • 如果多个属性组满足上述条件,我们可以指定一个为主键,其他的为候补键
  • 如果这个属性组就是元组本身,称这个属性组为全键

外键:一组属性

  • 来自其他关系,并且是其他关系的主键。逻辑指针
  • 且必须在另一个表里面存在这个主键

域完整性约束:每个元组的每个属性的值都必须满足值域
实体完整性约束:主键不允许为空
引用完整性约束:外键的值必须在所引用的表中存在

关系代数

基本操作

  • 选择Selection σ\sigmaσ :选择一些行
  • 投影Projection π\piπ:选择一些列。投影操作应该消除可能出现的重复元素。实际的系统不会自动进行消除重复元素,除非用户要求。
  • 叉乘Cross-product ×\times× : 笛卡尔乘积
  • 集合差Set-difference−-:集合减法
  • 合并Union∪\cup:将两个表合并起来

上述五种操作构成了数据库完备的操作集合。任何其他操作都可以通过这些操作完成。

上面的操作都是封闭的。

后面两种操作要求参与运算的两个集合满足并兼容的条件:

  • 属性个数一样
  • 属性类型一样

连接操作:先做笛卡尔乘积,再做选择。实际上可以进行查询优化,否则效率比较低。

  • 等值连接
  • 自然连接:按照两个表的共同属性进行等值连接

除法操作:A/B
在这里插入图片描述
A/B=πx(A)−πx(πx(A)×B−A)A/B = \pi_x(A)-\pi_x(\pi_x(A)\times B-A) A/B=πx(A)πx(πx(A)×BA)

首先先将A中特有的属性x和B中的属性y分离开,然后再叉乘,得到的是一个比A大的集合,减去A后剩下的就是那些原本没有B属性的元组,将这些x提取出来再减去他们就是正确的x.

外连接:找不到匹配仍然保留元素,用空值填补

  • 左外连接:保留左边表的所有元素
  • 右外连接:保留右边表的所有元素
  • 全外连接:保留两张表中的所有元素

外并:将不满足并兼容的表并在一起,新表的属性是原来两张表的属性的并,元组加在一起,缺少的元素补空值。

关系演算

基于谓词逻辑的非过程化的表达

  • 元组关系演算TRC
  • 域关系演算DRC

等价的,区别在于变量的定义不同。域关系演算的变量是属性。

域关系演算

  • 原子公式
    • <x1,x2,…,xn>属于表
    • X op Y
    • X op constant
  • 公式
    • 原子公式
    • 逻辑运算
    • 使用量词

对某个变量使用量词就称这个量词被绑定

不安全的查询:如果查询结果是无限的,就说这个查询是不安全的。

安全的关系演算和关系代数是等价的。

SQL语言建立在关系演算之上。

元组关系演算

变量定义在元组上

ER数据模型

传统的数据模型擅长表达以记录为基础的结构化的数据,支持日常事务型的应用。

不能根据用户的需求或者应用的需求

不能用一种很自然的方法表达实体之间的关系

语义信息不够明确

支持的数据类型太少,有时候不能满足应用的需求

实体Entity:现实世界中可区别的对象,使用一组属性来描述
实体集Entity Set:实体的集合
允许复合类型,多值属性

联系Relationship:实体之间的联系

E-R图:对E-R模型的图形化的展示。

方框:实体
圆圈:属性
菱形:联系

基数比例约束:

  • 一对一
  • 一对多
  • 多对多

参与度约束:一个实体参与一个联系的最少和最多次数
全参与
部分参与

扩展ER模型:
弱实体:不能单独存在,必须依赖其他实体存在的实体。例如职工的家属
普遍化和特殊化
聚集:把联系看作实体集和其他实体发生联系
范畴:不同类型的实体组成范畴

面向对象数据模型

突破一范式的限制

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/383618.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据可视化【二】HTML+CSS+SVG+D3

HTML、CSS和SVG学习实现代码&#xff1a;https://vizhub.com/Edward-Elric233/89185eb96bc64a9d81777873a0ccd0b9 index.html <!DOCTYPE html> <html><head><title>Shapes with SVG and CSS</title><link rel"stylesheet" href&qu…

数据可视化【三】基本概念

Visualization is suitable when there is a need to augment human capabilities rather than replace people with computational decision-making methods. 当可以信赖的智能化的解决方案存在的时候&#xff0c;可视化是不必要的。 当不知道需要分析的问题是什么的时候&…

数据可视化【四】Bar Chart

Make a Bar Chart Representing a data table in JavaScriptCreating rectangles for each rowUsing linear and band scalesThe margin conventionAdding axes 以下学习内容参考博客&#xff1a;传送门 select()选择所有指定元素的第一个 selectAll()选择指定元素的全部 上…

数据库原理及应用【三】DBMS+SQL

DBMS Query LanguagesInterface and maintaining tools(GUI)APIsClass Library QL 不是图灵完备的&#xff0c;不是一种编程语言。 QL SQL是一种非过程化的查询语言。 DDL数据定义语言&#xff1a;表&#xff0c;视图QL 查询语言DML 数据操纵语言DCL 数据控制语言 Base t…

数据可视化【五】 Scatter Plot

Scatter Plot vizhub上实现的代码&#xff1a; https://vizhub.com/Edward-Elric233/53807a1b35d94329b3689081cd2ea945 https://vizhub.com/Edward-Elric233/b9647d50899a4a0e8e917f913cd0a53a https://vizhub.com/Edward-Elric233/8c6b50cd81a04f048f490f48e4fe6264 由前…

数据可视化【六】Line Chart Area Chart

Line Chart vizhub代码&#xff1a; https://vizhub.com/Edward-Elric233/094396fc7a164c828a4a8c2e13045308 实现效果&#xff1a; 这里先使用d3.line()设置每个点的x坐标和y坐标&#xff0c;然后再用这个东西设置path的d属性&#xff0c;就可以得到曲线。 const lineGen…

数据可视化【七】 更新模式

Enter 以下面这个简单的代码进行分析 const svg d3.select(svg); // svg.style(background-color, red); testconst height svg.attr(height); // equals paresFloat() const width svg.attr(width);const makeFruit type >( {type} ); //这种写法好像能够直接得到一个…

数据可视化【八】根据数据类型选择可视化方式

Marks:Rows PointsLinesAreas Channels:Columns PositionColorShape

数据可视化【九】单向数据流交互

我们使用一下上上篇博客的代码。 例如我们想要当鼠标点击水果的时候会出现黑色的框&#xff0c;再点击一下黑色的框就会消失。 首先&#xff0c;我们应该给组件添加点击事件&#xff1a; fruitBowl.js gruopAll.on(click, d > onClick(d.id));这个on函数第一个参数是事件…

数据库原理及应用【四】数据库管理系统

查询优化 数据库管理系统中非常重要的一部分。 代数优化 按照一定的规则将语句变化成关系代数以后进行优化 操作优化 对代数优化后的查询树使用比较好的方法进行查询。 主要是对连接运算进行优化 嵌套循环归并扫描索引优化哈希连接 恢复机制 备份&#xff08;完整备份差…

递归式复杂度求解

代换法 猜测复杂度验证是否满足递归式&#xff08;使用归纳法&#xff09;找到常数应该满足的条件针对基本情况&#xff0c;常数足够大时总是成立的 需要注意的是&#xff0c;我们猜测的复杂度有可能不满足递归式&#xff0c;这个时候就要通过减去一些低阶项来使得归纳成立。…

P、NP、NP完全问题、NP难问题

可以在多项式时间内求解的问题称为易解的&#xff0c;而不能在多项式时间内求解的问题称为难解的。 P类问题&#xff1a;多项式类型&#xff0c;是一类能够用&#xff08;确定性的&#xff09;算法在多项式的时间内求解的判定问题。 只有判定问题才属于P 不可判定问题&#…

数据可视化【十】绘制地图

Loading and parsing TOPOJSON 导入Topojson d3文件 地址&#xff1a;https://unpkg.com/topojson3.0.2/dist/topojson.min.js 想要找d3文件的话去unpkg.com好像大部分都能找到的样子 Rendering geographic features 寻找合适的地图数据&#xff1a;谷歌搜索world-atlas npm…

数据可视化【十一】树状图

Constructing a node-link tree visualization 首先将节点之间的连线画出来。 使用json函数读取文件以后&#xff0c;使用hierarchy等函数得到连线的数组&#xff0c;然后绑定这个数组&#xff0c;给每个元素添加一个path&#xff0c;绘画使用的是一个函数linkHorizontal&…

数据可视化【十二】 颜色图例和尺寸图例

有了前面的知识&#xff0c;制作一个图例应该不是很难&#xff0c;关键是我们想要制作一个可以在其他地方进行使用的图例&#xff0c;这样就需要能够动态地设置图例的大小&#xff0c;位置&#xff0c;等等。 这里直接上代码&#xff1a; colorLegend.js export const color…

数据可视化【十三】地区分布图

在前面的博客中已经介绍了如何绘制地图&#xff0c;这一节学习如何绘制地区分布图。如果对绘制地图还不熟悉的话可以了解一下之前我写的博客&#xff1a;数据可视化【十】绘制地图 Intergrating(整合) TopoJSON with tabular data(列表数据) 在前面的博客中没有使用到tsv文件…

数据可视化【十四】交互式过滤地区分布图

在前面的博客中已经介绍了如何绘制地区分布图&#xff0c;这一节学习如何绘制交互式过滤地区分布图。如果对绘制地区分布图还不熟悉的话可以了解一下之前我写的博客&#xff1a;数据可视化【十三】地区分布图 整体的框架仍然是在之前的基础上进行修改&#xff0c;主要是添加交…

Ubuntu环境搭建

本文记录了一些常用的Ubuntu软件 然后首先修改软件源&#xff1a;软件和更新->Ubuntu软件->下载自&#xff1a;其他站点&#xff08;修改为阿里云&#xff09; 在关闭的时候需要更新什么的 然后修改更新方式&#xff0c;将不支持的更新去掉 常用的Windows软件 网易云…

Ubuntu修改/删除主目录下的中文文件夹

在Ubuntu的主目录下一般是有一些中文的目录&#xff0c;例如桌面&#xff0c;视频等等&#xff0c;还无法修改名称&#xff0c;在一群英文文件夹里面显得有些突兀&#xff08;Ubuntu终端下的中文一点也不好看&#xff09;&#xff0c;就想把这些文件夹修改一下&#xff0c;结果…

每日一题:leetcode1489. 找到最小生成树里的关键边和伪关键边

时隔多年我终于又开始写博客了&#xff0c;主要是已经放假了&#xff0c;之前一直忙于考试和课设没有时间写博客&#xff0c;学习笔记也因为买了iPad的缘故大部分都是手写的了。 假期想要把以前做过的项目都整理一下放在github和CSDN上。 也已经很久没有写算法题了&#xff0…