问题标签 [3nf]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
704 浏览

decomposition - 合成算法,识别是否为BCNF并找到候选key

我在合成算法和寻找候选键方面遇到了一些问题,因为我觉得我课程中提供的幻灯片仅提供了如何推断它们的示例,没有任何解释。

因此,如果我们有一个具有单一关系 R[ABCDE] 的关系模式,其函数依赖关系为:{AB->CD, C->AD, E->B},

到目前为止,我已经到了这里:规范的 shell 是:C={AB->C,C->D,E->B},候选键是:EB AE 和 EC。

1) 应用合成算法找到无损且保持依赖关系的 3NF 分解。

我知道如何检查分解是否实际上是无损的和保持依赖关系,但不知道如何到达那里。请看下面:

i) 为 F 构造一个规范覆盖 C

ii) 定义 C'={X union Y | X->Y“属于”Consol(C)} 这个我知道

iii) 将 C 定义为 C' 的子集,其中删除了所有被另一个包含的关系。这我知道我是否认为正确。

iv) 如果 C 已经包含 R 的超键,则将 C2 定义为 C。否则,将 C2 定义为 C 并集 K 的某个键 K。这一步看不懂。

2)彻底激发3)中得到的分解是否也在BCNF中。

提前致谢!

0 投票
1 回答
1677 浏览

database - 将关系分解为 3NF,如何分离关系?

给定一个关系,R = ABCDE

和这组FD:

我能够找到候选键ABE(正确吗?)

我需要将这个关系 R 分解为 3NF。

我不明白的是,你用什么来分解?我认为您考虑了候选键和FD,但具体过程是什么?我看过的所有内容都太密集了,无法应用于这个小问题。

0 投票
2 回答
699 浏览

database - 判断一个关系是 3NF 还是 2NF

来自数据库管理系统书:给定关系 SNLRWH(每个字母表示一个属性)和以下功能依赖关系:

  • S->SNLRWH (S 是 PK)
  • R->W

我的尝试:

  • 首先,它不是 3NF:对于第二个 FD,R 既不包含 W,R 也不包含密钥,W 也不是密钥的一部分。
  • 其次,它是/不是2NF。如果我们检查第二个 FD,W 依赖于 R,而 R 又不是密钥的一部分。卡住。
0 投票
1 回答
78 浏览

relational-database - 第三范式援助

我有以下内容:

R = (A,B,C,D,E,F,G) FD = (A->B, C->D, E->F, ACE->G)

我正在努力分解成 3NF。我已经阅读了其他几篇文章并设法使自己感到困惑。非常感谢任何帮助。

0 投票
1 回答
63 浏览

database - 集成 2nf 和 3nf 数据库

我有一个带有多个系统的遗留 IT 环境,每个系统都有自己的数据库,该数据库引用有关我们客户的相同数据。即销售系统、会计系统和运营系统,所有这些系统都具有关于相同客户、帐户和产品的数据。

在某些情况下,此数据存储在 2nf 中,而在某些情况下则存储在 3nf 中。是否有整合两者的最佳实践或已知算法?

例如,有没有办法在 3nf 销售系统中对客户进行更改,然后在 2nf 操作系统中可靠地更新有关客户的相同信息?

谢谢,

伊恩

0 投票
0 回答
74 浏览

mysql - 当行是树的元素时数据库的规范化

我有一个 MySQL 表,它代表一个元素,它是树的一个节点。该元素有一个 ID 和一个 parent_id 元素,它引用同一个表中的另一个元素(对于顶级元素可以为 null)。我希望能够在本地(具有相同父元素的元素)和全局(我想展平树并将其呈现为列表)对这些元素进行排序。我给每个元素一个local_sorting_key,它可以对父节点中的元素进行排序,但我希望能够递归地对整个树进行排序。

我所做的是添加一个新字段 global_sorting_key,它是父级的 global_sorting_key(如果元素有父级)和 local_sorting_key 的串联。这使我可以递归地为每个元素设置一个排序键,并轻松获取整个表并使用 SQL 对其进行排序。但是,此解决方案并未标准化,因为对 local_sorting_key 的更改不会对 global_sorting_key 产生更改,从而导致内部不一致。

如何以简单的方式解决我的问题,同时保持 3NF?

0 投票
1 回答
2929 浏览

database-normalization - 查找数据库关系的最高范式

给定 FD A--> B,关系 R(A,B,C,D) 的最高范式是什么?CD--> B;A--> 光盘;光盘--> 一个不仅给出答案,还要给出逐步解决此类问题的方法。

0 投票
1 回答
80 浏览

database - 数据库设计 - 字段仅在另一个字段具有特定代码时适用(2NF)

我有以下表格设计:

WORK_ACTION_TYPE_ID 是一个简单的查找

当动作类型是动态清单时,CHECKLIST_CLASS_ID需要 a 以便动作知道要以编程方式使用的清单的细节。我不喜欢这种设计,因为如果此操作定义不是动态清单,CHECKLIST_CLASS_ID则字段不适用。我不知道区分这个事实的最佳方法。

所以说我的桌子是 2NF 而不是 3NF 可能是正确的。如果是这样,我该如何或应该尝试达到 3NF?

0 投票
1 回答
165 浏览

sql - 3NF 中的传递关系会导致其他问题中的冗余吗?

我知道冗余会导致用户无意中删除某些信息,但我相信这仅适用于 2NF。那么3NF呢?我知道 3NF 中也有传递关系;但是它在两个决定因素之间是互惠的,所以我相信这个问题一定是不同性质的。另外,3NF还有其他问题吗?

0 投票
2 回答
1129 浏览

relational-database - 第三范式——两个外键之间的传递依赖?

我正在创建一个数据库,其中包含我拥有并阅读过的书籍。我想跟踪我拥有和阅读的书(或“书名”),以及我拥有和阅读的那本书的版本(或“实体装订纸”)。

书籍和版本是多对多的。我拥有《美国的民主》一书的多个版本。我还拥有一个名为“海明威”的版本,其中包含几本书(或“书名”),其中包括一本名为“为谁敲钟”。

因此,我需要在书籍和版本之间架起一座桥梁。我的桌子是:

Book (book_pk*,title)
Edition (edition_pk*,ISBN,year)
Book_Edition (book_fk,edition_fk)

我相信说 Book_Edition 表包含复合主键是正确的。

现在,我正在处理我的阅读表,其中将包含我已阅读的书籍以及阅读它们的日期。到目前为止,我的阅读表包含:

阅读 (read_pk,date,note)

但是,我现在需要将我的阅读表与我的书籍和版本联系起来。在我看来, book_fk 和 edition_fk 在这种情况下是传递依赖的。那么如何遵守第三范式呢?

选项 1:
将 Read 表修改为:Read (read_pk,date,note,book_fk,edition_fk)

选项 2:
将 Book_Edition 表修改为:Book_Edition (book_edition_pk,book_fk,edition_fk)
将 Read 表修改为:Read (read_pk,date,note,book_edition_fk)

选项3:???

任何见解将不胜感激。抱歉,如果这已在其他地方处理过;我看到了一些看起来很有希望的帖子,但作为一个相对的 n00b,我无法破译它们并将它们应用于我的情况。


每个 sqlvogel 编辑:
让我尝试识别依赖关系——也就是说,我试图识别如果字段 A 发生更改,那么字段 B 必须或可能更改的位置。我认为我觉得这很困难,因为书籍(“书名”和“装订纸集”)本质上是永久性的。我唯一希望编辑标题、ISBN 或年份字段的情况是出现数据输入错误。如果特定 edition_pk 的 ISBN 输入不正确,则同一个 edition_pk 的年份也可能输入不正确,但这是依赖关系吗?

关于读表,我相信情况也差不多。每次阅读一本书时都会创建记录,理论上永远不会编辑。我想确定在特定日期阅读的书籍和版本。如果存在数据输入错误,它可能会影响一个或多个字段。特别是,如果输入了错误的 book_fk,很可能也输入了错误的 edition_fk。同样,这是我应该担心的依赖吗?

在考虑依赖关系时,我还需要考虑其他什么吗?