我注意到,在设计数据库时,我倾向于将任何重复的数据集转移到单独的表中。例如,假设我有一桌人,每个人都生活在一个州。然后,我会将这些重复状态移动到一个单独的表中,并用外键引用它们。
但是,如果我不再存储有关状态的任何数据怎么办。然后我会有一个带有 StateID 和 State in 的表。这个操作正确吗?状态依赖于用户表的主键,那么将其转移到自己的表中是否有帮助?
谢谢,
我注意到,在设计数据库时,我倾向于将任何重复的数据集转移到单独的表中。例如,假设我有一桌人,每个人都生活在一个州。然后,我会将这些重复状态移动到一个单独的表中,并用外键引用它们。
但是,如果我不再存储有关状态的任何数据怎么办。然后我会有一个带有 StateID 和 State in 的表。这个操作正确吗?状态依赖于用户表的主键,那么将其转移到自己的表中是否有帮助?
谢谢,
我相信,在将表格放置为Second Normal Form的过程中,需要删除表格中重复数据的子集并将它们放在自己的表格中。
将状态缩写移动到它自己的表中是您将如何规范化您的数据库。它可以保护您的“用户”表免受更新异常的影响,假设由于某种原因,肯塔基州的缩写“KY”更新为“KQ”。通过在包含 states 表的主键的用户表中放置一个外键,您只需对 states 表进行一次更新即可为所有用户更正此条目。
话虽如此,对我们来说,州缩写并不经常变化似乎很明显。因此,如果您知道您的数据库将永远不需要存储有关状态的更多信息,那么将状态字段留在用户表中是合乎逻辑且基本合理的。这种反规范化很常见。它将增加用户表中数据的可读性,并减少执行连接的开销。然而,这是偏好。
State 表应该与 users 表没有键关系,它应该只包含有关状态的数据。
为了使每个表尽可能简单,您可能想要做的是将用户数据保存在 User 表中,将状态数据保存在 State 表中,然后构建一个与 User 和状态表。
至于那是哪种形式的标准化,我不确定。