-
当面试时主考官问道MySQL的主键、超键、候选键和外键是什么,你改怎么办?
2021-01-18 21:10:11题目:主键 超键 候选键 外键是什么 ...外键(foreign key):如果关系模式R中属性K是其它模式的主键,那么k在模式R中称为外键。 举例 比如有如下数据: 学号 姓名 性别 年龄 系别 专业 20020612 李辉题目:主键 超键 候选键 外键是什么
定义
超键(super key): 在关系中能唯一标识元组的属性集称为关系模式的超键
候选键(candidate key): 不含有多余属性的超键称为候选键。也就是在候选键中,若再删除属性,就不是键了!
主键(primary key): 用户选作元组标识的一个候选键程序主键
外键(foreign key):如果关系模式R中属性K是其它模式的主键,那么k在模式R中称为外键。
举例
比如有如下数据:
学号 姓名 性别 年龄 系别 专业 20020612 李辉 男 20 计算机 软件开发 20060613 张明 男 18 计算机 软件开发 20060614 王小玉 女 19 物理 力学 20060615 李淑华 女 17 生物 动物学 20060616 赵静 男 21 化学 食品化学 20060617 赵静 女 20 生物 植物学 -
超键
在关系中能唯一标识元组的属性集称为关系模式的超键。
于是我们从例子中可以发现 学号是标识学生实体的唯一标识。那么该元组的超键就为学号。
除此之外我们还可以把它跟其他属性组合起来,比如:
(
学号
,性别
)(
学号
,年龄
)这样也是超键.
-
候选键
不含多余属性的超键为候选键。
根据例子可知,学号是一个可以唯一标识元组的唯一标识,因此学号是一个候选键,实际上,候选键是超键的子集,比如 (学号,年龄)是超键,但是它不是候选键。因为它还有了额外的属性。
-
主键
用户选择的候选键作为该元组的唯一标识,那么它就为主键。
简单的说,例子中的元组的候选键为学号,但是我们选定他作为该元组的唯一标识,那么学号就为主键。
-
外键
外键是相对于主键的,比如在学生记录里,主键为学号,在成绩单表中也有学号字段,因此学号为成绩单表的外键,为学生表的主键。
总结
主键为候选键的子集,候选键为超键的子集,而外键的确定是相对于主键的。
资源传送门
- 关注【做一个柔情的程序猿】公众号
- 在【做一个柔情的程序猿】公众号后台回复 【python资料】【2020秋招】 即可获取相应的惊喜哦!
- 自己搭建的博客地址:梦魇回生的博客
「❤️ 感谢大家」
- 点赞支持下吧,让更多的人也能看到这篇内容(收藏不点赞,都是耍流氓 -_-)
- 欢迎在留言区与我分享你的想法,也欢迎你在留言区记录你的思考过程
-
-
保持函数依赖的模式分解可以减轻或解决什么_详解数据库设计三大范式:原子性+主键+不能有传递依赖...
2020-12-06 12:22:22概述最近在研究数据库设计方面的内容,主要是后面项目有需要,今天介绍下数据库的三大范式,跟大家一起入个门~数据库设计范式什么...什么是三大范式:第一范式:当关系模式R的所有属性都不能在分解为更基本的数据单...概述
最近在研究数据库设计方面的内容,主要是后面项目有需要,今天介绍下数据库的三大范式,跟大家一起入个门~
数据库设计范式
什么是范式:简言之就是,数据库设计对数据的存储性能,还有开发人员对数据的操作都有莫大的关系。所以建立科学的,规范的的数据库是需要满足一些规范的来优化数据数据存储方式。在关系型数据库中这些规范就可以称为范式。
什么是三大范式:
第一范式:当关系模式R的所有属性都不能在分解为更基本的数据单位时,称R是满足第一范式的,简记为1NF。满足第一范式是关系模式规范化的最低要求,否则,将有很多基本操作在这样的关系模式中实现不了。
第二范式:如果关系模式R满足第一范式,并且R得所有非主属性都完全依赖于R的每一个候选关键属性,称R满足第二范式,简记为2NF。
第三范式:设R是一个满足第一范式条件的关系模式,X是R的任意属性集,如果X非传递依赖于R的任意一个候选关键字,称R满足第三范式,简记为3NF.
注:关系实质上是一张二维表,其中每一行是一个元组,每一列是一个属性
如何理解三大范式?
一、第一范式
1、每一列属性都是不可再分的属性值,确保每一列的原子性
2、两列的属性相近或相似或一样,尽量合并属性一样的列,确保不产生冗余数据。
第一范式的合理遵循需要根据系统的实际需求来定。比如某些数据库系统中需要用到“地址”这个属性,本来直接将“地址”属性设计成一个数据库表的字段就行。但是如果系统经常会访问“地址”属性中的“城市”部分,那么就非要将“地址”这个属性重新拆分为省份、城市、详细地址等多个部分进行存储,这样在对地址中某一部分操作的时候将非常方便。这样设计才算满足了数据库的第一范式,如下表所示。
二、第二范式
每一行的数据只能与其中一列相关,即一行数据只做一件事。只要数据列中出现数据重复,就要把表拆分开来。
第二范式要求数据库表中的每个实例或行必须可以被唯一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。这个唯一属性列被称为主关键字或主键、主码。
比如要设计一个订单信息表,因为订单中可能会有多种商品,所以要将订单编号和商品编号作为数据库表的联合主键,如下表所示。
不过这里会产生一个问题:这个表中是以订单编号和商品编号作为联合主键。这样在该表中商品名称、单位、商品价格等信息不与该表的主键相关,而仅仅是与商品编号相关。所以在这里违反了第二范式的设计原则。
不符合第二范式,会出现的问题:
(1) 数据冗余:同一个客户下的订单,所属单位和联系方式出现了冗余(2) 更新异常:如果调整了某个商品的价格,表中所有下单该商品的价格表都需要调整,否则会出现同一商品价格不统一的情况(3) 插入异常:如果商家新增了一个商品,由于还没有人买过没有订单号,导致表中无法插入这样的信息信息了(4) 删除异常:如果客户已完成订单,或者客户退货取消订单,就需要删除订单编号,这样又会导致商品信息被删除,问题更大了。
如果把这个订单信息表进行拆分,把商品信息分离到另一个表中,把订单项目表也分离到另一个表中,就符合第二范式了
。
三、第三范式
第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三范式。简而言之,第三范式就是属性不依赖于其它非主属性。所谓传递函数依赖,指的是如果存在"A → B → C"的决定关系,则C传递函数依赖于A。
因此,满足第三范式的数据库表应该不存在如下依赖关系:
关键字段 → 非关键字段x → 非关键字段y
比如在设计一个订单数据表的时候,可以将客户编号作为一个外键和订单表建立相应的关系。而不可以在订单表中添加关于客户其它信息(比如姓名、所属公司等)的字段。如下面这两个表所示的设计就是一个满足第三范式的数据库表。
总结
三大范式只是一般设计数据库的基本理念,可以建立冗余较小、结构合理的数据库。如果有特殊情况,当然要特殊对待,数据库设计最重要的是看需求跟性能,需求>性能>表结构。所以也不能一味的去追求范式建立数据库。后面会分享更多数据库设计方面的内容,感兴趣的朋友可以关注下!
-
数据库关系模式规范化
2020-12-14 23:28:56第三范式的定义:如果关系模式R中的所有非主属性对任何候选关键字都不存在传递依赖,则称关系R是属于第三范式的。记作R 3NF。 如:学生关系模式S1(学号,姓名,系号,系名,系地址) (学号)为关键字,因... -
数据库类(受虐不停,更新不止)
2015-09-20 19:16:11以为掌握几个语句就是熟悉数据库了,...外键:如果关系模式R中的某属性集不是R的主键,而是另一个关系R1的主键则该属性集是关系模式R的外键 用于是保持数据的一致性,可以为空,也允许重复 推荐蔚蓝色的天空的博客,以为掌握几个语句就是熟悉数据库了,一面试才发现,其实什么都不懂,会不断更新,直到真正掌握
以下是5.17 招行面试:
Q:请说说主键和外键的定义和作用
A:主键是能确定一条记录的唯一标志,不可以有重复的,也不可以为空
外键:如果关系模式R中的某属性集不是R的主键,而是另一个关系R1的主键则该属性集是关系模式R的外键
用于是保持数据的一致性,可以为空,也允许重复
推荐蔚蓝色的天空的博客,讲得很好,里面有主键和外键的设计原则,值得深入
http://www.cnblogs.com/longyi1234/archive/2010/03/24/1693738.html
Q:数据库事务的概念和作用
A:当时没答出来....
百度百科:数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性。事务是数据库运行中的一个逻辑工作单位,由DBMS中的事务管理子系统负责事务的处理。
事务有三种模型:1.隐式事务是指每一条数据操作语句都自动地成为一个事务,每个事务都有显式的开始和结束标记。2.显式事务是指有显式的开始和结束标记的事务,事务的开始是隐式的,事务的结束有明确的标记。3.自动事务是系统自动默认的,开始和结束不用标记。这里推荐柯枫的技术博客,http://www.cnblogs.com/zhangpengme/archive/2011/11/24/2261625.html
对事务讲解不但清楚,而且对并发问题讲得比较生动
Q:数据库的索引
A:是对数据库表中一个或多个列的值进行排序的结构,作用是提高数据库的查询速度
根据数据库的功能,可以在数据库设计器中创建三种索引:唯一索引、主键索引和聚集索引。
在索引问题上,个人认为 KissKnife 的漫谈数据库索引一文写得非常好,向大家推荐下:http://kb.cnblogs.com/page/45712/
-
如何设置外键?
2015-08-21 17:35:33好好体会这句话:如果关系模式R中的某属性集不是R的主键,而是另一个关系R1的主键则该属性集是关系模式R的外键,通常在数据库设计中缩写为FK。 看下面的例子。其中,公司代号这个属性集不是第一张表的主键,而是第...什么是外键?
好好体会这句话:如果关系模式R中的某属性集不是R的主键,而是另一个关系R1的主键则该属性集是关系模式R的外键,通常在数据库设计中缩写为FK。
看下面的例子。其中,公司代号这个属性集不是第一张表的主键,而是第二张表中的主键,则公司代号这个属性集是第一张表的外键。然后这个公司代号就成为了两张表的相关联系。
外键表示了两个关系之间的相关联系。
作用:保持数据一致性,完整性
目的:主要目的是控制存储在外键表中的数据。 使两张表形成关联,外键只能引用外表中的列的值或使用空值。
什么属性集才能够有资格成为外键呢?
首先,必须是关联字段,两张表中都必须有的
其次,所有的键必须唯一。两张表中,主键只有一个,外键也必须只有一个。
再其次,外键关联的总是唯一的键字段。也就是外键只属于一种属性。
还要特别注意一点,2个或多个表的外键,数据肯定要一致,如果一个表里有,另一个木有,就不能增加外键。
简洁来讲,意思就是:设置了外键意味着两张表之间有关联了,不能随意对一张表随意定义内容,因为两张表产生了关联,要有都有,要没有都没有
该bbs项目设置外键时,删除和更新时的选项都选择NO ACTION就能够成功设置外键
但同时,也因为上述原因,设置外键会带来诸多不便。
比如说,如果删除一条记录,两张或多张关联的表本来一致的内容被删成不一致了。就肯定会报错,如果我们引入删除或者更新表的操作,在操作的过程中,就很容易出错。
所以,公司内部的项目中一般不设置外键,而是写索引。
写索引有这么几个作用:
1. 引入索引可以提升查询速度;
2. 可以对不能重复的内容设置唯一索引,防止重复,比如用户名,比如身份证号。
索引要怎么写呢?先不管。后续再写!知道怎么写了:
CREATE INDEX IX_USER_ID ONUSER(ID)
CREATE INDEX IX_USER_USERNAMEON USER(USERNAME)
CREATE INDEX IX_USER_PASSWORDON USER(PASSWORD)
-
数据库设计需遵守的三大范式
2020-08-24 22:46:42大家好,我是猿猴小冷,今天给大家分享一下数据库设计需遵守的三大范式 文章目录一、三大范式是什么?...第一范式:当关系模式R的所有属性都不能在分解为更基本的数据单位时,称R是满足第一范式的,简记为1NF。 -
数据库的三大范式
2019-05-04 12:17:18第二范式:如果关系模式R满足第一范式,并且R得所有非主属性都完全依赖于R的每一个候选关键属性,称R满足第二范式,简记为2NF。 第三范式:先满足第二范式,且除开主键列外的其他列不能有传递依赖,简记为3NF。 范式... -
触发器及其应用实验报告总结_数据库—基础知识点总结一
2020-12-01 19:22:06第一范式:当关系模式R的所有属性都不能再分解为更基本的数据单位时,称R满足第一范式,简记为1NF第二范式:如果关系模式R满足第一范式,并且R的所有非主键属性都完全依赖于R的每一个候选关键属性,称R满足第二范式... -
复习
2019-06-10 18:03:48数据仓库 1、什么是数据仓库? 面向主题的、集成的、相对稳定...第三范式:关系模式R中的非主键字不能依赖于其他非主键字,即非主键字段不能有依赖关系 3、数据仓库分层 DWD/ODS、DWB、DWS DWD:细节数据层,业... -
MySQL——三范式及函数依赖
2018-08-31 23:44:06第一范式:如果关系模式R的每个关系r的属性值都是不可分的原子值,称R是第一范式 通俗的说:一个表中每个属性值都是不可分的,比如: 经过范式改造 第二范式:在第一范式的基础上,每个非主属性完全依赖于主键... -
经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf
2013-02-18 10:06:3210.4.4 映射实体类的主键 398 10.5 关联关系映射 402 10.5.1 单向N-1关联 403 10.5.2 单向1-1关联 406 10.5.3 单向1-N关联 409 10.5.4 单向N-N关联 411 10.5.5 双向1-1关联 414 10.5.6 双向1-N关联 417 10.5.7... -
计算机二级公共基础知识
2011-04-30 14:00:09二是D上的关系,它反映了数据元素之间的前后件关系,通常记为R。一个数据结构可以表示成:B=(D,R) 其中,B表示数据结构。为了反映D中各数据元素之间的前后件关系,一般用二元组来表示。 例如,如果把一年四季看作一... -
asp.net知识库
2015-06-18 08:45:45通过DataTable获得表的主键 ADO.NET 2.0 操作实例 ADO.NET 2.0 大批量数据操作和多个动态的结果集 ADO.NET 2.0 异步处理 在ASP.NET中使用WINDOWS验证方式连接SQL SERVER数据库 改进ADO.Net数据库访问方式 ASP.NET ... -
SQL语法大全
2014-03-30 11:00:11Recordset对象Open方法的CursorType参数表示将以什么样的游标类型启动数据,包括adOpenForwardOnly、adOpenKeyset、adOpenDynamic及adOpenStatic,分述如下: ----------------------------------------------------... -
oracle数据库经典题目
2011-02-17 15:05:20其中,在专用服务器模式中为每个用户进程创建一个服务器进程,用户进程与服务器进程之间是1:1的关系;在共享服务器模式中,一个服务器进程可以为多个用户进程服务器。 4.说明数据库内存结构中SGA和PGA的组成,以及... -
[Oracle.11g权威指南(第2版)].谷长勇.扫描版.pdf
2013-06-23 21:16:09本章主要介绍了数据库的基础知识,包括数据库、数据库管理系统及关系数据库等基本概念,此外还介绍了目前应用比较广泛的各种关系式数据库系统。 1.1 数据库起源 2 1.2 数据库主要特征 2 1.3 数据库构成 3 1.4 数据库... -
oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串
2017-05-06 20:26:52在创建表时,经常会创建该表的主键、外键、唯一约束、Check约束等 语法结构 create table 表名( [字段名] [类型] [约束] ……….. CONSTRAINT fk_column FOREIGN KEY(column1,column2,…..column_n) ... -
Oracle Database 11g数据库管理艺术--详细书签版
2012-09-30 01:09:45Sam R.Alapati是世界顶尖的Oracle技术专家,一位经验丰富的数据库管理员,有20多年从业经历。他拥有Oracle OCP DBA证书和HP UNIX System Administrator证书,曾经担任Oracle公司的高级顾问,并在AT&T、雷曼兄弟、... -
Oracle Database 11g完全参考手册--详细书签版
2013-02-03 10:58:39本书全面详细地介绍了Oracle Database 11g的强大功能,阐述了如何使用所有新增功能和工具,如何执行功能强大的SQL查询,如何编写PL/SQL和SQL*Plus语句,如何使用大对象和对象-关系数据库。通过学习本书,您可以... -
2009达内SQL学习笔记
2010-02-10 19:46:58可以利用通配符创建比较特定数据的搜索模式,通配符只能用于文本,非文本数据类型不能使用通配符。 通配符在搜索模式中任意位置使用,并且可以使用多个通配符。 通配符%表示任何字符出现任意次数;还能代表搜索...