我注意到,在设计数据库时,我倾向于将任何重复的数据集转移到一个单独的表中。例如,假设我有一张人 table ,每个人都生活在一个州。然后,我会将这些重复状态移动到一个单独的表中,并使用外键引用它们。
但是,如果我不再存储任何有关状态的数据会怎样。然后我会有一个包含 StateID 和 State 的表。此操作是否正确?状态取决于 users 表的主键,因此将其转移到自己的表中有什么帮助吗?
谢谢,
最佳答案
我认为,在以第二范式放置表格的过程中,需要删除表格中重复数据的子集并将它们放入自己的表格中。
将州缩写移动到它自己的表中是规范化数据库的方式。它保护您的“用户”表免受更新异常的影响,假设由于某种原因,肯塔基州的缩写“KY”更新为“KQ”。通过在包含状态表主键的用户表中放置一个外键,您只需对状态表进行一次更新即可为所有用户更正此条目。
话虽这么说,但对我们来说很明显,各州的缩写并不经常更改。因此,如果您知道您的数据库永远不需要存储有关状态的更多信息,那么将状态字段保留在用户表中是合乎逻辑且从根本上讲是合理的。此类的反规范化很常见。它将增加用户表中数据的可读性,并减少执行连接的开销。然而,这是偏好。
关于database - 这是正常化的哪个阶段? (将重复数据移动到单独的表中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2621443/