笔试题之数据库

数据库设计六大范式,你真的懂了吗? 摘要:数据库范式理论包括1NF到5NF六个层级,各范式间存在包含关系(5NF⊆4NF⊆BCNF⊆3NF⊆2NF⊆1NF)。1NF要求数据不可再分;2NF消除非主属性对主键的部分依赖;3NF消除传递依赖;BCNF要求所有属性完全依赖候选键;4NF处理多值依赖;5NF强调连接属性必须为候选键。实际应用中通常只需满足前三个范式,因为高范式虽能减少冗余,但会增加连接操作影响性能,需在数据规范化和查询效率间取得平衡。 阅读详情

一 定义

超键(super key):在关系中能唯一标识元组的属性集称为关系模式的超键

候选键(candidate key):不含有 多余属性 的超键称为候选键

主键(primary key):用户选作元组标识的一个候选键程序主键

事实上,关系模型不允许表格包含有重复记录。所以,一个表格里字段或者列的值必须是唯一的。唯一性可以通过检查key(关键字)来确定,关键字可以由一个单列或者列的组合构成,这样的列叫做composite key(复合关键字)。
  
  关键字有很多不同的类型:
  
  超关键字(Super key):唯一辨别表格里记录的一个列或者一组列。 
  备选关键字(Candidate key):包含有确定唯一性所需要的最少列的超关键字。 
  主关键字(Primary key):用来唯一辨别表格里记录的备选关键字。 
  备用关键字(Alternate key):没有被选为主关键字的备选键。 
  外来关键字(Foreign key):表格内匹配同一表格或者另一表格里备选关键字的一个列或者一组列。外来键允许你将一个表格里的记录和另一个表格里的数据相关联。 
  
  这里列出来的关键字的类型并不是相互排斥的;一个关键字可以同时被归入多个类。从定义上说,每个表格必须至少有一个主关键字。
二   范式

原帖:http://jacki6.iteye.com/blog/774866

数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常。反之则是乱七八糟,不仅给数据库的编程人员制造麻烦,而且面目可憎,可能存储了大量不需要的冗余信息。

 

范式说明

 

1.1 第一范式(1NF)无重复的列

 

    所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。简而言之,第一范式就是无重复的列。

 

说明:在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。

 

例如,如下的数据库表是符合第一范式的:

 

 

字段1

字段2

字段3

字段4

 

而这样的数据库表是不符合第一范式的:

 

 

字段1

字段2

字段3

字段4

 

 

字段3.1

字段3.2

 

     

 

数据库表中的字段都是单一属性的,不可再分。这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期型等。很显然,在当前的任何关系数据库管理系统(DBMS)中,傻瓜也不可能做出不符合第一范式的数据库,因为这些DBMS不允许你把数据库表的一列再分成二列或多列。因此,你想在现有的DBMS中设计出不符合第一范式的数据库都是不可能的。

 

1.2 第二范式(2NF)属性完全依赖于主键 [ 消除部分子函数依赖 ]

 

如果关系模式R为第一范式,并且R中每一个非主属性完全函数依赖于R的某个候选键, 则称为第二范式模式。

第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。这个惟一属性列被称为主关键字或主键、主码。

 

例如员工信息表中加上了员工编号(emp_id)列,因为每个员工的员工编号是惟一的,因此每个员工可以被惟一区分。

简而言之,第二范式(2NF)就是非主属性完全依赖于主关键字。

 

所谓完全依赖是指不能存在仅依赖主关键字一部分的属性(设有函数依赖W→A,若存在XW,有X→A成立,那么称W→A是局部依赖,否则就称W→A是完全函数依赖)。如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。

 

假定选课关系表为SelectCourse(学号, 姓名, 年龄, 课程名称, 成绩, 学分),关键字为组合关键字(学号, 课程名称),因为存在如下决定关系:

 

(学号, 课程名称) → (姓名, 年龄, 成绩, 学分)

 

这个数据库表不满足第二范式,因为存在如下决定关系:

 

(课程名称) → (学分)

 

(学号) → (姓名, 年龄)

 

即存在组合关键字中的字段决定非关键字的情况。

 

由于不符合2NF,这个选课关系表会存在如下问题:

 

(1) 数据冗余:

 

同一门课程由n个学生选修,"学分"就重复n-1次;同一个学生选修了m门课程,姓名和年龄就重复了m-1次。

 

(2) 更新异常:

 

若调整了某门课程的学分,数据表中所有行的"学分"值都要更新,否则会出现同一门课程学分不同的情况。

 

(3) 插入异常:

 

假设要开设一门新的课程,暂时还没有人选修。这样,由于还没有"学号"关键字,课程名称和学分也无法记录入数据库。

 

(4) 删除异常:

 

假设一批学生已经完成课程的选修,这些选修记录就应该从数据库表中删除。但是,与此同时,课程名称和学分信息也被删除了。很显然,这也会导致插入异常。

 

把选课关系表SelectCourse改为如下三个表:

 

学生:Student(学号, 姓名, 年龄);

 

课程:Course(课程名称, 学分);

 

选课关系:SelectCourse(学号, 课程名称, 成绩)。

 

这样的数据库表是符合第二范式的, 消除了数据冗余、更新异常、插入异常和删除异常。

 

另外,所有单关键字的数据库表都符合第二范式,因为不可能存在组合关键字。

 

1.3 第三范式(3NF)属性不依赖于其它非主属性 [ 消除传递依赖 ]

 

如果关系模式R是第二范式,且每个非主属性都不传递依赖于R的候选键,则称R为第三范式模式。

    满足第三范式(3NF)必须先满足第二范式(2NF)。第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。

 

例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在的员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。

 

第三范式(3NF):在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三范式。简而言之,第三范式就是属性不依赖于其它非主属性。

 

所谓传递函数依赖,指的是如果存在"A → B → C"的决定关系,则C传递函数依赖于A。

 

因此,满足第三范式的数据库表应该不存在如下依赖关系:

 

关键字段 → 非关键字段x → 非关键字段y

 

假定学生关系表为Student(学号, 姓名, 年龄, 所在学院, 学院地点, 学院电话),关键字为单一关键字"学号",因为存在如下决定关系:

 

(学号) → (姓名, 年龄, 所在学院, 学院地点, 学院电话)

 

这个数据库是符合2NF的,但是不符合3NF,因为存在如下决定关系:

 

(学号) → (所在学院) → (学院地点, 学院电话)

 

即存在非关键字段"学院地点"、"学院电话"对关键字段"学号"的传递函数依赖。

 

它也会存在数据冗余、更新异常、插入异常和删除异常的情况,读者可自行分析得知。

 

把学生关系表分为如下两个表:

 

学生:(学号, 姓名, 年龄, 所在学院);

 

学院:(学院, 地点, 电话)。

 

这样的数据库表是符合第三范式的,消除了数据冗余、更新异常、插入异常和删除异常。

 

1.4 鲍依斯-科得范式(BCNF是3NF的改进形式)

 

若关系模式R是第一范式,且每个属性都不传递依赖于R的候选键。这种关系模式就是BCNF模式。即在第三范式的基础上,数据库表中如果不存在任何字段对任一候选关键字段的传递函数依赖则符合鲍依斯-科得范式。

存在候选关键字之间的依赖。

 

假设仓库管理关系表为StorehouseManage(仓库ID, 存储物品ID, 管理员ID, 数量),且有一个管理员只在一个仓库工作;一个仓库可以存储多种物品。这个数据库表中存在如下决定关系:

 

(仓库ID, 存储物品ID) →(管理员ID, 数量)

 

(管理员ID, 存储物品ID) → (仓库ID, 数量)

 

所以,(仓库ID, 存储物品ID)和(管理员ID, 存储物品ID)都是StorehouseManage的候选关键字,表中的唯一非关键字段为数量,它是符合第三范式的。但是,由于存在如下决定关系:

 

(仓库ID) → (管理员ID)

 

(管理员ID) → (仓库ID)

 

即存在关键字段决定关键字段的情况,所以其不符合BCNF范式。它会出现如下异常情况:

 

(1) 删除异常:

 

当仓库被清空后,所有"存储物品ID"和"数量"信息被删除的同时,"仓库ID"和"管理员ID"信息也被删除了。

 

(2) 插入异常:

 

当仓库没有存储任何物品时,无法给仓库分配管理员。

 

(3) 更新异常:

 

如果仓库换了管理员,则表中所有行的管理员ID都要修改。

 

把仓库管理关系表分解为二个关系表:

 

仓库管理:StorehouseManage(仓库ID, 管理员ID);

 

仓库:Storehouse(仓库ID, 存储物品ID, 数量)。

 

这样的数据库表是符合BCNF范式的,消除了删除异常、插入异常和更新异常。

 

四种范式之间存在如下关系:

 

       
 
                     



数据库原理-模式分解算法详解(3NF BCNF) 模式分解算法模式分解的要求无损连接保持函数依赖模式分解的算法范式简述3NF的保持依赖性分解3NF的无损连接与依赖保持分解BCNF的无损连接分解 模式分解的要求 无损连接 保持函数依赖 模式分解的算法 范式简述 3NF的保持依赖性分解 3NF的无损连接与依赖保持分解 BCNF的无损连接分解 ... 阅读详情

相关推荐

软件测试工程师笔试题中数据库试题集锦

测试空间旗下大头针出品学校有个面试题集锦的目录,好长时间,学员们也比较感兴趣,但就是没有答案,所以今天把里面有关于数据库方面的笔试题提取出来,做了一份参考答案.希望有助于以后学员找工作. 一.博彦SQL语句考察(1)建表TEST,包含3个字段A1 整形, A2 时间形,A3 字符形(20),(2)分别写出2条能成功插入数据的语句和3条不能成功插入的语句(3)找出

大头针的专栏 1万+

数据库范式(1NF 2NF 3NF BCNF)详解一

数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常。反之则是乱七八糟,不仅给数据库的编程人员制造麻烦,而且面目可憎,可能存储了大量不需要的冗余信息。

aaaaaaaa0705的专栏 2604

数据库经典笔试题

EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是 返回值True或False。那么, 这里我们来看一下 in和exists的区别 : ①in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。 ②一直以来认为 exists比in效率高的说法是不准确的 。

m0_49428126的博客 3214

数据库常见4种范式

常见的4种数据库设计范式

NorthSmile的博客 5476

VS2019安装配置全指南:组件选择、密钥与常见坑位一次搞定

软件开发环境搭建中,IDE安装看似简单,实际涉及组件化下载、工作负载配置、工具链验证等多个环节。Visual Studio 2019采用引导器加动态组件交付模式,理解其“组件清单”机制是高效部署的基础。针对C++桌面开发、Python脚本或Qt界面工程,合理勾选工作负载并维护离线安装包缓存,可大幅提升多机部署效率。使用过程中,产品密钥激活、MSVC v141/v142工具集切换、UTF-8编码乱码、Intel Fortran集成恢复等问题,都有固定解法。安装完成后,通过编译最小C++工程并验证cl与CMak

weixin_33796205的博客 1118

数据库入门(一)范式理解:1NF,2NF,3NF,BCNF,4NF详析

数据库入门(一)范式理解:1NF,2NF,3NF,BCNF,4NF详析引言范式种类第一范式(1NF)符合1NF的关系中的每个属性都不可再分存在问题第二范式(2NF)在1NF基础上消除了非主属性对码的部分函数依赖二范式判断步骤优缺点第三范式(3NF)在2NF基础上消除非主属性对码的传递函数依赖优缺点BCNF范式(3NF的改进形式)BCNF条件为什么引入BCNF解决方法第四范式(4NF)相关概念介绍多值依赖Teaching模式中存在的问题平凡函数依赖和非平凡的函数依赖多值依赖与函数依赖的区别了解4NFPoint总结 引言 Normal Form范式是“符合某一种级别的关系模式的集合,表示一个关系内

朋友的文思数据仓库笔试题

<br />朋友的文思数据仓库笔试题<br />下面三道题目是我一个去文思创新面试数据仓库职位的朋友带回来的笔试题。号称税后12k的职位,大家也可以尝试一下,当然不是写出来就有12k,但是要写不出来就肯定没有。。。下面写下自己的大概思路和解法。<br />Requirement:<br />1. Use T-SQL answer these questions.<br />2. Your answer can be ran by SSMS<br />3. Using your best way answer

mccc_46839363的专栏 1642

MCU 微控制器,在实际项目中如何选型(以 STM32为例)

1.MCU 选型需要考虑的一些因素 2.案例:传感器设备的 MCU 选型

创享 AIOT 的专栏 1万+

java笔试题 数据库

实现"Java笔试题数据库"的流程 1. 创建数据库 首先,我们需要创建一个数据库来存储Java笔试题的数据。我们可以使用MySQL数据库来实现这一步。 登录后复制 // 创建数据库连接 Connection connection = DriverManager.getConnection("jdbc:mysql://l...

weixin_32666933的博客 126

别再瞎试了!用Python+正交设计,5分钟搞定你的多因素实验方案

本文介绍了如何利用Python和正交设计高效优化多因素实验方案。正交设计通过精心设计的正交表,用最少的实验次数覆盖所有因素的水平组合,显著提升实验效率。文章详细讲解了正交设计的核心优势、Python实现工具链、实验实施与数据分析方法,以及高级技巧与常见问题解决方案,帮助读者快速掌握这一强大的实验优化技术。

weixin_42526087的博客 331

Python-OpenCV及cv2,numpy库最新安装教程[最全步骤]

安装教程目录前言OpenCV-Python安装教程报错解决cv2安装numpy安装opencv安装(附加)总结 前言 首先,我知道一些看到我的Blog的人已经在网上找了很多歪路子,现在已经火冒三丈了(我也是这样过来的hhhh),那么现在,深呼吸,跟着我的教程,不要着急,每一步都要读一遍。完整安装过程需要1个小时左右(仅供参考,本人第一次安装python花了一天(确信)) OpenCV-Python...

qq_45425286的博客 7430

【金三银四】分享数据库笔试题及答案~~

你是否在面试中遇到过关于数据库的笔试题?如何高效地准备这些题目,提升自己的竞争力?本文将为你整理一些经典的数据库笔试题及其答案,助你备战面试。金三银四马上来了,测试年限较短难免会碰到笔试题,最近就收到一些求职小伙伴反馈过来的数据库笔试题,说不太会做。特意做了下摘录及答案整理,给大家做个分享。如果不想笔试受挫的宝子,一定要牢牢码住!并多多练习!在求职季节,尤其是金三银四期间,许多测试人员面临数据库相关的笔试题目。掌握常见的数据库笔试题及其解答,对于提升面试通过率至关重要。

朱雀随云记的博客 1301

弹窗提示报错: F:\c\CFX5\bin\Debug\net9.0-windows10.0.26100.0\CFX5.dll 面向无法动态枚举工具箱项目的平台...如何解决?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 944

数据库笔试题及答案

以下为某公司的数据库笔试题及个人整理的答案,小伙伴们有更好的答案欢迎指教!数据表Student(S#,Sname) 10000条记录Cource(C#,Cname,T#) 9条记录SC(S#,C#,Score) 89991条记录Teacher(T#,Tname) 3条记录题目并没有指定表中有多少数据,记录是我自己模拟的。试题1、选择课程001的成绩大于课程002的成绩的学生ID;SELECT sc

无知人生,记录点滴 2万+

【WRFDA教程第四期】雷达数据同化(Radar Data Assimilation)

雷达数据同化(Radar Data Assimilation)

WW、forever的博客 1758

YOLO11优化:TGRS2026 CKConv结合C3k2 | 方向特征与跨阶段融合协同,小目标漏检率大幅下降

多尺度适配小目标尺寸变化:在 C3k2 不同阶段配置 CKConv 不同核尺度(浅层小核捕获精细纹理,深层大核聚合上下文),兼顾局部细节与全局感知,提升对舰船、车辆等小尺寸目标及红外热目标的检测鲁棒性。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 563

金三银四,分享一波数据库笔试题及答案!

金三银四马上来了,测试年限较短难免会碰到笔试题,最近就收到一些求职小伙伴反馈过来的数据库笔试题,说不太会做。特意做了下摘录及答案整理,给大家做个分享。如果不想笔试受挫的宝子,一定要牢牢码住!并多多练习!

主要分享测试的学习资源,帮助快速了解测试行业,帮助想转行、进阶、小白成长为高级测试工程师。 1056

CelebA-HQ数据集下载【详细明了版】分辨率包括【64,128,256,512,1024】

CelebA-HQ 是在ICLR2018上,nVidia发表了一篇名为Progressive Growing of GANs for Improved Quality, Stability, and Variation的论文,文中通过训练高分辨率GAN生成了一个新的人脸数据集CelebA-HQ.CelebA是港科大汤晓鸥组收集的人脸数据集(总共200k图片),包括了人脸特征点(landmark),人脸属性(attribute)等信息,详细介绍参考链接[1]和[2]

zik的博客 1万+

Oracle数据库笔试题(附答案)_oracle 笔试题目

2008年04月25日 星期五 19:48。Oracle数据库笔试题(附答案)

2401_89284596的博客 1210

EtherCAT主站IGH-- 49 -- 搭建xenomai系统及自己的IGH主站

以上就是搭建xenomai系统及自己的IGH主站的内容。有不明白的地方欢迎留言;有建议欢迎留言,我后面编写文档好改进。创作不容,如果文档对您有帮助,记得给个赞。

常驻客栈的博客--嵌入式EtherCAT 3154

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

java开发数据库笔试题

给大家整理了一些有关【数据库,Java开发】的项目学习资料(附讲解~~):https://edu.51cto.com/course/30635.htmlhttps://edu.51cto.com/course/33370.html以一些关于【数据库】的学习资料和大家一起分享一下:https://edu.51cto.c...

weixin_33089993的博客 141

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

数据库笔试题(答案)

数据库笔试题(答案) 一、填空题(每题2分,共10分)1. 索引字段值不唯一,应该使用的索引类型为(  普通索引  )2. 只有满足联接条件的记录才包含在查询结果中,这种联接为( 内联接)3. E-R模型的组成包括那些元素(实体 )( 属性 )(关系 )4. 事务所具有的特性有( 原子性 )(一致性 )( 隔离性 )(持久性 )5、结构化程序设计的三种基本逻辑结构是(顺序结构),(选择结构),(循...

L___Ping的博客 8451

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

ETL数据仓库工程师笔试题和面试题整理

https://blog.youkuaiyun.com/weixin_42800008/article/category/7918190 [这个人怎么那么多面试题] 如何排重(考察sql),就是group by xxx having count(1)>1。 shell的一些基本命令,如tail、seed、crontab等 如如何查看文件第几行?如何动态查看文件?如何查询文件关键字等等。 还有就是数据仓库...

lurrass的博客 2万+
上一篇: 整数数组,长度为n,分为m份。求m最大值
下一篇: 大数据处理的方法
crazyhacking
博客等级 码龄15年 299粉丝 148原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值