- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我对具有 5 个函数依赖关系的关系进行了 BCNF 分解,最终得到 5 个关系。但是,每个新关系都具有与原始函数依赖项之一相同的属性和 FD。
例如一个函数依赖关系是 AB -> C,我最终得到的 5 个关系之一具有属性 ABC 和 AB -> C 函数依赖关系。其他四个关系也是如此(与原始 FD 之一相同的属性和 FD)。
这是否意味着我的 BCNF 分解不正确?
我发现了这个问题 Specific BCNF decomposition描述了类似的情况,并且应该是正确的。
这是否意味着您根本不必遵循 BCNF 算法,只需从每个 FD 中获取属性并将其放入一个关系中,然后每个关系都将在 BCNF 中,因此新的关系组成的新模式也会这样吗?
最佳答案
当给定 FD 成立时,阿姆斯特朗公理所暗示的所有 FD 也成立。我们无法确定 CK(候选键)或 NF(范式)until we have a cover --一组 FD,表示所有持有的 FD。但是,如果我们只给出了一些成立的 FD,那么除了 FD 之外,它们还意味着通常还有更多的 FD 可能成立,也可能不成立。
有时,当我们将分解的组件连接回原始组件时,所有原始的 FD 都会保持不变。原来持有的FD不需要为此全部持有组件;它们只需要包含在组件中的 FD 中即可。这是“保留 FD”的时候。如果可以在保留 FD 的同时分解原始文件,那么通常我们更愿意使用保留 FD 的分解。 (对于 3NF 的归一化,以及常见的“3NF”算法实际产生的更严格的 EKNF,这始终是可能的。)但是,并非每次分解为 BCNF 都会保留所有 FD。而且在分解为BCNF时并不总是能够保留所有的FD。不可能的情况都是CK(候选键)重叠的情况。
不清楚“只需从每个 FD 获取属性并将其放入关系”是什么意思。但有时当我们将一个 FD 的属性分配给组件时,没有一个组件拥有所有这些属性,因此 FD 不能包含在任何组件中。如果 FD 没有暗示它在某些组件中具有所有属性,因此确实保留在这些组件中,那么它就不会被保留。 BCNF 算法是 BCNF 算法因为它处理所有情况,如果您不遵循一个算法,那么您将不会总是得到 BCNF 分解。如果你想了解为什么这样的算法是按照它们的方式设计的,那么请阅读一个介绍。例如,Silberschatz、Korth 和 Sudarshan 的数据库系统概念第 7 章关系数据库设计,第 7.6 节 Boyce–Codd 范式(7.6.2 分解算法和 7.6.3 依赖性保持)和 7.7 第三范式。您可以在线找到文本和幻灯片。
7.6.3 Dependency Preservation
Not every BCNF decomposition is dependency preserving.
Recall that lossless join is an essential condition for a decomposition, to avoid loss of information. We are therefore forced to give up either BCNF or dependency preservation. In Section 7.7 we present an alternative normal form, called third normal form, which is a small relaxation of BCNF; the motivation for using third normal form is that there is always a dependency preserving decomposition into third normal form.
There are situations where there is more than one way to decompose a schema into BCNF. Some of these decompositions may be dependency preserving, while others may not.
In general, the database designer should therefore look at alternative decompositions, and pick a dependency preserving decomposition where possible.
关于database - 在 BCNF 分解后获得与开始时相同的 FD?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43221789/
我们使用 Azure 弹性池,生成多个客户端数据库和一个引用客户端数据库的主数据库。 我们已经拥有多个数据库,并且正在开发新版本的代码。我们使用 EF6 代码优先。当我们对模型进行更改(添加属性)时,
我们使用 Azure 弹性池,生成多个客户端数据库和一个引用客户端数据库的主数据库。 我们已经拥有多个数据库,并且正在开发新版本的代码。我们使用 EF6 代码优先。当我们对模型进行更改(添加属性)时,
我希望将一些信息分发到不同的机器上,以便在没有任何网络开销的情况下实现高效和极快的访问。数据存在于关系模式中,实体之间的关系是“加入”的要求,但根本不是写入数据库的要求(它会离线生成)。 我非常相信
我使用 GrapheneDB 来托管我的 neo4j 数据库 (db)。 问题 我有 N客户并且正在寻找自动分离他们的内容(他们独特的数据库)的方法,以便: 它不重叠数据 操作速度不受影响。 选项 1
当服务器开始工作(Tomcat)时,日志显示此错误: org.springframework.beans.factory.BeanDefinitionStoreException: Invalid b
我在 Oracle 数据库实例中按以下方式创建了一个触发器。 CREATE OR REPLACE TRIGGER after_logon_on_database AFTER LOGON ON DATA
原谅我的无知,我是数据库约定的初学者。 这是我的 SQLite 代码:(由我的数据库浏览器自动生成) CREATE TABLE `ResearchItems` ( `ID` INTEGER NO
是的是的是的,我已经在整个互联网上搜索过这个问题。一些结果发现,甚至来自 Stackoverflow。但是他们中的大多数人说“你应该自动加载数据库”,或者“parent::__construct();
我正在创建一个 Mac 应用程序,它将一些数据保存到 SQLite 数据库中。问题是:当我关闭数据库并再次打开时,数据不存在了。这是我的代码: NSString *sql = [NSString st
我正在建立一个网站,我打算发布各种帖子,比如教程、文章等。我打算用 php 来管理它,但是当涉及到存储每个帖子的内容时,将要显示的文本,更好的选择是:使用单独的文本文件还是将其添加为数据库中的每个条目
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 3 年前。 Improve this qu
对不起,这个关键字对我来说没有任何意义...有人可以给我一个定义吗? 提前致谢... 最佳答案 这是一个品牌。 http://pervasive.com/这是他们的数据库产品的链接 http://ww
我已经在 docker 版本 1.10.1 的 docker 镜像中安装了 PostgreSQL 9.4.6。根据这张官方图片: https://github.com/docker-library/p
当我的 android 应用程序尝试读取 android 短信数据库时,我遇到了这个崩溃。读取android短信数据库的代码类似于下面的代码 fragment : String SMS_URI = "
我有一个 public kit repo,我推送了 v1.0.3 并具有以下结构 go -database --database.go --go.mod --go.sum 我需要它 require g
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 9 年前。 Improve this qu
我们正在使用MySQL数据库在Go中创建一个Web应用程序。我们的用户一次只能拥有一个活跃的客户端。就像Spotify一样,您一次只能在一台设备上听音乐。为此,我制作了一个映射,将用户ID和作为其值的
我已经尝试在 PostgreSQL 中创建数据库好几天了,遇到了几个问题,但似乎卡住了。 我在 PostgreSQL 中手动创建了一个名为 postgres_development 的数据库,因为 b
我正在创建一个 iMessage 应用程序,它需要连接到与我的常规应用程序相同的数据库。 我调用 FirebaseApp.configure() 并对用户进行身份验证,但出于某种原因,在所有 Data
就像std::unordered_map但所有数据都应存储在磁盘上而不是内存中。 按照我的理解,应该做两部分:索引和存储。我已经学习了一些关于索引的数据结构,比如 Linear-Hash 或 B-Tr
我是一名优秀的程序员,十分优秀!