答案 0 :(得分:1)
规范化是我们检查和生成有效表结构的过程。每个表应代表一个实体(主题)。不会将数据值不必要地存储在多个表中。所有非键值都取决于主键和主键。最后,每个表都没有数据异常。也就是说,规范化归结为桌面设计。
要获得1NF资格,必须识别主键,并且表格不得包含任何重复组。也就是说,每个行/列交集包含一个且仅包含一个值。此外,每个非键属性必须依赖于主键。
关于1NF中的表格:
左边的那个,事件表:这是正确的1NF。
右边的那个也符合1NF的要求。 responder_status完全或部分取决于主键,足够1NF。
为了符合第二范式,表必须是1NF。它必须没有部分依赖。
关于2NF中的表格: 左侧的第一个表,事件,正确符合条件。请注意,仅当1NF表具有复合主键时,才会从1NF转换为2NF。否则它已经在2NF。
中间表,我猜测名为incident_response(或类似的东西)也符合条件。它在1NF中,它的主键是incident_id和responder_id的组合。它没有其他属性(列),因此部分依赖关系不是问题。
右边的最后一个表,响应者,是不正确的。它不是在1NF。值在主键列responder_id中重复。此外,responder_status似乎依赖于incident_id而不依赖于responder_id。您可能希望重新考虑responder_status的语义并将其重命名和/或将其放在不同的表中。如果意图表示响应者由于被分配到事件而不可用,则您可能根本不需要该列,因为incident_response表已经捕获了响应者被分配到事件的事件。
关于依赖关系的快速说法:我们如何判断某个值是否依赖于主键?这是一个例子。如果我查看incident_id I101,它总是匹配responder_status为1.同样,每次事件I020出现在数据中它总是有responder_status为0.这表明responder_status依赖于incident_id。相反,每当responder_id R010出现时,它并不总是具有相同的responder_status值。有时它是1而另一次是0.所以它不依赖。
对于有资格获得2NF的表,它必须没有部分依赖关系。此类表中的属性必须依赖于两个主键列值。
我希望这有助于解释规范化是什么以及为什么要这样做。祝你好运。