rah*_*rma 6 sql sql-server sql-server-2005
我必须在我的表中存储年份和月份以及下个月的另外两列主题和主题详细信息我data type应该使用什么
我应该smalldatetime通过制作日期来使用和存储它们09/01/2011吗?
我应该使用两列varchar或int分别存储年份和月份2011 09吗?
我应该使用一个列varchar来存储它们,如何连接它们201109?
EDITED
有一件事我还想补充一点,我必须在搜索中使用这些列,所以我必须在where子句中使用它们所以在回答这个事情也很重要
通常情况下,无论您的限制是什么,我都会建议使用日期日期类型,因为它允许您进行日期操作和比较.然后,您可以使用触发器将日期限制为该月的第一天.您需要触发器以确保单个月/年组合不能获得两行.
实际上,正如
Damian_The_Unbeliever在评论中正确指出的那样,如果您的意图是仅允许用户尝试插入月份日期为1的日期,则不需要触发器.在这种情况下,约束可能就足够了.只有在您希望允许用户尝试插入任何日期但实际强制它成为该月的第一天的情况下,才需要该触发器.
但是,在这种情况下,根据您的使用情况,我会对两列年/月设置感到满意.
通过使用两个整数类型列,您无需担心触发器,并且您似乎不需要根据列规范对表内容进行大量处理.
如果您预见到需要处理给定年份的数据(与月份无关),我不会将它们存储为单个整数类型列.将年份分开将允许一个不同的索引,这可能比获得一系列YYYYMM值更快.
说真的,选择你认为最容易编码的那个(并满足功能要求).然后,当且仅当您发现性能问题时,请查看架构重新组织.数据库不是一劳永逸的事情,你应该不断监视它们的问题,并在必要时改变一些事情.