Sql 使用smalldatetime或int在数据库中存储月份

Sql 使用smalldatetime或int在数据库中存储月份,sql,database,database-design,Sql,Database,Database Design,我目前正在为我们的组织开发月度检查表系统。用户可以登录,选择一个月,然后提交与该月相关的是/否问题列表,以供我们组织使用。其中一些问题在一个多月的清单中使用,因此我正在创建一个交叉表来促进这种一对多关系。字段为ChecklistMonth和ChecklistQuestionID 但是,我不确定如何存储ChecklistMonth字段。如果我使用smalldatetime,似乎有点过头了,因为我只对这个月感兴趣。在未来几年里,它看起来也有点过时。另一方面,创建一个包含MonthID和Month字段

我目前正在为我们的组织开发月度检查表系统。用户可以登录,选择一个月,然后提交与该月相关的是/否问题列表,以供我们组织使用。其中一些问题在一个多月的清单中使用,因此我正在创建一个交叉表来促进这种一对多关系。字段为ChecklistMonth和ChecklistQuestionID

但是,我不确定如何存储ChecklistMonth字段。如果我使用smalldatetime,似乎有点过头了,因为我只对这个月感兴趣。在未来几年里,它看起来也有点过时。另一方面,创建一个包含MonthID和Month字段的表以仅标识月份似乎有点浪费


大家对此有什么看法?提前谢谢。

如果是一个月,不考虑年份,我就用一个罐头。我不认为你需要一个单独的查找表,因为月份的数字是非常明确和通用的(没有进入中国或犹太日历,等等)

如果您使用任何类型的日期时间,那么您总是需要记住它的确切规则。您是否将其存储为每月的第一天?月中旬?哪一年?另外,在数据库中使用额外的、不必要的空间

编辑:我以为我已经在回复中添加了这个,但显然不是。。。请记住向列添加检查约束:

CHECK (month BETWEEN 1 AND 12)

咬紧牙关,使用MonthID。从长远来看,这是一个更好的决定,因为它更清晰,而且创建一个月的枚举表所涉及的浪费是微不足道的


(顺便说一下,使用一个月份的枚举表的决定,虽然有些人认为它是不必要的,但我认为是正确的)。更不用说,你还得抽出这个月来检查是否是你要查询的月份


你需要对照表吗?你的月数应该是1=1月,2=2月到12月。我认为拥有一个包含月号的字段是preety自我记录,不需要额外的查找表。当然,假设您只处理一个日历。

正如答案中所建议的那样,我甚至没有想到只在字段中使用一个锡,也不太担心扩展的内容。感谢您的回复,我真的很感激。我通常是一个在适当的时候使用查找表的大倡导者——但在这里,正如Tom H所指出的,有12个众所周知的、永不改变的元素,所以查找表很可能有点过头了,不是吗?我同意这是过头了。然而,这是一个需要大约5-10分钟才能实现的过度操作。如果你问我的话,可能值得(最小的)努力。然而,这只是我的观点;其他人的观点可能有所不同。