当前位置: 首页 > 面试题库 >

普通形式:4对5

赵俊晤
2023-03-14
问题内容

我正在努力了解4NF,5NF及其区别。

这是我向不认识的人描述4 / 5NF(或如何描述实现它的步骤)的方式。我之所以这样说,是因为这将显示出我真正理解的内容。

通常,应通过为它们的可能组合使用联接表来实现N:N实体关系。如果存在3个或更多具有N:N关系的实体,则应仔细考虑:

  1. 更通用(包括)的解决方案是实现一个连接表,该表包含所有实体作为字段,并将它们的所有组合作为值(行)
  2. 但是,如果这些实体的关系不是真正的全元组情况,而是它们(某些)二元N:N关系的(笛卡尔)乘积,那么请仔细考虑所需的最少两个字段表。
  3. 概括2,总是喜欢(如果正确的话)拥有尽可能少的字段的联接表。显然,如果没有使用联接表,则不要创建该联接表。
  4. 区分上述内容的一个有用技巧是,在完成插入操作后,如果您的heart(!)告诉您您正在做冗余或无效的事情,则应选择一种较新的方法。

E1)维基百科关于4NF的页面示例https://en.wikipedia.org/wiki/Fourth_normal_form

我们有实体餐厅,比萨饼品种和送货区。我们可以用一个包括所有三个表的联接表来实现它们的多对多关系。但是,如果人们正确地考虑了数据,则这些三胞胎仅是2个N:N关系的产物:Restaurant:Pizza和Restaurant:Delivery
Area。如果“ A1披萨”餐厅决定在其曲目中加入“薄皮”比萨饼品种,那么我要么在同一行的“ A1比萨饼”的所有送餐区中插入一行带有相同餐厅/比萨饼的品种,
.redundant,或仅插入特定的送货地区,这会使4.感觉无效,因为没有一家商店会为送货地区提供较少的品种(或者至少可以说我们的规格是这样)。

E2)维基百科关于5NF的页面示例:https://en.wikipedia.org/wiki/Fifth_normal_form

我们有业务员,品牌和类型实体。我们可以用一个包括所有三个表的联接表来实现它们的多对多关系。但是,由于“遵循以下规则”部分,三元组实际上是3
N:N关系可用的(笛卡尔)乘积,因此,正确的方法是为其提供3个连接表。“请注意此设置如何帮助删除冗余。” 部分很像我的第四点。

当文章指出“还请注意该表位于4NF中”时,事实变得更加令人困惑,事实是,如果该表具有所有行,则应覆盖“以下规则”,然后它不会覆盖4NF!正确的?

所以.. E1和E2之间有什么区别,使其中一个成为4NF,而另一个成为5NF示例?


问题答案:

E1和E2有什么区别,使其中一个成为4NF,而另一个成为5NF示例?

非4NF和非5NF关系都显示由于JD引起的更新异常。4NF表示没有来自二进制JD的异常,而5NF表示没有来自任何Ard的JD的异常。Wikipedia示例对4NF的规范化摆脱了二进制JD的关系-
这种关系是一个有问题的2向联接。对5NF的规范化摆脱了3向JD的关系-
该关系是一个有问题的3向联接。(因为它始于4NF,所以它不可能有任何有问题的二进制JD。)

关系(值或变量)在5NF中时,可以以各种方式无损地分解(即分解为与之连接的投影)(即,对应的JD(连接依赖项)成立),则组件可以按某种顺序重新结合在一起,其中每个联接的公共列都是原始联接的超键。(费金的PJ
/ NF纸的成员资格的算法。)4NF的定义是不同的是仅方式相同,它可以无损地分解成 2个
突起事项(即相应JD为二进制数)(即,相应的MVD(多值依赖)成立)。

(这种具有这样的连接顺序的允许的JD被称为“由CK(候选关键字)表示”。)

这个想法是,如果我们可以分解成与原始连接的投影,那么我们应该这样做,除了超级键上的连接不会引起任何问题/异常。

当FD(功能依赖性)S-> A与属性集R保持关系时,该关系在SU {A}和R-{A}上可无损地分解。因此,JD {SU {A},R-{A}}成立,而MVDS->> {A}成立。

关系含义/谓词

另一方面,假设您 知道该关系的含义 ,以至于您知道该关系包含元组,这些元组从 (特征)谓词可 表示为其他并集的陈述中得出真实的陈述,例如

    ticket Ticket was submitted by a person with first name Vname
AND there is a person with name Vname Nname
AND ticket Ticket was submitted by a person with last name Nname

设计Join的目的是使其输出谓词与输入谓词的与。因此,您将知道检查原始文件的任何对应分解是否满足JD(即,来自合词的关系是否是原始文件的投影),并因此检查原始文件的CK是否隐含了JD。

归一化到较高NF的要点是,当一个关系的谓词可以表示为其他关系的连接且它们的关系是原始关系的投影时,JD成立,因此我们可以改用更简单的分离关系,除非我们也可以使用JOIN
/和成对共享CK的关系/谓词,因为仍然没有更新异常。(如果FD{x, ...} -> a成立,则某个MVD成立,某个二进制JD成立,并且该关系的谓​​词可以表示为... AND a = f(x, ...)。)



 类似资料:
  • 基于php-fpm来运行swoole/framework的MVC程序,这是传统的LAMP模式。 Nginx配置 server { listen 80; root /home/htf/workspace/php/swoole.com; index index.php index.html; server_name local.swoole

  • 我在一个列表中有多个对象,希望为该列表中的每个对象创建一个表单(用户一次只能提交一个对象)。但只要我使用th:field而不是name和value,我就会得到一个异常。也许有人能帮我。它仅在使用th:each时发生;如果我将单个对象传递给它工作的窗体。。。我将问题降到了最低程度,因此更具可读性:) 例外情况: java.lang.IllegalStateExcture:BindingResult和

  • 问题内容: 我正在使用MVC 4和Entity Framework开发Intranet Web应用程序。我有一个可以通过编辑操作进行修改的人员列表。我想通过使用模式形式使我的应用程序更加动态。所以我试图将编辑视图放入Bootstrap模态,对此我有两个问题: 我应该使用简单视图还是局部视图? 我如何执行验证(实际上它可以工作,但会将我重定向到我的原始视图,因此不以模式形式出现) 我认为我必须使用A

  • 重复执行一系列命令:可以指定表示重复次数的数字或直到遇到 break。 Loop [, Count] 参数 Count 执行循环体 (重复) 的次数. 如果省略, Loop 会无期限继续, 直到遇到 break 或 return. 如果 Count 是一个变量引用例如 %ItemCount%, 每当此变量为空或包含小于 1 的数字时, 循环会被完全跳过. 由于必须支持 文件模式循环, Count

  • 本文向大家介绍把普通对象转换成json格式的对象的简单实例,包括了把普通对象转换成json格式的对象的简单实例的使用技巧和注意事项,需要的朋友参考一下 1、什么叫做JSON? JSON只是一种数据格式(它不是一种新的数据类型) var obj = {name: "中国", age: 5000};//->普通格式的对象 var jsonObj = {"name": "中国", "age": 5000