关系数据库(数据库原理)

2023-11-20

目录

一、关系数据结构
二、关系的完整性
三、关系运算
四、关系的规范化

一、关系数据结构

1、关系的定义和性质
(1)、 关系的数学定义:

: 一组有相同数据类型的值得集合
笛卡尔积: 设任意的N个域D1,D2,…,Dn。定义D1,D2,…,Dn的笛卡尔积为:D1*D2*****Dn={(d1,d2,…,dn)|di属于Di,i=1,2,…,n}。例如(D1的取值类型都为动物,D2的取值类型都为菜食物):D1={猫,狗,猪},D2={鱼,骨头,白菜},则D1乘D2={(猫,鱼),(猫,骨头),(猫,白菜),(狗,鱼),(狗,骨头),(狗,白菜),(猪,鱼),(猪,骨头),(猪,白菜)}

关系: D1******Dn中有关系的行形成的一个子集称为D1******Dn的一个关系,用R(D1,D2…Dn)表示,R表示关系名,n表示关系的元或目

(2)、关系的性质:

同一列的数据类型必须一致
同一关系中,不同列可以有相同的数据类型,但列名必须不一样
同一关系中,任意两行不能重复,且元组(行)的排行不分先后顺序
同一关系中,列的排列部分先后顺序
关系中属性不可再分,满足原子性

2、关系数据库的基本概念:
(1)关系模式

在惯性型数据库中,关系模式是型,关系是值,关系模式是对关系的描述
关系模式的表示:R(U,D,dom,F),R表示关系名;U是组成该关系的属性名集合;D是属性组U中属性来自的域;dom是属性向域的映像关系;F是属性间的数据依赖关系集合
简记:R(U)或者R(A1,A2,A3…An),例如:学生情况(姓名,班级,学号,身份证号等)
(2)关系数据库 采用关系模式的数据库
3、关系的完整性: 保证行不重复(唯一)
(1)实体完整性约束

  • 主键约束(primary key):非空且唯一
  • 唯一键约束(unique):唯一

(2)引用完整性约束:

  • 存在两个关系(表)R和S,F是一个属性或者属性集合;F属于R但不是R的主键,同时F属于S并且F是S的主键,则称F是基本关系R的外码,R为外键表,S为主键表
  • 外键约束(foreign key):表与表之间建立联系

(3)域完整性约束: 用户定义的完整性规则
由用户根据实际情况对数据库中的数据内容进行规定,对列的约束
检查约束(check):添加范围
数据类型约束(int、char等)
默认约束(default)
非空约束(not null)
3、关系运算: 关系代数是以关系为运算对象的一组高级运算的集合

(1)传统的集合运算: 并、交、差、笛卡尔积

笛卡尔积: 两张表R和S也就是关系 ,笛卡尔积R*S就是R表的字段加上S表的字段,如图:
举例:在这里插入图片描述
: 关系R和S具有相同的关系模式(属性相同,域相同)
公式:在这里插入图片描述
在这里插入图片描述
: R和S具有相同的关系模式,R和S的交是属于集合R有属于集合S的元素组成的集合
: R和S具有相同的关系模式,R和S的差是有属于关系R但不属于关系S的元素构成的集合
在这里插入图片描述
在这里插入图片描述
(2)专门的关系运算: 投影、选择、连接、除法
投影:(对关系进行垂直分割) 关系R上的投影是R上选择出若干个属性列组成新的关系(从表中选择列)

在这里插入图片描述

举例:将a1和a3进行投影,去掉重复的:

在这里插入图片描述
选择(对关系进行水平分割): 挑选满足条件的行
在这里插入图片描述
举例: 选择A2值为a或b的元素
在这里插入图片描述
连接: 两个关系的笛卡尔积中选取满足条件的元组(两个关系先做笛卡尔积,在用条件筛选出满足条件的行)
有等值连接和自然连接(去掉了重复的等值连接)两种连接方式
在这里插入图片描述
举例:将R和S进行笛卡尔积运算,再取B<=H的行
在这里插入图片描述
自然连接: 两张表中属性名相同的值也相同的进行组合构成一个新的关系
在这里插入图片描述
在这里插入图片描述
除法(笛卡尔积的逆运算):

象集: 给定关系R(A,B),A,B为属性组。表示A属性上a在B上的分量就是象集
例如:
| A|B |
| a1|b1 |
| a2|b2|
| a2|b3 |
a1对应的象集为(b1)
a2对应的象集为:(b2,b3)
步骤:R/S
stop1:找到两个关系中属性相同的列
step2:R/S就是相同的列中属于R但不属于S的列
step3:找到R中列的元素所对应的象集,和S在和R相同列的投影
step4:象集包含S中得到的投影的元素就是除法的结果

四、关系的规范化

1、数据依赖: 函数依赖 、多值依赖、连接依赖
(1)、函数依赖: 关系模式中各个属性之间的一种依赖关系

函数依赖定义: 简单点说就是,关系R(X,Y),如果指导属性X的值就能得到属性Y的值,就能说Y函数依赖于X
(2)、几种特定的函数依赖:

  • 平凡和非平方函数依赖: 关系模式R(X,Y),如果 X—>Y,Y是X的子集,则称为平凡函数依赖;如果X—>Y,Y不是X的子集,则称为非平凡函数依赖。例如:学号,课程号—>成绩为非平凡函数依赖

  • 完全函数依赖和部分函数依赖: 关系模式R(X,Y),如果X—>Y,并且X的任意一个真子集Z都不满足Z—>Y,则Y完全函数依赖 X;如果X—>Y,但对于X的某一个真子集Z,有Z—>Y满足,则称Y部分依赖于X。例如:成绩表(学号,课程号,成绩),学号,课程号为主键,学号和课程号共同决定成绩,但是学号和课程号分开不能决定成绩,所以成绩完全函数 依赖学号和课程号

  • 传递函数依赖: 关系模式R(X,Y),X—>Y,Y—>X(不成立),有Y—>Z,则称X—>Z称为传递函数依赖。例如:学生关系(学号,所在系,系主任),学号——>所在系,所在系——>系主任,学号——>系主任

(3)、码的函数依赖表示:

  • 候选码: 设K为关系模式R(U)中的一个属性或属性集合,若K——>U,则K称为R的一个候选码
  • 主码: 选定R中一个候选码作为主码

2、关系规范化的目的:

数据冗余:数据库中重复存放数据的情况。造成浪费空间,修改数据时会发生数据不一致情况
更新异常:存在数据冗余,更新数据时代价会增高
插入数据:信息插不进去
删除异常:不该删除的数据不得不删除

3、关系规范化的过程:

(1)、第一范式: 目标是确保每列的原子性(即不可再分的最小数据单元)

关系模式的属性不可再分解
缺点:不能排除数据冗余和异常情况
(2)、第二范式: 要求每个表只描述一个实体的属性

主属性: 包含在任何候选码中的属性
非主属性: 不包含在任何候选码中的属性
定义:满足第一范式的条件下,且它的每一个 非主属性 都完全函数依赖于码(候选码)
例如:学生关系(学号,姓名,性别,课程号,学分),其中学号和课程号的组合为主码,姓名、性别、学分为非主属性
(3)、第三范式: 要求实体各属性之间不能具有直接的依赖关系

满足第二范式,且没有一个非主属性传递函数依赖于码
(4)、BC范式:

定义:对于任何非平凡函数依赖X——>Y,X均包含码
所有非主属性完全函数依赖于每一个候选码
所有主属性完全函数依赖于每个不包含它的候选码
没有任何属性完全函数依赖于非码的任何一组属性

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关系数据库(数据库原理) 的相关文章

  • Linux笔记

    文章目录 一 初识Linux 1 操作系统概述 1 1 计算机由哪两个主要部分组成 1 2 操作系统是什么 有什么作用 1 3 常见的操作系统有哪些 2 Linux初识 3 虚拟机介绍 3 1 什么是虚拟机 3 2 为什么要使用虚拟机 4
  • 小程序扫码只允许扫码运单条形码

    wx scanCode success res gt console log res let result res result 只允许 字母 数字 字母 数字 if result 0 9a zA Z g test result wx sh
  • [网络安全自学篇] 二十七.Sqlmap基础知识、CTF实战及请求参数设置(一)

    这是作者的系列网络安全自学教程 主要是关于网安工具和实践操作的在线笔记 特分享出来与博友共勉 希望您们喜欢 一起进步 前文分享了Shodan搜索引擎的基本用法及Python命令行 本篇文章详细讲解了Sqlmap的基本用法 CTF实战 并且分

随机推荐

  • 由浅及深PCB布线设计

    第一部分 在当今激烈竞争的电池供电市场中 由于成本指标限制 设计人员常常使用双面板 尽管多层板 4层 6层及8层 方案在尺寸 噪声和性能方面具有明显优势 成本压力却促使工程师们重新考虑其布线策略 采用双面板 在本文中 我们将讨论自动布线功能
  • 动态规划——数字三角形C语言

    一 分析 先说一下相关动态规划的一些概念 参考下方博文 原文链接 https blog csdn net every day article details 88174082 一个模型三个特征 理论的讲解 动态规划作为一个非常成熟的算法思想
  • Sentence-BERT论文阅读笔记

    目录 1 第一篇论文 Sentence BERT Sentence Embeddings using Siamese BERT Networks 1 1 论文基本信息 1 2 动机 1 3 模型 1 4 实验 1 4 1 训练所用的数据集
  • css如何实现三角形的方法

    在开发页面的时候 遇到很多的列表都需要用到箭头 可以直接用图片作背景铺垫 纯CSS也能实现 并且没有兼容性顾虑 不用CSS3 相比而言 比图片更好用 原理 一个高宽相等的正方形 选取你所需要的某一边 截取之 就是一个梯形 当高宽都为0 且其
  • springboot日志操作

    springboot日志 日志介绍 1 日志的输出等级 2 运用lombok快速添加日志对象log 3 日志输出格式控制 4 日志文件 4 1 直接指定文件名 4 2 指定最大空间和格式 日志介绍 日志就是记录程序日常运行的信息 sprin
  • Android中图片的裁剪与压缩

    文章目录 一 图片的剪裁 1 属性介绍 二 图片压缩 1 图片质量分类 2 图片默认质量 3 占用内存 4 图片的尺寸压缩或者拉伸 三 Bitmap压缩 1 质量压缩 2 采样率压缩 3 缩放法压缩 一 图片的剪裁 ImageView默认的
  • error: ‘for’ loop initial declarations are only allowed in C99 mode (改Makefile)

    c 强制C99在CMake 使用 for 循环初始声明 2019 04 25 C C 编程之家 https www jb51 cc 编程之家收集整理的这篇文章主要介绍了c 强制C99在CMake 使用 for 循环初始声明 编程之家小编觉得
  • uCOSii中的互斥信号量

    uCOSii中的互斥信号量 一 互斥型信号量项管理 MUTUAL EXCLUSION SEMAPHORE MANAGEMENT OSMutexAccept 无条件等待地获取互斥型信号量 OSMutexCreate 建立并初始化一个互斥型信号
  • Peewee

    Part1前言 在 Python 的 ORM 框架中 比较主流的有 Sqlalchemy peewee pony 等等 但是其中 peewee 和 Django 的 Models 框架很像 如果了解 Django 的同学肯定对 peewee
  • mybatis 返回结果为Map

    表 members 中的gender 列是这样 Female Female Male Female Male Male Male Male Male 现在我们想统计 members 中男女人数分别是多少 很显然返回的结果应该是这样的 Fem
  • No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalanc

    1 报错原因 启动SpringCloud项目时报 No Feign Client for loadBalancing defined Did you forget to include spring cloud starter loadba
  • hooks实践总结

    何为hooks 在React中hook是指不编写 class 的情况下使用 state 以及其他的 React 特性 而Vue3也推出了具有相同功能的组合式API 如果你用过Vue3就会知道在 setup 中你应该避免使用 this 因为h
  • 汇编语言(第三版)读书笔记 2 - 第2章 寄存器

    第2章 寄存器 前一章所说的总线 相对于CPU内部来说是外部总线 内部总线实现了CPU内部各个器件 运算器 控制器 寄存器 之间的联系 外部总线实现了CPU和主板上其他器件的联系 不同的CPU 寄存器的个数 结构是不相同的 8086 CPU
  • Redis实现定时任务

    Redis定时任务的核心在于 Schedule 注解 Redis Zset List数据结构 Redis管道技术 就从定时任务的执行流程开始写起 1 前端用户发起定时任务创建定时任务任务 像定时任务模块发起定时任务请求并且携带必要参数 首先
  • 【Python】逆向爬虫-----常见的加密方法

    一 MD5加密 MD5加密是一种被广泛使用的线性散列算法 可以产生出一个128位 16字节 的散列值 hash value 用于确保信息传输完整的一致性 且MD5加密之后产生的是一个固定长度 32位或16位 的数据 若要破解MD5加密 需要
  • C++程序的基本组成简介

    C 程序的基本组成简介 C 程序的基本组成 这个C 程序例子 由一个程序单位 程序文件 注 组成 这是一个简单例子未使用类 注 其中包括 1 头文件 可以认为头文件是你在调用函数时的一个桥梁 格式为 include 引用文件名 c 的程序是
  • set容器

    恭喜主教大人完成了自己的目标 set 容器 set容器基本概念 简介 所有元素都会在插入时所有元素都会在插入时自动被排序 自动去重 可重复插不报错但是去重了 默认从小到大排 本质 set multiset属于关联式容器 底层结构是用二叉树实
  • 最新ChatGPT GPT-4 文本生成技术详解(附ipynb与python源码及视频讲解)——开源DataWhale发布入门ChatGPT技术新手从0到1必备使用指南手册(三)

    目录 前言 最新ChatGPT GPT 4 文本生成技术详解 1 引言 2 文本摘要任务 2 1 什么是文本摘要 2 2 常见的文本摘要技术 2 3 基于OpenAI接口的文本摘要实验 2 3 1 简单上手版 调用预训练模型 2 3 2 进
  • 面向对象的单片机编程

    1 在看别人单片机程序时 你也许是奔溃的 因为全局变量满天飞 不知道哪个在哪用了 哪个表示什么 而且编写极其不规范 2 在自己写单片机程序时 也许你也是奔溃的 总感觉重新开启一个项目 之前的写过相似的代码也无法使用 得重新敲 代码重用度不高
  • 关系数据库(数据库原理)

    目录 一 关系数据结构 二 关系的完整性 三 关系运算 四 关系的规范化 一 关系数据结构 1 关系的定义和性质 1 关系的数学定义 域 一组有相同数据类型的值得集合 笛卡尔积 设任意的N个域D1 D2 Dn 定义D1 D2 Dn的笛卡尔积