3NF 与BCNF 有啥区别? 求举个例子说明下~谢谢

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3NF 与BCNF 有啥区别? 求举个例子说明下~谢谢相关的知识,希望对你有一定的参考价值。

参考技术A

范式是数据库中的关于关系模式的分类,是越来越严苛的分类。

一、区别

1、第三范式指表中的所有数据元素不但要能唯一地被主关键字所标识,而且它们之间还必须相互独立,不存在其他的函数关系。第三范式就是在第二范式的基础上再消除表中有可能存在某些数据元素依赖于其他非关键字数据元素的现象。

2、BC范式是指对于关系模式R,若 R为第一范式,且每个属性都不部分依赖于候选键也不传递依赖于候选键。BC比第三范式更严苛的条件是:要求R为第二范式且非键属性不传递依赖于R的候选键,而BC范式则是对R的每个属性都做要求。即决定因素为候选码。

二、举例

以下关系模式满足第三范式

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

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

其中的关系函数为:学号->姓名、学号->年龄、学号->学院、学院->地点、学院->电话。可以看出所有的关系函数均为一候选码为决定因素(函数的前半部分)那么可以说此关系模式满足BCNF。

扩展资料

数据库范式概念引入原因

规范化目的是使结构更合理,消除存储异常,使数据冗余尽量小。便于插入、删除和更新。

遵从概念单一化“一事一地”原则,即一个关系模式描述一个实体或实体间的一种联系。规范的实质就是概念的单一化。

一个关系模式接着分解可以得到不同关系模式集合,也就是说分解方法不是惟一的。最小冗余的要求必须以分解后的数据库能够表达原来数据库所有信息为前提来实现。其根本目标是节省存储空问,避免数据不一致性,提高对关系的操作效率,同时满足应用需求。

实际上,并不一定要求全部模式都达到BCNF不可。有时故意保留部分冗余可能更方便数据查询。尤其对于那些更新频度不高,查询频度极高的数据库系统更是如此。

参考资料来源:百度百科-数据库范式

XML中DOM有些啥用,它具体有很多的对象和方法,他们有啥用,具体举个例子用在哪?!

最好大家能举个例子来说明下。

我来回答这个问题.我软件专业的,学过XML.下面是我自己的理解:

XML主要用于数据的处理与表达.因为html等其它标记语言无法准确表达其本质内容,而主要是表现样式.导致带来很多不便.这样,XML就诞生了.

XML的DOM其实就是映射在内存中的数据.XML是树型结构,操作很麻烦.DOM的出现就是解决这个问题的.利用DOM,可以轻松地在节点间进行读取,增加,删除等一系列操作.

下面举个例子吧,我上课时候的题目:

<html>
<head>
<title>ex 08 - code by MacroChin 10:08 2008-5-23</title>
<style>
tr,td
border-bottom: #0000FF solid 1px;
font-size: 11px;
font-family: Arial;

</style>
<script language="VBScript" defer>
<!--
Function listProc(str)
s=""
tds = split(str, " ")
For i=0 To UBound(tds)
s = s & "<td>" & tds(i) &"</td>"
Next
listProc=s
End Function
//-->
</script>
<script language="javascript" defer>
<!--

function list(qrystr)

var sHTML=\'\';
sHTML += \'<table>\\
<tr><td>学号</td><td>姓名</td><td>性别</td><td>年龄</td>\\
<td>C语言</td><td>XML</td><td>JSP</td><td>数据结构</td><td>SQL</td></tr>\\
\';
var xml=new ActiveXObject("Microsoft.XMLDOM");
if(!xml.load("ex08.xml")) return;
var stus=xml.selectNodes(qrystr);
for(var i=0; i<stus.length; i++)

sHTML += \'<tr>\' + listProc(stus.item(i).getAttribute(\'s_ID\') + \' \' + stus.item(i).text) + \'</tr>\';

sHTML += \'</table>\\
<BR>\';
document.getElementById(\'sbox\').innerHTML = sHTML;


//-->
</script>
</head>
<body>
<a href="#" onClick="list(\'//student\');">1.输出所有学生信息</a><BR>
<a href="#" onClick="list(\'//student[@s_ID=\\\'SA01003\\\']\')">2.输出学号(s_ID)为SA01003的学生信息</a><BR>
<a href="#" onClick="list(\'//student[sex=\\\'男\\\']\')">3.输出性别为“男”的所有学生信息</a><BR>
<a href="#" onClick="list(\'//student[age<\\\'20\\\']\')">4.输出年龄小于20的学生信息</a><BR>
<a href="#" onClick="list(\'//student[grade[XML>=\\\'90\\\' and C语言>=\\\'90\\\']]\')">5.输出xml和c语言课程都在90分以上(包括90)的学生信息</a><BR>
<BR><BR>
<div id="sbox"></div>
</body>
</html>

把这个代码保存为ex08.htm文件.

然后再写一个ex08.xml文件,内容如下:
<?xml version="1.0" encoding="GB2312"?>
<students>
<student s_ID="SA01001">
<name>赵毅</name>
<sex>男</sex>
<age>23</age>
<grade>
<C语言>91</C语言>
<XML>90</XML>
<JSP>76</JSP>
<a数据结构>93</a数据结构>
<SQL>83</SQL>
</grade>
</student>
<student s_ID="SA01002">
<name>李晓红</name>
<sex>女</sex>
<age>22</age>
<grade>
<C语言>71</C语言>
<XML>81</XML>
<JSP>76</JSP>
<a数据结构>65</a数据结构>
<SQL>89</SQL>
</grade>
</student>
<student s_ID="SA01003">
<name>欧阳涛</name>
<sex>男</sex>
<age>20</age>
<grade>
<C语言>90</C语言>
<XML>93</XML>
<JSP>78</JSP>
<a数据结构>68</a数据结构>
<SQL>86</SQL>
</grade>
</student>
<student s_ID="SA01004">
<name>李明</name>
<sex>男</sex>
<age>19</age>
<grade>
<C语言>72</C语言>
<XML>77</XML>
<JSP>95</JSP>
<a数据结构>87</a数据结构>
<SQL>78</SQL>
</grade>
</student>
</students>

运行ex08.htm,然后进行一些操作,看看是不是很酷?

以上是我自己的见解,希望对你有帮助.
参考技术A DOM是一些节点的集合,由于文档中可能包含有不同类型的信息,所以定义了几种不同类型的节点。DOM中最常见的节点类型有:
(1)元素:
元素是XML的基本构件。元素的子节点可以是其它元素、文本节点或两者都有。元素节点还可以只含有属性这一唯一类型的节点。
(2)属性:
属性节点包含关于元素节点的信息,但它不是元素的子节点
(3)文本:
文本节点文本信息,或干脆是空白的文本。
(4)文档:
文档节点是整个文档中所有其它节点的父节点
元素是一种很重要的类型节点,元素节点可以是其他节点的容器。
参考技术B 用Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API(Simple API for XML)称为SAX和基于树和节点的文档对象模型(Document Object Module)称为DOM。Sun公司提供了Java API for XML Parsing(JAXP)接口来使用SAX和DOM,通过JAXP,我们可以使用任何与JAXP兼容的XML解析器。
JAXP接口包含了三个包:
(1) org.w3c.dom W3C推荐的用于XML标准规划文档对象模型的接口。
(2) org.xml.sax 用于对XML进行语法分析的事件驱动的XML简单API(SAX)
(3) javax.xml.parsers解析器工厂工具,程序员获得并配置特殊的特DOM编程不要其它的依赖包,因为JDK里自带的JDK里含有的上面提到的org.w3c.dom、org.xml.sax 和javax.xml.parsers包就可以满意条件了。
殊语法分析器。

以上是关于3NF 与BCNF 有啥区别? 求举个例子说明下~谢谢的主要内容,如果未能解决你的问题,请参考以下文章

BCNF与3NF之间有啥区别

3NF和BCNF有啥区别?

求证BCNF是3NF

还在为理解关系数据库的三范式而困惑,这篇文章用实例场景带你快速了解1NF 2NF 3NF BCNF的特点和区别

关系模式范式分解教程 3NF与BCNF口诀

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