前序

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

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

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

什么是范式

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

第一范式(1NF)

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

表二:

第二范式(2NF)

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

第三范式(3NF)

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

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

例题:如下表所示

请将此表改为符合1NF、2NF、3NF的表。
1NF:只要能够将表中的各个属性找到对应的基本数据类型就可以说明此表就是1NF的表,如果不能找到对应的基本数据类型就将次属性在分割,知道可以找到能表示其属性的基本数据类型为止。从上表可以看出学号、姓名、系名、系主任、课名和分数可以分别用以下基本数据类型表示:varchar(10)、varchar(20)、varchar(10)、varchar(20)、varchar(20)、unsigned int。所以上述表就是1NF。
2NF:即将此表改造为完全函数依赖的表。其步骤如下:
第一步:找出数据表中所有的码(学号+课名)。
第二步:根据第一步所得到的码,找出所有的主属性(学号、课名)。
第三步:数据表中,除去所有的主属性,剩下的就都是非主属性了(姓名、系名、系主任、分数)。
第四步:查看是否存在非主属性对码的部分函数依赖(学号⟶P课名学号\stackrel{P}{\longrightarrow}课名学号⟶P​课名,学号⟶P分数学号\stackrel{P}{\longrightarrow}分数学号⟶P​分数,分数⟶P课名分数\stackrel{P}{\longrightarrow}课名分数⟶P​课名)。
根据上面的四步最总可以创建出如下关系图:

3NF:

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

SQL数据库学习总结(一)相关推荐

  1. SQL 数据库学习04 ADB.NET

    文章目录 ADO.NET 数据库连接示例 构造连接字符串的其他方法 SqlConnectionStringBuilder/读取配置文件 Try...catch/Using 连接池 执行命令,增删改查 ...

  2. SQL 数据库 学习 003 什么是数据库? 为什么需要数据库?是不是所有的软件都是用Sql Server?

    什么是数据库? 为什么需要数据库? 是不是所有的软件都是用Sql Server? 我的电脑系统: Windows 10 64位 使用的SQL Server软件: SQL Server 2014 Exp ...

  3. 下面为初学者分享一下SQL 数据库学习资料

    一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- ...

  4. SQL数据库学习-简单查询

    SQL 指结构化查询语言 SQL 使我们有能力访问数据库 SQL 是一种 ANSI 的标准计算机语言 存在着很多不同版本的 SQL 语言,但是为了与 ANSI 标准相兼容,它们必须以相似的方式共同地来 ...

  5. SQL 数据库 学习 011 关系、一对一、一对多、多对多

    我的电脑系统:Windows 10 64位 SQL Server 软件版本: SQL Server 2014 Express 什么是关系 定义: 表和表之间的联系. 实现方式: 通过设置不同形式的外键 ...

  6. SQL 数据库 学习 017 查询-00 介绍 scott 例子库

    我的电脑系统:Windows 10 64位 SQL Server 软件版本: SQL Server 2014 Express 我们要查数据,总先得有数据要查吧,所以我们需要先找一个例子库.Orale软 ...

  7. SQL数据库学习之路(九)

    目录 数据库创建补充: 为数据库用户赋予权限 在数据库表中使用视图进行添加修改 数据库创建补充: 以文本格式显示自己创建的数据库表                                    ...

  8. SQL数据库学习之路(五)

    一.查询 1.为表起别名as. select *from ClassId as id  --选择ClassId 表,起别名为id(一般因为原来名字太长所以起短一点的别名) 2.查询全部列,指定列.为列 ...

  9. 局域网访问mysql失败_连接局域网sql数据库服务器失败

    SQL数据库学习之路(八) 数据库介绍: 在网页上的主程序中进行注册操作,然后把数据发送给人,人传递这些数据到数据库当中. 为什么学ADO.NET:之前我们所学的只能在查询分析器中查看数据,操作数据. ...

  10. Unity + SQL数据库创建管理玩家排行榜学习教程

    Unity + SQL Databases Player Management Leaderboards + More! Unity + SQL数据库玩家管理排行榜+更多! MP4 |视频:h264, ...

最新文章

  1. GTK+, Qt, wxWidgets compare
  2. 向高手进阶,从 0 开始手写实现一个 RPC 框架!
  3. Oracle导出表(即DMP文件)的两种方法
  4. 一个很好的练听力的网站
  5. 细胞冻存及细胞计数的技巧
  6. 有道云笔记的word文档导入功能
  7. 【Java】基本语法训练题
  8. c语言 傲娇的十六进制,语言拟人向:来自Python、JAVA、C语言的“傲娇”自我介绍...
  9. MDT2010-windows 7镜像捕获与模板镜像部署(二)(特别版)
  10. Git拉取指定远程分支
  11. 读取hdr图像_HDR和蓝光哪个更清晰?画质更好?
  12. Java基础案例教程_Java基础案例教程答案
  13. Beaglebone Black – 智能家居控制系统 LAS - 插座组装
  14. Foundry 中文文档发布啦
  15. 帝国时代3如何快速实现增加主城生命值
  16. 乐视tv真机开发调试,乐视盒子开发者模式,乐视android 开发调试模式
  17. Google搜索引擎使用技巧
  18. 开源自主导航小车MickX4(三)底盘ROS节点
  19. 机器人编程与python语言的区别_少儿编程和机器人编程的区别有哪些?
  20. STC单片机操作系统——RTX51 Tiny

热门文章

  1. 面试总结:测试常见面试题汇总
  2. 使用canvas保存网页为pdf文件支持跨域
  3. S MT 精密电阻 对照 表
  4. 通过分享后的百度网盘链接获取外链图片地址
  5. 程序员职场突破——建立优势策略,找到职业突破发力点
  6. 最常用三极管导通电路
  7. 椭球面上的几种曲率半径
  8. 在线数学函数画图工具 2D 3D
  9. kali利用fluxion无线网络钓鱼
  10. 海思AI芯片3559A方案学习(二)NFS搭建及ping测试