数据库规范化验证

时间:2015-11-07 19:35:28

标签: normalization

我如何知道我是否正确标准化为2NF或3NF?我仍然在努力验证如何验证,我正确地遵循了算法。 enter image description here

这是一个与3NF相对应的规范吗?我有点失落。

2 个答案:

答案 0 :(得分:1)

根据您的数据模式,您有以下规则:

Incident可以 MANY Responders

Responder可以有 ONE Device

Responder可以有 ONE res_latitude ONE res_longitude

Device可以有 ONE Dev_installation

如果以上是您想要的,那么我认为没关系(但请再次查看主键)。

此外,我忘了提及将responder_iddevice_id保留在单独的表格中的原因是为了保留device_id更改responder_id时的历史数据。您还可以在一个表中将ResponceIncidentDevice与密钥incident_id, responder_id, device_id合并,这样您就可以知道应答器在哪些事件中携带了哪些设备。

编辑:

根据您的评论,您需要进行以下更改。另请注意,最好对所有表和列使用小写,以避免由于各种引擎实现而出现区分大小写问题。

Responders
responder_id    res_latitude    res_longitude

Responders_Devices (pk: responder_id, device_id)
responder_id    device_id
1               1
1               2
2               3
2               4
3               5

答案 1 :(得分:0)

嘿,有很多关于这个主题的教程,但它们有点复杂,我能理解你的问题。

首先,您的项目甚至不适用于First Normalization表单,因为您的第二个表RespondersIncidents是一个包含两个外键但没有主键的表。

现在让我为您简化规则。

1NF - 你必须有一个主键(一句话外行定义) 2NF - 无部分依赖关系,尽量不要在一列中包含两个条目,并确保主键唯一标识整行。 3NF - 无功能依赖性,确保在一行中只有您的特定主键能够识别整行。对于例如如果在一行中有主键(自动生成)和学生ID也是唯一的,那么我们在这里有功能依赖,这意味着我们不需要单独的主键,我们可以使用student id作为主键。

我希望这对你有所帮助。我保持简短。