数据库中范式_数据库 范式

数据库中范式_数据库 范式SQL基础随记3 范式 键 什么是范式?哈,自己设计会使用但是一问还真说不上来。遂将不太明晰的概念整体下 什么是 & 分类 范式(NF),一种规范,设计数据库模型时对关系内部各个属性之

SQL基础随记3 范式 键 - G

SQL基础随记3 范式 键

什么是范式?哈,自己设计会使用但是一问还真说不上来。遂将不太明晰的概念整体下

 

什么是 & 分类

范式(NF),一种规范,设计数据库模型时对关系内部各个属性之间的联系的合理化程度的不同等级的规范要求。

分类:

  • 1NF、2NF、3NF、BCNF(巴斯科德范式)、4NF、5NF(完美范式)

低阶范式是高阶范式的基础,范式等级越高冗余度越低,使用时越容易进行join

 

  • 超键:能唯一表示元组(元组也就是一行数据,一条记录)的属性的集合。超键可能包含多余属性。如身份证号+学生id+姓名
  • 候选键:不包含多余属性的超键。候选键可能不唯一,身份证号或学生id都可以当做候选键。
  • 主键
  • 外键

属性

  • 主属性:任意候选键的属性就是主属性
  • 非主属性

依赖

  • 依赖:一个或一组属性的值决定其他属性的值
  • 完全依赖:某个非主属性于所有主属性
  • 部分依赖
  • 传递依赖:若存在 “A>>B>>C”的依赖关系,则C传递依赖于A

 

Each NF

  • 1NF:表中任何属性都是原子性的(不可拆分的),所有 RDBMS都满足。

  • 2NF:任意一个非主属性都要与主属性/候选键完全依赖。

    若不满足2NF会造成

    • 数据冗余

    • 增删改异常

      不满足2NF举例

      球员id决定球员姓名等球员个人信息

      比赛id决定比赛时间、比赛场地等比赛信息

      若将上述所有属性放在一张表中就会造成

      • 数据冗余:异常比赛有n个球员参加,那么记录该场比赛n个球员信息时,对应的比赛信息就多余了n-1次

      • 增删改异常:仅根据球员id或比赛id进行操作时,

        增:不知道另一个主属性导致无法插入

        删:会删除另一个主属性以及其对应的信息

        改:修改信息时,有改信息的所有记录都要修改

  • 3NF:在第二范式的基础上,任意一个非主属性都不传递依赖于候选键

    不满足3NF但满足2NF举例

    表1:球员id、球员姓名、球队名称、主教练姓名

    球员姓名、球队名称、主教练姓名都可以由球员id决定

    但是主教练姓名也可以通过球队名称决定,这就出现了传递依赖

    如果我们将表1拆分成

    表2:球员id、球员姓名、球队名称

    表3:球队名称、主教练名称

    则满足3NF

 

致命总结

在第一范式的基础上,根据”非主完全依赖主属性”对所有属性进行划分并给每张表加id就满足第二范式,再细分属性消除传递依赖加上FOREIGN KEY就满足第三范式

BCNF、4NF、5NF查询效率极低,很少用到,开发效率和查询效率都很感人。

 

反范式

一般情况下,业务界面会显示用户姓名而不是用户ID,因此常常需要将user表与其他表连接查询。因此当数据量较大时可以将user id 与 use name 在其他常用表中“冗余”,这样可以只进行单表扫描。而不用在大数据量的情况下再连接查询。

反范式在OLAP场景比较常用,详见此处另见此处

数据库中范式_数据库 范式

 

 

反范式设计与数据仓库

数据仓库与数据库的区别:

  • 数据库用于捕获数据,数据仓库用于分析数据
  • 数据库对增删改实时性要求强,需要存储在线的用户数据。数据仓库一般是历史数据
  • 数据库要尽量避冗余,数据仓库的设计上更偏向反范式设计,因为历史数据往往很多。连接查询会大幅度拖慢速度。

 

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

(0)
上一篇 2023-03-17
下一篇 2023-03-18

相关推荐

  • 数据库主键约束「建议收藏」

    数据库主键约束「建议收藏」mssql数据库的主键约束中,主键名查询: 修改主键名称的方法:

    2022-12-19
    149
  • Python Dictionary 长度计算方法

    Python Dictionary 长度计算方法strongPython/strong是一个强大且易于学习的编程语言,它提供了多个重要的数据类型,其中之一就是字典(Dictionary)。在Python中,字典是一种无序的、可变的数据类型,其存储方式为键-值对。字典中的键必须是不可变的数据类型,如字符串、数字或元组。而值则可以是任何类型的Python对象。在这篇文章中,我们将会详细介绍如何用Python计算字典的长度。

    2024-02-22
    114
  • Python实现cumsum函数

    Python实现cumsum函数累计求和是在数学和统计学中一个非常重要的概念。在Python中,我们可以使用cumsum函数来完成累计求和的操作。

    2024-05-16
    78
  • redis速度慢_数据库性能慢了

    redis速度慢_数据库性能慢了本篇为Redis性能问题诊断系列的第四篇,也是最后一篇,主要从应用程序、系统、服务器硬件及网络系统等层面上进行讲解,重点分享了哪些配置需要重点关注和调整优化,才能最大程度的发挥Redis的处理能力;

    2023-06-06
    148
  • Mysql-connector「建议收藏」

    Mysql-connector「建议收藏」Mysql-connector-java驱动版本问题 由于我的数据库版本是5.7.28 ,在使用java连接mysql时经常出现版本问题。 com.mysql.jdbc.Driver 是 mysql-

    2023-04-17
    173
  • mysql is read only_MySQL uuid

    mysql is read only_MySQL uuid
    read_only 表示是否允许普通用户写入。如果为on,表示禁止普通用户写入。 super_read_only 表示是否禁止超级用户写入,包括普通用户,即…

    2023-04-08
    146
  • 远程链接 vps群控[亲测有效]

    远程链接 vps群控[亲测有效]远程链接 vps群控远程桌面是微软公司为了便于网络管理员管理维护服务器推出的一项服务。从windows 2000 server版本开始引入,网络管理员时候远程桌面连接器连接到网络任意一台开启了远程桌…

    2023-02-24
    150
  • MySQL学习总结之路(第四章:运算符)

    MySQL学习总结之路(第四章:运算符)目录 MySQL学习总结之路(第一章:服务与数据库管理) MySQL学习总结之路(第二章:表) MySQL学习总结之路(第三章:数据类型) MySQL学习总结之路(第四章:运算符) 1.1、算数运算符

    2023-04-15
    154

发表回复

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