说明:大多数初学者对于关系数据库中的范式很是头疼,我本人也是,所以今天又看了视频,总结了一下内容,尽量语言通俗易懂,少用专业术语以及概念。

首先要理解几个键值。

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

候选键:关系模式中,能唯一标识元组并且不含多余属性的属性集称为候选键。值得注意的是,超键与候选键的区别,超键可能含有多余属性,而候选键不能。

主键:在一个关系的若干个候选键中随意指定一个作为关键字,此关键字就是主键。

外键:关系R1中的属性或属性组非R1的码,但它是其他关系的码,那么该属性集对于关系模式R1而言是外键。

主属性:候选码的所有属性称为主属性。

如何区分超键,候选键,主键?

相同点:功能方面,用于唯一标识一个元组。

不同点:超键有多余的属性,主键和候选键没有,它们中的属性是必要的。主键是候选键的一个,只是被数据库设计者选中而已。

联想理解:候选人和候选键,主席与主键。(也就是说,候选键中的任何一个键都可以作为主键,只是设计者之选择了其中的一个。)

(例子是检验概念的唯一标准),大家看例子吧。

例1:学生(学号,姓名,性别,专业号,年龄)

(学号,姓名)是超键,而不是候选键,学号是候选键,同时也是主键。

例2:学生(学号,姓名,性别,专业号,年龄)主键:学号,外键:专业名

专业(专业号,专业名)主键:专业号,外键:无

例3:成绩(学号,姓名,课程号,成绩)学生无同名。

(学号)等价于(姓名)

(学号,课程号)候选键

(姓名,课程号)候选键

所以主属性:学号,姓名,课程号

范式

1NF:通俗的说,就是所有的属性都是不可再分的,复合属性是不允许的。(这一点容易理解)

2FN:

先了解部分函数依赖的概念。

部分函数依赖:主码的部分只要有一部分就可以确定属性的值。

在第一范式的前提下,保证函数依赖关系是全部函数依赖,而非部分函数依赖。

第三范式:

在第二范式的前提下,且没有函数传递依赖于码。

定理:如果某个关系模式,它的关键字是单个关键字,没有部分的函数依赖问题,那么它的肯定是2NF。(仔细理解这句话)

我有点笨,还是初学者,所以有什么不对的地方,还请大家多多指点。

SQL范式小结的更多相关文章

  1. xss、SQL测试用例小结

    xss测试用例小结: <script>alert("跨站")</script> (最常用)<img scr=javascript:alert(&quo ...

  2. sql编程小结

    对照mysql5.1手册,对这几天学的sql编程进行小结,主要涉及触发器.存储过程.权限管理.主从分离等,权当抛砖引玉,高手请略过. 一.触发器 通俗的说就是在指定的数据表增删改的前或后触发执行特定的 ...

  3. 函数计算 Python 连接 SQL Server 小结

    python 连接数据库通常要安装第三方模块,连接 MS SQL Server 需要安装 pymssql .由于 pymsql 依赖于 FreeTDS,对于先于 2.1.3 版本的 pymssql,需 ...

  4. MySQL 常用的sql语句小结(待续)

    mysql 常用的sql语句 1.查看数据库各个表中的记录数 USE information_schema; SELECT table_name,table_rows FROM tables WHER ...

  5. 数据库 SQL语句小结(更新中)

    ################ Navicat,单条执行sql ################ Navicat,数据库管理工具, 在查询的页面有好多命令,若单条执行: 1:可选中要执行的一条sql ...

  6. SQL注入小结

    分类学习有利于条理化知识,大致的SQL注入分为三种: 1.BealeanBase 2.TimeBase 3.ErrorBase 1.从最简单的说起,基于布尔类型是最常见的SQL注入方式 select ...

  7. 动态SQL使用小结

    1.什么是动态SQL? 静态 SQL:静态 SQL 语句一般用于嵌入式 SQL 应用中,在程序运行前,SQL 语句必须是确定的,例如 SQL 语句中涉及的列名和表名必须是存在的.静态 SQL 语句的编 ...

  8. SQL 范式(转载)

    装载于"http://www.cnblogs.com/KissKnife/ 理论性的东西,往往容易把人人都看得懂的东西写成连鬼都看不懂,近似于主任医生开的药方.从前学范式的时候,把书中得概念 ...

  9. oracle sql 知识小结

    Oracle_sql : 第一单元:select 语句: ①:字符串连接操作符: || ②:去除重复行:distinct   第二单元:条件限制和排序 ①:关键字:where ②:比较操作符:=,&g ...

随机推荐

  1. localstorage,sessionstorage使用

    今天看了一下HTML5,也算是简单的学习一下吧,HTML5 提供了两种在客户端存储数据的新方法:localstorage,sessionstorage. localStorage - 没有时间限制的数 ...

  2. js 模块开发之一(模块开发价值)

    首先引用我们的今天的主角 ----<前端模块化开发的价值> 1,前端开发最常见的两个问题 ---命名冲突和文件依赖 2,对于命名冲突的基本解决办法就是学习其他语言的习惯,添加命名空间 va ...

  3. Selenium2+python自动化26-js处理内嵌div滚动条

    前言 前面有篇专门用js解决了浏览器滚动条的问题,生活总是多姿多彩,有的滚动条就在页面上,这时候又得仰仗js大哥来解决啦. 一.内嵌滚动条 1.下面这张图就是内嵌div带有滚动条的样子,记住它的长相.

  4. 初步认识JUnit

    初步认识JUnit 目前大多数的基于Java的企业应用软件,肯定少不了单元测试,程序员通过编写单元测试来验证自己程序的有效性:管理者通过持续自动的执行单元测试和分析单元测试覆盖率来确保软件本身的质量. ...

  5. IQKeyboardManager在某个页面取消键盘上面的Toolbar

    使用IQKeyboardManager的时候,如果想在某个页面取消键盘上面的Toolbar,请使用如下方法,按控制器去操作 // 取消IQKeyboardManager Toolbar [[IQKey ...

  6. 单片机TM4C123学习(八):SPI接口D/A

    1.头文件和变量定义(不是很清楚) #include "driverlib/ssi.h" #include "driverlib/i2c.h" #include ...

  7. PHP开发环境配置

    wamp:windows apache MySQL php 下载php版本问题在windows 下apache+php用vc6 thread safe版本 1.首先安装apache到e盘myenv/a ...

  8. [linux] 线程和wait命令,sleep命令

    在linux脚本编程中使用多线程编程,其中wait命令可以实现shell的多线程同步控制. 1. 启动后台子任务 在执行命令后加&操作符,表示将命令放在子shell中异步执行.可以达到多线程效 ...

  9. [Chapter 3 Process]Practice 3.3 Discuss three major complications that concurrent processing adds to an operating system.

    3.3  Original version of Apple's mobile iOS operating system provied no means of concurrent processi ...

  10. 冒泡排序优化JAVA

    本文对传统的冒泡排序进行了一些优化,减少了循环次数. 时间复杂度 若文件的初始状态是正序的,一趟扫描即可完成排序.所需的关键字比较次数 C 和记录移动次数 M 均达到最小值: C(min)=n-1 , ...