SQL基础(关系模型)

目录

SQL及定义域概念

SQL是什么

定义域

关系简介

关系的定义

关系的封闭性

关系模型简介

关系模型

谓词逻辑

运算基础

SQL的加减乘除

SQL的除法1

SQL的除法2

SQL的除法3

三值逻辑

NULL的危害

消除NULL


SQL及定义域概念

SQL是什么

Structured Query LanguageSQL作为一种操作命令集,是具有数据定义和数据操纵等多种功能的数据库语言

    1.数据定义:又称为“DDL语言”,定义数据库的逻辑结构,包括定义数据库、基本表、视图和索引4部分。

    2.数据操纵:又称为“DML语言”,包括插入、删除和更新三种操作。

    3.数据查询:又称为“DQL语言”,包括数据查询操作。

    4.数据控制:又称为“DCL语言”,对用户访问数据的控制有基本表和视图的授权及回收。

    5.事务控制:又称为“TCL语言”,包括事务的提交与回滚。

SQL数据库的数据体系结构基本上是三级结构,但使用的术语和传统关系模型术语不同。在SQL中:

备注:

人们为数据库设计了一个严谨的体系结构,数据库领域公认的标准结构是三级模式结构,它包括外模式、概念模式、内模式,有效地组织、管理数据,提高了数据库的逻辑独立性和物理独立性。用户级对应外模式,概念级对应概念模式,物理级对应内模式,使不同级别的用户对数据库形成不同的视图。所谓视图,就是指观察、认识和理解数据的范围、角度和方法,是数据库在用户“眼中"的反映,很显然,不同层次(级别)用户所“看到”的数据库是不相同的。

定义域

现在的 DBMS 具备简单的定义域功能,将数据库比作编程语言的话,现在的 DBMS 相当于只能使用系统定义好的类型,不能由用户自定义类型的编程语言。

主要是字符型、数值型等叫作标量类型的数据类型。因为它们对属性的取值范围有约束,所以尽管有局限性,但是标量类型也是定义域的一种。不能往声明为 INTEGER 型的列中插入 “abc 这样的字符串。

我们还可以使用 CHECK 约束,执行比针对声明为标量类型的列进行的约束更为严格的约束。

例如:

  CREATE TABLE CUSTOMER (

  CU_SN CHAR(6) NOT NULL,

  CU_NAME VARCHAR(12),

  CU_AGE INT2 NULL CONSTRAINT CKC_CUSTOMER_AGE CHECK (CU_AGE > 0 and CU_AGE < 150),   CU_GENDER CHAR(1) NULL CONSTRAINT CKC_CUSTOMER_GENDER CHECK (CU_GENDER IN ('U','F','M’))

  );

备注:

标量类型(Scalar type)是相对复合类型(Compound type)来说的:标量类型只能有一个值,而复合类型可以包含多个值。复合类型是由标量类型构成的。

整数类型(intshortlong等)、字符类型(charwchar_t等)、枚举类型(enum)、小数类型(floatdouble等)、布尔类型(bool)都属于标量类型,一份标量类型的数据只能包含一个值。

结构体(struct)、数组、字符串都属于复合类型,一份复合类型的数据可以包含多个标量类型的值,也可以包含其他复合类型的值。

关系简介

关系的定义

关系的定义可以用下面这个公式表示(关系用符号 R 表示,属性用符号 Ai 表示,属性的定义域用符号 Di 表示):

  R ⊆ D1×D2×D3 ··· ×Dn

这个公式读作:关系 R 定义域 D1, D2, …, Dn 的笛卡儿积的子集。

假设我们有三个属性:a1a2a3,然后我们描述一下它们的定义域(数学中函数的定义域,是属性的取值集合),属性 a1 可以取 1 种值,属性 a2 可以取 2 种值,属性 a3 可以取 3 种值。各属性对应的定义域分别叫作 d1d2d3,即:

d1 = { 1 }

d2 = { , }

d3 = { , 绿 , }

使用这 3 个定义域生成关系时,最大的元组数是6,笛卡儿积(R1):

上面关系 R1 就是笛卡儿积。笛卡儿积是指“使用各个属性的定义域生成的组合数最多的集合”。因此通过上面 3 个定义域生成的所有关系Rn,都是这个笛卡儿积的子集。

例如除了 R1,我们还可以定义 R2,将R2 定义成由“R1 中的第 1 行和第 2 行”组成的关系。需要注意的是,元组个数为 0 的关系也是满足定义的(空集)。

关系的关系:

关系的封闭性

关系是集合的一种,他还有一个很重要的性质即“封闭性”(closure property):运算的输入和输出都是关系,换句话来说,就是“保证关系世界永远封闭”的性质。

SQL 中有各种各样的关系运算符。除了最初的投影、选择、并、差等基本运算符,SQL 后来又增加了许多非常方便的运算符,多亏了关系的封闭性,这些运算的输出才可以直接作为其他运算的输入。

因此,我们可以把各种操作组合起来使用,比如对选择后的集合求差等。这个性质也是子查询和视图等重要技术的基础。

关系的封闭性与 UNIX 中管道的概念很像,UNIX 中的文件也一样具有封闭性,可以作为各种命令的输入或者输出。

因此,可以像 cat sefon.txt | sort +1 | more 这样将命令组合在一起来编写脚本。这种写法让 UNIX 的脚本编程变得非常灵活。

UNIX 系统中,从设备到控制台,一切都可以当作“文件”来处理。因为从外观上来看,设备只不过是 /dev 目录下的一个普通文件而已。这是 UNIX 系统追求文件的封闭性的结果。表达 UNIX 设计理念的词语之一就是“泛文件主义”,即“一切皆文件主义” 。

在关系模型中,关系对关系运算符也是封闭的。

SQL SELECT 子句的输入输出都是表”也能得到证明。SELECT 子句其实就是以表(关系)为参数,返回值为表(关系)的函数。有时 SELECT 子句查询不到一条数据,然而这时会返回“空集”,而不是不返回任何内容。

仿照 UNIX 起名字的话,关系数据库的这个特性可以叫作“泛关系主义”。

综上所述,UNIX 的文件通过对 Shell 命令封闭实现了非常灵活的功能。同样地,关系通过对关系运算封闭,使 SQL 具有了非常强大的表达能力。

关系模型简介

关系模型

关系是集合的一种,关系模型是以数学中的集合论为基础的。

关系模型的创始人E.F. Codd1923—2003,他发表了两篇论文:

  1969 大型数据库中关系存储的可推导性、冗余与一致性

  1970 大型共享数据库的关系模型

上述两篇论文主要贡献可以归纳为以下三点:

  1. 定义了关系运算(relational calculus)。

  2. 定义了关系代数(relational algebra)。

  3. 采用谓词逻辑作为数据库操作的基础。

关系数据库采用的数据模型是关系模型,其实反过来说可能更合适,即数据库采用了关系模型,因此才被称为关系数据库。

备注:

正式的关系模型术语 非正式的日常用语

关系(relation) 表(table

元组(tuple) 行(row)或记录(record

势(cardinality) 行数(number of rows

属性(attribute) 列(column)或字段(field

度(degree) 列数(number of columns

定义域(domain) 列的取值集合(pool of legal values

谓词逻辑

谓词逻辑作为数据库操作的基础:

谓词是一种特殊的函数,返回值都是 truefalse 或者 unknown,谓词逻辑提供谓词是为了判断命题(可以理解成陈述句)的真假。

例如一张表中,一条数据name age为张三 35,我们可以认为这样一个命题:张三年龄是35,表通常可以认为是行的合集,从谓词的角度来看,也是命题的合集(陈述句的合集)。

平时使用的 WHERE 子句,其实也可以看成是由多个谓词组 合而成的新谓词。只有能让 WHERE 子句的返回值为真的命题,才能从表(命 题的合集)中查询到。“x = y”或“x BETWEEN y”等谓词可以取的参数是例如“9”或者“字符串”等。

运算基础

SQL的加减乘除

数学中会根据“对于什么运算是封闭的”这样的标准,将集合分为各种类型。这些对某种运算封闭的集合在数学上称为“代数结构”。其中,按照对四则运算是否封闭,可以把集合分为下面几类:

  群(group):对加法和减法(或者乘法和除法)封闭。

  环(ring):对加法、减法、乘法封闭。

  域(filed):对加法、减法、乘法、除法封闭,即可以自由进行四则运算。

关于“群”的具体示例,简单的说例如整数集,因为任何两个整数之间进行加法或者减法运算,结果一定还是整数。整数集也是环,但却不是域,比如 1÷2 的结果是小数,不满足封闭性。

如果将整数集扩展成有理数集或者实数集的话,那么结果就满足域的条件了。这是因为,使用实数自由地进行四则运算后,运算结果还是实数。

SQL 中的集合运算符可以实现,关系支持加法(UNION)运算和减法(EXCEPT)运算,因此满足群的条件。关系还支持相当于乘法运算的 CROSS JOIN,所以也满足环的条件。最后一个除法,关系中没有除法运算符,但是他有除法运算的定义。因此,关系也满足域的条件。从满足运算相关特征的观点来看,关系可以理解为“能自由进行四则运算的集合”。

C.J. Date Joe Celko 之所以非常重视除法运算,是因为一方面它的实用性高,另一方面他们深知只有定义了除法,关系才有资格成为域。

SQL的除法1

关系的除法实际上是一个关系的某些元素真包含另一个关系的某些元素的问题。

设关系 R 除以关系 S 的结果为关系 T ,则 T 包含所有在 R 中但不在 S 中的属性及其值,且 T 的元组与 S 的元组的所有组合都在 R 中。

R S 中发生重叠的属性是 Y ,除数 S S.y 的取值有 {q1, q2} ,再考虑被除数 R 中,R.y中包含 S.y {q1, q2} 的元素有 {p1, p2} ,其中 p1 对应的 R.Y 真包含 {q1, q2} , p2 对应的 R.y 直接等于 {q1, q2}

因此,R÷S的值就是关系T

SQL的除法2

以下有两张表,欲求shopitems中商铺卖的产品包含items表中所有数据的店铺:

SQL的除法3

还是刚刚的两张表,只选择没有剩余商品的店铺(店铺1和店铺3中有窗帘,但是我们的items表中并没有窗帘,于是我们将上步骤的结果中的店铺1去掉):

三值逻辑

为了兼容 NULL,关系数据库选择了允许空值(unknown)的三值逻辑来代替标准的二值逻辑。

一般逻辑学中,命题只包含“真”和“假”这两个可能值。而三值逻辑除了这两个值,还增加了表示“未知”状态的第三个值。

NULL的危害

1、在指定 IS NULLIS NOT NULL 的时候,不会用到索引,因而SQL 语句执行起来性能低下。

2、如果四则运算以及 SQL 函数的参数中包含 NULL,会引起“NULL的传播”:

  1 + NULL = NULL

  2 - NULL = NULL

  3 * NULL = NULL

  4 / NULL = NULL

  NULL / 0 = NULL

3、在接收 SQL 查询结果的宿主语言中,NULL 的处理方法没有统一标准。

4、与一般列的值不同,NULL 是通过在数据行的某处加上多余的位(bit)来实现的, NULL 会使程序占据更多的存储空间,使得检索性能变差。

一行数据在磁盘上的存储格式应该是下面这样的:

假设有个表的5个字段:name address gender job school ,其中的genderCHAR(1),其他的是VARCHAR(10~50不等)的字段类型,而除了第一个字段声明了NOT NULL的,其他4个字段都可能是NULL,则存储为:

变长字段长度列表 NULL值列表 头信息 column1=value1 column2=value2  ...  columnN=valueN

具体这条数据“jack NULL m NULL xx_school”的存储为:

0x09 0x04 00000101 头信息 column1=value1 column2=value2 ... columnN=valueN

消除NULL

简单的几个消除 NULL 的方法:

  (1) 首先分析能不能设置默认值。

  (2) 仅在无论如何都无法设置默认值时允许使用 NULL,例如:

  编号 :使用异常编号

  名字 :使用“无名氏”

  数值 :用 0 代替

  日期 :用最大值或最小值代替,例如1900-01-01

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

泽众RPA1.1.2产品升级,新增团队管理、用户管理、工作空间及自动化任务等功能,大幅提升工作效率

泽众RPA1.1.2产品升级&#xff0c;通过新增团队管理模块、用户管理模块、工作空间功能、定时任务功能以及Excel和网络指令&#xff0c;解决了团队协作与权限管理不精细、任务自动化水平有限以及数据处理和网络操作功能局限等问题。升级后的产品不仅提升了工作效率和团队协作能力…

【Qt常用控件】—— 显示类控件

目录 1.1 Label 1.2 LCD Number 1.3 ProgressBar 1.4 Calendar Widget 1.5 小结 1.1 Label QLabel 控件是 Qt 中用于显示文本或图像的部件&#xff0c;是用户界面开发中常用的组件之一。 核⼼属性如下&#xff1a; 属性 说明 text QLabel 中的⽂本 textFormat ⽂本的格…

MySQL主从结构搭建

说明&#xff1a;本文介绍如何搭建MySQL主从结构&#xff1b; 原理 主从复制原理如下&#xff1a; &#xff08;1&#xff09;master数据写入&#xff0c;更新binlog&#xff1b; &#xff08;2&#xff09;master创建一个dump线程向slave推送binlog&#xff1b; &#xff…

小瓶清洗桶抗酸碱耐高温PFA清洗器半导体实验清洗用

PFA清洗桶&#xff0c;也叫PFA清洗器、PFA小瓶清洗桶&#xff0c;主要用于清洗浸泡实验室小型PFA溶样罐和烧杯等&#xff0c;带有密封螺纹盖&#xff0c;可以用于摇晃&#xff0c;高纯耐高温材质可放置电热板上加热使用。 特点&#xff1a;可拆卸倒酸口&#xff0c;可安全倒出酸…

网络安全是否有需求

● 由于网络威胁数量不断增加&#xff0c;网络安全的需求很高。 ● 组织正在大力投资网络安全以保护其数据。 ● 就业市场缺乏熟练的网络安全专业人员。 ● 网络安全认证可以提升您在网络安全领域的职业前景。 ● 持续学习并了解最新的安全趋势在该领域至关重要。 随着对技术和…

如何优雅地Spring事务编程

本文已收录至Github&#xff0c;推荐阅读 &#x1f449; Java随想录 微信公众号&#xff1a;Java随想录 在开发中&#xff0c;有时候我们需要对 Spring 事务的生命周期进行监控&#xff0c;比如在事务提交、回滚或挂起时触发特定的逻辑处理。那么如何实现这种定制化操作呢&am…

windows安装nssm并将jar打包为服务

一、nssm 下载地址 二、安装nssm服务 将下载的压缩包复制到安装目录进行解压&#xff0c;解压后有两个版本 win32 和 win64&#xff0c;根据系统选择。打开系统 powershell 命令窗口&#xff0c;进入安装目录指定版本目录&#xff0c;就可以使用nssm服务了。 # 安装服务&…

接口测试和Mock学习路线(中)

1.什么是 swagger Swagger 是一个用于生成、描述和调用 RESTful 接口的 WEB 服务。 通俗的来讲&#xff0c;Swagger 就是将项目中所有想要暴露的接口展现在页面上&#xff0c;并且可以进行接口调用和测试的服务。 现在大部分的项目都使用了 swagger&#xff0c;因为这样后端…

SV-7041T IP网络有源音箱 教室广播多媒体音箱(带本地扩音功能)教学广播音箱 办公室背景音乐广播音箱 2.0声道壁挂式网络有源音箱

SV-7041T IP网络有源音箱 教室广播多媒体音箱&#xff08;带本地扩音功能&#xff09; 教学广播音箱 办公室背景音乐广播音箱 一、描述 SV-7041T是深圳锐科达电子有限公司的一款2.0声道壁挂式网络有源音箱&#xff0c;具有10/100M以太网接口&#xff0c;可将网络音源通过自带…

汇编期末复习知识点

参考文献1 第一章 概述 组成 计算机系统由硬件子系统和软件子系统组成。硬件子系统&#xff1a;组成计算机系统的所有电子的&#xff0c;机械的&#xff0c;光学的和磁性的元部件。 计算机中常用进制数表示 十进制(Decimal):数据尾部加一后缀D&#xff0c;如2355D二进制&a…

TFTLCD时序介绍(ILI9341 8080并口时序)

ILI9341 8080并口 ILI9341是一个常见的TFT LCD显示控制器&#xff0c;用于驱动各种小型和中型尺寸的液晶显示屏。它支持多种分辨率&#xff0c;最常见的是240x320像素。ILI9341控制器具有内置的GRAM&#xff08;Graphics RAM&#xff09;&#xff0c;可以通过SPI或8位并行接口…

初学python,怎样入门?

答案&#xff1a;乌龟绘图。 "乌龟绘图"通常指的是使用Logo语言的变种——Python中的turtle模块来进行图形绘制。在turtle模块中&#xff0c;一只名为“海龟”&#xff08;Turtle&#xff09;的小动物会在屏幕上移动&#xff0c;根据其行进路径来绘制图形。以下是一段…

百面算法工程师 | 激活函数 Activate Function

目录 10.1激活函数作用&#xff1a; 10.2 为什么激活函数都是非线性的 10.3 常见激活函数的优缺点及其取值范围 10.4 激活函数问题的汇总 10.4.1 Sigmoid的缺点&#xff0c;以及如何解决 10.4.2 ReLU在零点可导吗&#xff0c;如何进行反向传播 10.4.3 Softmax溢出怎么处…

如何解决非法采砂、过度开采的乱象?

非法采砂和过度开采是当今世界面临的重要环境问题之一。这些行为不仅破坏了生态平衡&#xff0c;还对河道安全、水资源保护等产生了严重影响。然而&#xff0c;经过多年的努力&#xff0c;河道采砂管理工作不断加强&#xff0c;全国采砂秩序总体可控。为了更有效地解决这一问题…

linux开发板开机启动向日葵

硬件&#xff1a;orangepi 5 pro 操作系统&#xff1a;ubuntu 20.4 lts 安装向日葵 根据我的实测&#xff0c;arm架构的ubuntu系统只能安装向日葵提供的麒麟系统的那个版本&#xff0c;具体安装方式官网下载页面有 允许任意用户连接到 X11 使用root用户登录后打开终端输入一下…

图形界面挂了?教你如何纯命令行下快速安装CentOS 7

在某些特定的系统或软件环境下&#xff0c;如使用 Parallels Desktop 18&#xff08;PD18&#xff09;虚拟化软件安装较老版本的操作系统&#xff08;如 CentOS 7&#xff09;&#xff0c;可能会遇到只能通过命令行进行安装的情况。这通常是由于内核版本与图形安装器的兼容性问…

docker系列7:docker安装ES

目录 传送门 Docker安装ES 确定版本 拉取镜像 执行拉取ES镜像 查看ES镜像 运行ES 创建一个新的docker网络 启动一个Elasticsearch容器 查看运行结果 ES启动内存不足 访问ES 公网访问 传送门 docker系列1&#xff1a;docker安装 docker系列2&#xff1a;阿里云镜…

血的教训之虚拟机重装[包含一系列虚拟机,c++,python,miniob配置]

一切都要从头开始&#xff0c;由于脑袋糊涂&#xff0c;没看到是虚拟机的文件&#xff0c;直接一口气全删掉了&#xff0c;哎&#xff01;&#xff01;数据恢复后发现也不行&#xff0c;磁盘文件还是缺失了一部分&#xff0c;只能重新再来了。 等待ing 看不到按钮&#xff0c;按…

前端CSS基础8(盒子模型(margin、border、padding、content))

前端CSS基础8&#xff08;盒子模型&#xff08;margin、border、padding、content&#xff09;&#xff09; CSS盒子模型CSS中常用的长度单位元素的分类&#xff0c;各个元素的显示模式修改元素的显示模式&#xff08;类型&#xff09;盒子模型的组成部分盒子内容区-contentCSS…

验证线缆(汽车线束、网线、多芯线)破损或断开与正常线缆的区别在哪里?依AEM CV-100 k50测试仪

工厂产线生产的线缆&#xff08;汽车线束、网线、多芯线&#xff09;做成成品&#xff0c;即2端都安装好了模块。在这种情况下如何快速的判定此条线缆是合格的呢&#xff0c;此处的合格为物理层面上的合格&#xff08;不会出现开路、短路&#xff09;&#xff0c;也就是最基本保…