数据库规范化验证

Database Normalization Validation

我如何知道我是否正确归一化为 2NF 或 3NF?我仍在努力验证,我是否正确地遵循了算法。

这是对应于 3NF 的规范化吗?我有点迷茫。

根据您的数据架构,您有以下规则:

Incident 处可以有 MANY Responders.

一个Responder可以有一个Device.

一个Responder可以有ONEres_latitudeONEres_longitude.

一个Device可以有一个Dev_installation.

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

此外,我忘了说将 responder_iddevice_id 分开保存的原因 table 是为了保留历史数据以防 device_id 更改 responder_id。您还可以将 ResponceIncidentDevice 合并为一个 table 和密钥 incident_id, responder_id, device_id 这样您就可以知道在哪些事件中应答器携带了哪些设备。

编辑:

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

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

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

首先,您的项目对于 First Normalization 表单甚至都不合法,因为您的第二个 table,RespondersIncidents,是一个 table,它有两个外键,但您没有主键。

现在让我为您简化规则。

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

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