我如何向我的同事解释这是不必要的复杂性和冗余数据?
数据库图图片
他想要一个年份表,因为许多表都有年份值,他还想有一个带有名称和年份的关系表,我只是想确保即使 2NF 这么说,这不是一个好的做法......
这取决于。每年是否需要在应用程序中管理"实体"?
回答以下问题:
- 年份有属性吗?
- 它需要关闭吗?(它会改变状态吗?
- 您是否需要记录谁在何时关闭它,出于什么原因关闭了它?
- 可以重新打开什么的吗?(是否有相关的工作流程?
如果你对这些问题(和其他问题(回答"否",那么它就不是一个实体。
如果你回答"是",那么它就是。如果是,那么您可能需要一个包含属性和主键的额外表;其他表将具有它的外键。
但最终的答案是...这取决于商业模式。
你会做一个整数表吗? 我认为不是。
你会为日期做一个表格吗? 嗯,这是有道理的。 假设您要列出一个月中的所有日期,甚至是没有数据的日期。在这种情况下,带有日期表的LEFT JOIN
提供了一种创建带有零的"报告"的方法,用于丢失数据。
有一种名为YEAR
的数据类型运行良好。 你可能没有任何缺失的岁月?
(口头禅:正常化,但不要过度规范化。