`
雨中伞
  • 浏览: 43936 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

转 三大范式

阅读更多

第一范式(1NF):数据库表中的字段都是单一属性的,不可再分。这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期 型等。 很显然,在现有的DBMS中设计出不符合第一范式的数据库都是不可能的。

第二范式(2NF):数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖(部分函数依赖指的是存在组合关键字中的某些字段决定 非关键字段的情况),也即所有非关键字段都完全依赖于任意一组候选关键字。

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

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

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

(课程名称) → (学分)

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

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

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

(1) 数据冗余:

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

(2) 更新异常:

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

(3) 插入异常:

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

(4) 删除异常:

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

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

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

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

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

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

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

第三范式(3NF):在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三 范式。所谓传递函数依赖,指的是如果存在"A → B → C"的决定关系,则C传递函数依赖于A。因此,满足第三范式的数据库表应该不存在如下依赖关系:关键字段 → 非关键字段x → 非关键字段y

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

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

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

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

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

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

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

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

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

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

分享到:
评论

相关推荐

    数据库设计三大范式.pdf

    在实际的数据库设计中,一般要求至少要达到第三范式,而BCNF因为要求过于严格,可能会导致表结构过于复杂,所以其应用不如前三范式广泛。 在进行数据库设计时,通常遵循“实体-属性”模型,将现实世界中的实体转换...

    数据库范式理解例题数据库范式理解例题.doc

    其中包括第一范式(1NF)、第二范式(2NF)和第三范式(3NF)等。 第一范式(1NF) 第一范式是最基本的数据库设计规范,它要求每个表中的每一行都具有唯一的值,且每个字段都不可分割。换言之,每个表中的每一行都...

    数据库范式【转】

    数据库范式通常有三种:第一范式、第二范式和第三范式。下面将对每种范式进行详细的介绍。 第一范式 第一范式是最基本的范式,它要求关系模式 R 中所有属性的值域都是单纯域。也就是说,每个列都只能包含单个值,不...

    人工智能与高等教育发展范式转型研究.pdf

    范式”则是指出了文章的核心概念与研究领域,强调了人工智能、高等教育和范式转型三者之间的关系。 “中图分类号G646文献标识码A”是文章分类和标识信息,说明文章属于教育科学领域的研究。 在【部分内容】中,...

    C、Java和Python的BNF范式

    在本资源中,我们关注的是C、Java和Python这三种流行的编程语言的BNF范式。 首先,让我们详细探讨C语言的BNF范式。C语言的语法严谨且层次分明,它的BNF范式主要涵盖了程序的基本组成部分,如声明(declarations)、...

    计算主合取范式,主析取范式

    通过代码编译出的程序帮助用户求出其输入的命题公式的真值表以及主析取范式和主合取范式。 要求:能够列出含三个以内变量的合式公式的真值表,并给出相应的主析取和主合取范式。

    数据库范式详解+实例

    数据库范式主要包括第一范式(1NF)、第二范式(2NF)、第三范式(3NF)以及BCNF(Boyce-Codd范式)。下面我们详细介绍这些范式及其相互之间的转换方法。 ##### 第一范式(1NF) - **定义**:如果关系模式R属于第...

    主析取范式

    ### 主析取范式概述 #### 一、引言 在逻辑学中,尤其是在计算机科学领域,对于逻辑表达式的规范化处理具有重要的意义。规范化的逻辑表达式不仅有助于人们更好地理解和分析逻辑关系,而且也是实现自动推理的基础。...

    南京邮电大学实验一真值表法求主析取主合取范式

    本次实验的主要目的是通过编程来实现逻辑公式(含三个以内变量)的主析取范式(DNF)和主合取范式(CNF)的求解过程。实验采用了真值表的方法来进行求解,旨在帮助学生深入理解并掌握逻辑公式的规范化过程。 ### ...

    LLM趋势下的数字化转型范式变革.docx

    "LLM趋势下的数字化转型范式变革" 一、LLM趋势下的数字化转型范式升级 在信息时代,数字化转型的核心是信息差异,以信息技术和互联网革命来解决信息存储和处理问题,实现信息的大爆炸。但是,随着大模型的兴起,...

    中国数字化转型新范式案例锦集1

    在这些成功案例的背后,清华大学李东红教授指出了企业在数字化转型过程中可能落入的五大陷阱,包括战略规划不足、技术选型错误、数据治理不当、人才短缺和文化冲突等,这些问题值得所有转型中的企业深思。...

    离散数学范式与主范式PPT课件.pptx

    三、主范式 主范式是指一个命题公式的特殊形式,即将一个命题公式转换为一个特殊的析取式或合取式。主范式可以用于简化命题公式的计算和分析。 四、主析取范式和主合取范式 主析取范式是指一个命题公式的特殊析取...

    BMS不变性和膜范式

    我们的主要结果是指出BMS组和膜范式的无限对称集和守恒电荷是相同的。 这种关系有若干后果。 首先,它阐明了BMS守恒定律的物理解释。 其次,它将BMS守恒定律推广到任意空表面的任意子区域。 第三,它阐明了BMS组的...

    人工智能研发的技术范式.pdf

    三、技术范式的局限性与缺陷 尽管技术范式具有指导作用,但它也有固有的缺陷。任何科学原理和技术设计都有其适用的范围,技术范式在概括抽象过程中可能产生先天不足和适用性的问题。此外,技术范式在形成过程中所...

    析取范式与合取范式

    - **析取范式实例**:假设有一个逻辑表达式 `A = (p ∧ ¬q) ∨ (¬p ∧ q) ∨ (r ∧ ¬s)`,我们可以将其视为由三个简单合取式组成的析取式。 - **合取范式实例**:再来看另一个逻辑表达式 `B = (p ∨ ¬q) ∧ (¬p...

    真值表及主范式--C语言

    例如,上述三个变量A、B、C的主合取范式可以写作:(A+B+C)(A'+B+C)(A+B'+C)(A+B+C'),其中每个括号内的表达式都表示一种变量组合的否定。 ### C语言中的应用 在给定的部分代码中,我们看到了使用C语言来处理逻辑...

    数据库考试题 模式分解例题 范式规范化 3NF BCNF

    3NF 和 BCNF 是数据库设计中的两个重要概念,分别表示第三范式和 Boyce-Codd 范式,它们都是数据库设计中的重要原则和方法。 本文将对数据库考试题中的每个问题进行详细的解释和分析,帮助读者更好地理解数据库的...

    库恩的“范式转换”理论与行政文化分析

    莫春菊在其论文中提出了行政文化的三个范式:统治型行政文化范式、管理型行政文化范式和服务型行政文化范式。 统治型行政文化范式主要存在于传统社会,其特点是行政权力高度集中,法律和制度往往从属于领导者的意志...

    地产行业数字化转型范式与应用-百分点三篇文件.pptx

    地产行业数字化转型范式与应用-百分点三篇文件.pptx

    地产行业数字化转型范式与应用-百分点三个文档.pptx

    地产行业数字化转型范式与应用-百分点三个文档.pptx

Global site tag (gtag.js) - Google Analytics