首页 > 数据库 >SQL基础总结(一):关系模型

SQL基础总结(一):关系模型

时间:2023-09-14 14:09:15浏览次数:41  
标签:总结 组合键 依赖 范式 非键列 模型 满足 SQL 主键


本系列blog源自前年写的SQL学习笔记,汇总一下发上来。

---------------------------------------------------------------

 

规范化

父子表图示:由父表画出主键画出箭头指向子表外键。

满足第一范式的表:列包含原子值,没有重复的组。

 

当满足下列条件时第一范式的表自动满足第二范式的表:

1.主键是一个列(也就是说不是复合主键)。

2.表中所有列是主键的一部分。

 

满足第二范式的表:

1.  满足第一范式。

2.  非部分函数依赖(完全函数依赖)。

部分函数依赖是指表中一些组合键(不是全部组合键)的值可以确定一个非键列的值。

 

第二范式表是完全函数依赖,意味着如果组合键中任何一列值改变,将导致非键列的值需要更新。即全部组合键决定一个非键列。

 

满足第三范式的表:

1.  满足第二范式。

2.  没有传递依赖。

传递依赖:一个非键列的值决定另一个非键列的值,则表包含传递依赖。

 

BC范式:是更严格的第三范式版本。BC范式处理那些有多个候选键、组合候选键或重叠候选键的表。如果每个完全函数依赖的列都是候选键,则满足BC范式。

 

满足第四范式的表:

1.  是BCNF。

2.  没有多值依赖。

多值依赖:一个表至少3列,一列中多个行的值与其它列中一行的值匹配,则发生多值依赖。

 

满足第五范式的表:

1.  满足4NF。

2.  并且没有联结依赖。联结依赖是多值依赖的泛化。

5NF的目标是使表不能进一步分解为多个更小的表。

 

在实际数据库中,会看到1NF、2NF、3NF,偶尔有4NF,4NF甚至3NF的表也几乎总是5NF的。

 

非规范化

为了加快查询速度可能需要转而将数据库非规范化。较少的表会减少计算机联结和磁盘I/O操作的开销。这种常见的方法是为了性能而牺牲数据完整性。

非规范化数据的一个普通用途是用作从其它表复制过来数据的永久日志。

标签:总结,组合键,依赖,范式,非键列,模型,满足,SQL,主键
From: https://blog.51cto.com/u_6978506/7469644

相关文章

  • SQL基础总结(二):SQL基础
    本系列blog源自前年写的SQL学习笔记,汇总一下发上来。--------------------------------------------------------------- 标识符是可以在数据库对象(任何create语句所创建的内容)层次中明确的引用一个对象的名称。 标准的SQL区分保留关键字和非保留关键字。不可以用保留关键字作......
  • SQL基础总结(三):从表中检索数据
    本系列blog源自前年写的SQL学习笔记,汇总一下发上来。---------------------------------------------------------------使用DISTINCT消除重复的行。虽然空值是未知的,但彼此绝不相等,但DISTINCT认为空值是彼此相等的。对于DISTINCT操作,DBMS执行内部排序去识别并消除重复的行。排序......
  • mysql事务回滚
    前几天发现程序有个Bug:使用JPA已经设置了回滚,但抛出异常后,提交的事务并没有回滚。刚开始以为是JPA使用问题,debug了近2个多小时竟然找不到原因。后来上网查了一下,才发现不是程序问题(坑爹啊,看来自己对mysql还是不熟),是数据库表问题(JPA自动建表)。原因如下:mysql建表时如果指定ENG......
  • SQL基础总结(四):操作符和函数
    本系列blog源自前年写的SQL学习笔记,汇总一下发上来。(1月份发了前三篇笔记,原以为后面的笔记误操作删了,今天在硬盘里又找到了,一起发上来)--------------------------------派生列是一个计算结果。派生列不会成为表中的永久列,他们用于显示或者报表目的。 包含空值的任何算数运算的......
  • SQL基础总结(六):联结
    本系列blog源自前年写的SQL学习笔记,汇总一下发上来。(1月份发了前三篇笔记,原以为后面的笔记误操作删了,今天在硬盘里又找到了,一起发上来)--------------------------------限定名称是一个表名后跟一个点号和表中的列名。限定名称可以在整个数据库中唯一的标识出某个列。如:table.colu......
  • SQL基础总结(七):子查询
    本系列blog源自前年写的SQL学习笔记,汇总一下发上来。(1月份发了前三篇笔记,原以为后面的笔记误操作删了,今天在硬盘里又找到了,一起发上来)--------------------------------不要在子查询中使用ORDERBY子句,子查询返回的中间结果是看不到的,对子查询排序没有意义。子查询是单个SELECT......
  • SQL基础总结(五):汇总和分组数据
    本系列blog源自前年写的SQL学习笔记,汇总一下发上来。(1月份发了前三篇笔记,原以为后面的笔记误操作删了,今天在硬盘里又找到了,一起发上来)-------------------------只对单个值进行操作的是标量函数。对一组值进行操作以产生一个汇总值的是SQL聚合函数或集合函数。可以对行的集合进行......
  • SQL基础总结(十一):视图
      本系列blog源自前年写的SQL学习笔记,汇总一下发上来。(1月份发了前三篇笔记,原以为后面的笔记误操作删了,今天在硬盘里又找到了,一起发上来)--------------------------------除了ORDERBY子句通常是被禁止的,几乎所有有效的SELECT语句都可以定义视图。可以嵌套视图,视图的SELECT语句......
  • SQL基础总结(九):插入更新删除行及创建更新删除表
    本系列blog源自前年写的SQL学习笔记,汇总一下发上来。(1月份发了前三篇笔记,原以为后面的笔记误操作删了,今天在硬盘里又找到了,一起发上来)--------------------------------插入更新删除行 使用INSERT插入行INSERTINTOtableVALUES(value1,value2,value3…);INSERTINTOtable(col......
  • SQL基础总结(八):集合操作
    本系列blog源自前年写的SQL学习笔记,汇总一下发上来。(1月份发了前三篇笔记,原以为后面的笔记误操作删了,今天在硬盘里又找到了,一起发上来)--------------------------------使用UNION合并行UNION操作将两个查询返回的结果合并成一个结果。UNION从结果中去掉重复的行,UNIONALL不去掉重......