SQL数据库学习总结(一)

SQL数据库学习总结(一)前序这是面向后端开发者的 SQL 数据库知识的一次总结 由于本人目前正在找工作 所以边学边做笔记 以便日后复习使用 SQL 数据库即结构化查询语言数据库 名字就说明了要学习的内容的两个特点 1 操作数据库的语言 2 语言的操作对象 在我个人看来了解语言的操作对象要必了解语言更加首 先 重 要 我对数据库的学习就是以数据库为核心 语言为辅助进行的 什么是结构化数据库

前序

构建关系数据库——范式的理解应用

关系数据库是创建在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示(维基百科)。由定义可知关系模型是关系数据库的核心所在。所以要构建关系数据库首先先要了解关系模型的基本概念。这里借用刘慰老师在知乎上的讲解内容做一次笔记以便日后复习,刘慰老师原文内容严谨思路清晰大家可从中获取真知灼见。原著给您指路如何解释关系数据库的第一第二第三范式?。
设 K 为某表中的一个属性或属性组,若除 K 之外的所有属性都完全函数依赖于 K(这个“完全”不要漏了),那么我们称 K 为候选码,简称为码。在实际中我们通常可以理解为:假如当 K 确定的情况下,该表除 K 之外的所有属性的值也就随之确定,那么 K 就是码。一张表中可以有超过一个码。(实际应用中为了方便,通常选择其中的一个码作为主码)
主属性包含在任何一个码中的属性成为主属性。
非主属性不是主属性的即为非主属性
函数依赖我们可以这么理解(但并不是特别严格的定义):若在一张表中,在属性(或属性组)X的值确定的情况下,必定能确定属性 Y Y Y的值,那么就可以说 Y Y Y函数依赖于 X X X,写作 X → Y X → Y XY。也就是说,在数据表中,不存在任意两条记录,它们在 X X X属性(或属性组)上的值相同,而在 Y Y Y属性上的值不同。这也就是“函数依赖”名字的由来,类似于函数关系$ y = f(x) , 在 ,在 x 的 值 确 定 的 情 况 下 , 的值确定的情况下, y$的值一定是确定的。说白了就是函数关系。
完全函数依赖在一张表中,若 X → Y X → Y XY,且对于 X X X的任何一个真子集(假如属性组 X X X 包含超过一个属性的话), X ′ → Y X ‘ → Y XY 不成立,那么我们称 Y Y Y对于 X X X完全函数依赖,记作 X ⟶ F Y X\stackrel{F}{\longrightarrow}Y XFY。说白了就是函数关系的完全映射。即自变量必须在其完整集合中取值才能取遍因变量集合内所有值。
部分函数依赖假如 Y Y Y函数依赖于 X X X,但同时 Y Y Y并不完全函数依赖于 X X X,那么我们就称 Y Y Y部分函数依赖于 X X X,记作 X ⟶ P Y X\stackrel{P}{\longrightarrow}Y XPY即非完全映射关系。
传递函数依赖假如 Z Z Z函数依赖于 Y Y Y, Y r i g h t a r r o w Z Yrightarrow Z YrightarrowZ,且 Y Y Y函数依赖于 X X X, X → Y X\rightarrow Y XY(前提条件: Y Y Y不包含于 X X X,且 X X X不函数依赖于 Y Y Y),那么我们就称 Z Z Z传递函数依赖于 X X X,记作 X ⟶ T Y X\stackrel{T}{\longrightarrow}Y XTY。前提条件解析: Y ⊈ X Y\not\subseteq X YX Y ↛ X Y\not\rightarrow X YX






什么是范式

范式就是依据关系模型的不同类别将数据表的划分为若干等级。我就会3个范式。

第一范式(1NF)

第一范式只是为了确保我们要创建的东西确实是一张表。第一范式的定义为:符合1NF的关系中的每个属性都不可再分。即表中的属性必须为基本数据类型,不然就没有办法创建表了。举例表一就不符合1NF所以不能被创建,因为其中的属性“销售”和“购进”不是基本属性(不能用基本数据类型表示),将表一改为表2就可以被创建了。
表一:
表一,源于刘慰老师的知乎文章
表二:
源于刘慰老师的知乎文章



第二范式(2NF)

2NF的定义为在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的非主属性都完全函数依赖与码。

第三范式(3NF)

3NF的定义为在满足2NF的基础上,非主属性不存在传递函数依赖与码。

创建一张符合1NF、2NF、3NF的表的过程

对数据表的操作——sql语句的使用

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/231042.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 公平洗牌算法_随机洗牌算法

    公平洗牌算法_随机洗牌算法要求:给定一个长度为n的有序数组,要求将其完全打乱,每个元素在任何位置出现的概率均为1/n。随机洗牌算法有好几个,这里讲其中的一个,Fisher-Yatesshuffle算法(时间复杂度为O(n)),其思路如下:(1)从数组中随机选取一个数p。(2)将p与数组中最后(也可以是最前)的元素交换。(如果随机选中的是最后的元素,则相当于没有发生交换)(3)去掉最后的元素(这里并没有删除操作,而是缩小索

    2022年9月21日
    4
  • lc5最长回文子串「建议收藏」

    lc5最长回文子串「建议收藏」publicclassSolution{publicStringlongestPalindrome(Strings){intlen=s.length();if(len<2){returns;}char[]charArray=s.toCharArray();//要的是回文子串而非仅仅要长度intmax..

    2022年7月24日
    12
  • echarts+vue_vue安装echarts

    echarts+vue_vue安装echarts1.安装cnpminstallecharts-wordcloud2.创建模板组件WordCloudChart<template><div:id=”id”:style=”{height:height,width:width}”/></template><script>importechartsfrom”echarts/lib/echarts”;importresizefrom”@/m

    2022年10月9日
    3
  • INT0中断_中断请求寄存器

    INT0中断_中断请求寄存器 当进程执行系统调用时,先调用系统调用库中定义某个函数,该函数通常被展开成前面提到的_syscallN的形式通过INT0x80来陷入核心,其参数也将被通过寄存器传往核心。 在这一部分,我们将介绍INT0x80的处理函数system_call。 思考一下就会发现,在调用前和调用后执行态完全不相同:前者是在用户栈上执行用户态程序,后者在核心栈上执行核心态代码。那么,为了保证在核心内部执行完系统调用…

    2025年11月5日
    4
  • Lunix操作「建议收藏」

    Lunix操作「建议收藏」pwd当前目录ls显示文件ls-a显示所有文件wenjianls-a~显示所有隐藏文件权限 用户所有者 文件大小 修改时间戳  文件名如果 test不存在使用 -p删除文件夹下所有文件和子目录删除一个目录-i带有交互的询问通配符匹配…

    2022年10月3日
    4
  • Java的八种基本数据类型

    Java的八种基本数据类型1.byte:字节1.计算机中,数据传输大多是以“位”(bit,比特)为单位。2.一位就代表一个0或1(二进制),每8个位(bit)组成一个字节(byte),所以,1个字节=8位0101代码。2.short3.int4.long5.float6.double7.char1.char类型占2个字节(16位),用来表示字符。2.char是基本数据类型。String表示字符串,是类类型。一个String是由0~n个char组成。3.字符使用单引号表示,字符串使用双引号表示。8.boolea

    2022年7月7日
    22

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号