数据苦库中的几种规范

1、数据库命名规范
一个项目组内所有设计数据库的程序员应当共同遵守统一的“数据库命名规范”。在本书的附录B中,我们提供了一个“数据库命名规范”实例,供大家参考。
2、数据库设计范式
关系数据库设计之时是要遵守一定的规则的。尤其是数据库设计范式,接下来简单介绍1NF(第一范式),2NF(第二范式),3NF(第三范式)和BCNF,另外还有第四范式和第五范式。在你设计数据库时,若能符合这几个范式,你就是数据库设计的高手。
(1)第一范式(1NF)
数据库表中的字段都是单一属性的,不可再分。这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期型等。
例如,电话的字段就可能不符合第一正规化,因为每个人可能有一个以上的电话需要记录,这时最简单的做法就是将字段增加,不要用电话当字段名称,用家里电话、手机、办公室电话、分机号码、宿舍电话等。

(2)第二范式(2NF)
规则是符合第一范式,而且没有部分主键功能决定其他属性的现象,也就是主键之外的其他属性都完全的功能相依于主键。
假定选课关系表为SelectCourse(学号,姓名,年龄,课程名称,成绩,学分),关键字为组合关键字(学号,课程名称),因为存在如下决定关系:(学号,课程名称)→(姓名,年龄,成绩,学分)。
这个数据库表不满足第二范式,因为存在如下决定关系:
    (课程名称)→(学分),即知道课程,就可以知道该课程的学分。
    (学号)→(姓名,年龄),即知道了学号,就可以知道该学生的姓名和年龄。
① 数据冗余
同一门课程由n个学生选修,“学分”就重复n1次;同一个学生选修了m门课程,姓名和年龄就重复了m1次。
② 更新异常
若调整了某门课程的学分,数据表中所有行的“学分”值都要更新,否则会出现同一门课程学分不同的情况。
③ 插入异常
假设要开设一门新的课程,暂时还没有人选修。这样,由于还没有“学号”关键字,课程名称和学分也无法记录入数据库。
④ 删除异常
假设一批学生已经完成课程的选修,这些选修记录就应该从数据库表中删除。但是,与此同时,课程名称和学分信息也被删除了。很显然,这也会导致插入异常。
把选课关系表SelectCourse改为如下三个表。
    学生:Student(学号,姓名,年龄)
    课程:Course(课程名称,学分)
    选课关系:SelectCourse(学号,课程名称,成绩)
这样的数据库表是符合第二范式的,消除了数据冗余、更新异常、插入异常和删除异常。
(3)第三范式(3NF)
在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三范式。
所谓传递函数依赖,指的是如果存在“A→B→C”的决定关系,则C传递函数依赖于A。因此,满足第三范式的数据库表应该不存在如下依赖关系:关键字段→非关键字段x→非关键字段y。
假定学生关系表为Student(学号,姓名,年龄,所在学院,学院地点,学院电话),关键字为单一关键字“学号”,因为存在如下决定关系:
    (学号)→(姓名,年龄,所在学院,学院地点,学院电话)
这个数据库是符合2NF的,但是不符合3NF,因为存在如下决定关系:
(学号)→(所在学院)→(学院地点,学院电话)
把学生关系表分为如下两个表。
    学生:(学号,姓名,年龄,所在学院);
    学院:(学院,地点,电话)。
(4)BCNF范式
BCNF范式(Boyce/Codd Normal Form),是由R.F.Boycy和E.F. Codd共同提出的,可以算成是第三正则化的补充,规则是符合第三正则化原则,并且没有非主键属性可以功能性决定部分主键的现象。
假设有一个表R,其中的属性有A,B,C,D,E,以A和B为复合主键,R={A,B,C,D,E},如果存在有非主键属性,比如说C可以功能性决定B,C→B,而B是主键的一部分,这时第三正则化是没有办法分辨出来这种错误的,所以有BCNF正则化规则来把关,同样地,BCNF正则化的方法也是将原来的表拆开,成立一个新的关联表R1来装C→B,R1={C,B},但原来的表R还是以(A,B)为复合主键,以B为外键关联到新的表去,以保留原有的信息。
R={A,B,D,E},R1={C,B},R.B=R1.B

数据苦库中的几种规范相关推荐

  1. (曲率系列3:)PCL:PCL库中的两种曲率表示方法pcl::NormalEstimation和PrincipalCurvaturesEstimation

    PCL里有两个计算曲率的调用函数: (1)pcl::NormalEstimation 这里边计算的曲率不是数学上定义的曲率. (2)pcl::PrincipalCurvaturesEstimation ...

  2. RTSP客户端接收存储数据(live555库中的openRTSP实例)

    一.openRTSP编译运行 a)windows下编译运行 还是以mediaServer作为服务端,openRTSP作为客户端 b)Linux下编译运行 转自http://kuafu80.blog.1 ...

  3. imgaug数据增强库中常用的增强器

    Overview of Augmenters: https://imgaug.readthedocs.io/en/latest/source/overview_of_augmenters.html 1 ...

  4. c# 中添加数据到数据库中的三种方法

    1.利用SQL语句添加    在SQL语句中提供了INSERT语句进行数据添加,其语法格式如下. INSERT [Into] table_name[(column_list)] values (dat ...

  5. mybatis批量插入数据到Oracle中的两种方式

    文章目录 1. 第1种 2. 第2种 1. 第1种 <insert id="addList" parameterType="java.util.List" ...

  6. 批量插入数据库语句java_java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码)...

    java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码) 发布于 2020-7-22| 复制链接 本文通过实例代码给大家分享了MyBatis批量插入数据到Oracle数据库 ...

  7. Neoj图数据科学库(The Neo4j graph data science library)使用指南

    目录 介绍 算法 图目录 版本 安装 支持的Neo4j版本 Neo4j Desktop Neo4j Server Enterprise 版本配置 Neo4j Docker Neo4j Causal C ...

  8. python加数据库_用python批量插入数据到数据库中

    既然使用python操作数据库必不可少的得使用pymysql模块 可使用两种方式进行下载安装: 1.使用pip方式下载安装 pip install pymysql 2.IDE方式 安装完成后就可以正常 ...

  9. cass里填充面怎么导入arcgis_ArcGIS与CASS在地籍建库中的结合应用视频课程(GIS思维)...

    ArcGIS与CASS在数据建库中的结合应用 1 地籍概要介绍 介绍地籍的一些主要概念,理清你对地籍的理解 2 项目场景假设 2.1 项目数据介绍 介绍本次课程假设的项目用到的数据,以及拓展宗地编码的 ...

  10. ajax上传多文件和数据,Ajax上传数据和上传文件(三种方式)

    Ajax向后端发送数据可以有三种方式:原生Ajax方式,jQuery Ajax方式,iframe+form 方式(伪造Ajax方式) Title .btn { background-color: co ...

最新文章

  1. seaborn将图例放置在图像外部并使用move_legend函数将图例(legend)放置在图像的顶部、且单行展开显示
  2. android notification 的总结分析
  3. WeUI 专为微信Web服务量身定制
  4. Python 的切片语法为什么不会出现索引越界呢?
  5. 科学计算机计算内插法,线性插值计算器
  6. html关闭广告代码,JS实现可点击展开与关闭的左侧广告代码
  7. 移动端自动化测试实战(一)
  8. 【朝花夕拾】Lint篇
  9. 戴尔服务器引导盘装2008,DELL R720服务器安装Windows Server 2008 R2系统的图文详解
  10. 【Linux】树莓派控制人体红外传感器
  11. java制作手机投射电脑_将Android手机投影到Win10计算机的最简单教程
  12. 嵌入式linux与pc串口传输文件基于lrzsz
  13. vmware启动虚拟机提示“无法连接虚拟设备ide1:0,主机上没有相对应的设备“
  14. 【科软课程-信息安全】Lab12 SQL Injection Attack
  15. bootstrap4 调整元素之间距离 margin 和padding
  16. 堪称「神器」的电脑软件
  17. 1 0.99999的悖论_公交车总迟到?你大概掉进了“等待时间悖论
  18. 全面质量管理的常用长种工具
  19. html 点击后上下滚动效果,css 上下滚动效果
  20. 图灵奖:Tony Hoare、John Edward Hopcroft和Barbara Liskov

热门文章

  1. babel-preset-env使用介绍
  2. 很吊炸天的Xcode插件,你想要的这都有
  3. windows自动设置ip地址脚本
  4. kindeditor 文件上传在 spring mvc下的使用
  5. php数组的概述及分类与声明
  6. WPF依赖属性(续)(4)依赖属性与数据绑定
  7. c#截取两个指定字符串中间的字符串
  8. asp.net—单例模式
  9. 实验五:编写、调试具有多个段的程序
  10. springBoot springSecurty: x-frame-options deny禁止iframe调用