DBMS NORMALIZATION 第二规范化形式

DBMS NORMALIZATION 2nd Normalization Form

选民(voter_id, voter_name, residential_address, current_city, current_state, current_postal_code).

每个城市和州的邮政编码都是唯一的,每个地址只有一个邮政编码。

在规范化方面,选民是 2nf 还是 3nf?

通过 BCNF 的规范化基于函数依赖性。它 不是 基于列名,尽管这似乎是大学生根据他们在 SO 上的问题被教授的内容。

我假设 "voter_id" 是代理键,但这只是有根据的猜测。 (这不是设计数据库的良好基础。)如果它是代理键,那么"voter_id"是唯一的,所以我们有这个FD。

  • voter_id -> voter_name, residential_address, current_city, current_state, current_postal_code

你说,"Postal code is unique for each city and state . . .",所以我们也有这个FD

  • current_city, current_state -> current_postal_code

最后,你说,“……每个地址只有一个邮政编码”。

根据我的经验,我认为您的意思不太可能是 residential_address -> current_postal_code。我想你的意思是 residential_address、current_city、current_state -> current_postal_code。但是我们已经知道 current_city、current_state -> current_postal_code,所以这并没有告诉我们任何关于函数依赖的有用信息。

如果只有这两个函数依赖,那么"voters"的唯一候选键就是"voter_id"。

2NF 与部分键依赖有关。 only 候选键是 single 列。因此,partial 关键依赖不能存在。所以 "voters" 在 2NF 中。

3NF 关注传递依赖。至少有一个:voter_id -> current_city、current_state 和 current_city、current_state -> current_postal_code。所以 "voters" 不在 3NF 中。

要检查其最高范式,请遵循以下基本步骤:

  1. 为了简单起见,首先重命名"Voter"的属性。 voter_id 作为 "A" voter_name 作为 "B" residential_address 作为 "C" current_city 作为 "D" current_state 作为 "E" current_postal_code 作为 "F"

  2. 根据给定的 FD:{DE -> F , C -> F }

3.Here 候选键是:{ABCDE}。 因此,
素数属性(5):{A,B,C,D,E}, 非 Prime 属性 (1):{F}

对于 2NF: "Partial Dependencies are not allowed"。 意味着,候选键的一部分不应该确定非素数属性。

这里,部分依赖是:{DE -> F , C -> F }

所以,这个 table 不在 2NF 中。

**要进入2NF,关系应该像这样分解:

R1 ={DEF},

R2 = {CF}

R3 = {ABCDE}

希望这对您有所帮助。有关如何分解 table 等更多详细信息,您还可以参考:Detailed explanation of Normal forms