database - 这是正常化的哪个阶段? (将重复数据移动到单独的表中)

标签 database database-design database-normalization

我注意到,在设计数据库时,我倾向于将任何重复的数据集转移到一个单独的表中。例如,假设我有一张人 table ,每个人都生活在一个州。然后,我会将这些重复状态移动到一个单独的表中,并使用外键引用它们。

但是,如果我不再存储任何有关状态的数据会怎样。然后我会有一个包含 StateID 和 State 的表。此操作是否正确?状态取决于 users 表的主键,因此将其转移到自己的表中有什么帮助吗?

谢谢,

最佳答案

我认为,在以第二范式放置表格的过程中,需要删除表格中重复数据的子集并将它们放入自己的表格中。

将州缩写移动到它自己的表中是规范化数据库的方式。它保护您的“用户”表免受更新异常的影响,假设由于某种原因,肯塔基州的缩写“KY”更新为“KQ”。通过在包含状态表主键的用户表中放置一个外键,您只需对状态表进行一次更新即可为所有用户更正此条目。

话虽这么说,但对我们来说很明显,各州的缩写并不经常更改。因此,如果您知道您的数据库永远不需要存储有关状态的更多信息,那么将状态字段保留在用户表中是合乎逻辑且从根本上讲是合理的。此类的反规范化很常见。它将增加用户表中数据的可读性,并减少执行连接的开销。然而,这是偏好。

关于database - 这是正常化的哪个阶段? (将重复数据移动到单独的表中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2621443/

相关文章:

mysql - 如果记录尚不存在,则插入记录的有效方法是,如果存在则获取 ID 并将其用作外键?

database-design - 设计无损连接、依赖关系保留、3NF 数据库

mysql - 如何将图像/文件存储在通过表单输入的文件夹中并将地址保存到sql DB?

sql - Oracle RDBMS 记录是否有索引或时间戳?如何获取?

mysql - MySQL 中分隔符内的匹配短语

database - 通过标准化 (3NF) 进行工作

php - 社交网络类型网站的规范化表

php - 将两个表中的数据插入到另一个表中

MySQL:存储来自可能在表单上显示可变时间的字段的值

android - 共享数据库数据