【发布时间】:2010-10-11 11:24:42
【问题描述】:
您的系统允许新用户注册并输入他们的结婚日期。作为一个纯粹主义者,我想把它存储为一个日期。在用户采访之后,很明显现实与这种方法不同。用户通常不确定日期或月份,并希望存储部分日期,例如“2009 年 6 月”或“2012 年的某个时间”。
有没有人知道一个好的设计模式,它允许存储部分日期,然后尝试为重要的日子创建一个时间线——即使输入了部分日期?
【问题讨论】:
标签: sql design-patterns date null
您的系统允许新用户注册并输入他们的结婚日期。作为一个纯粹主义者,我想把它存储为一个日期。在用户采访之后,很明显现实与这种方法不同。用户通常不确定日期或月份,并希望存储部分日期,例如“2009 年 6 月”或“2012 年的某个时间”。
有没有人知道一个好的设计模式,它允许存储部分日期,然后尝试为重要的日子创建一个时间线——即使输入了部分日期?
【问题讨论】:
标签: sql design-patterns date null
您始终可以将日期存储在单独的列中:
让它们都可以为空。您可以添加一列来存储计算的全时。对于该计算时间,您对所有为空的列使用一些默认值。
【讨论】:
我在日期方面遇到了类似的问题;加上一些人也想说“6 月 15 日”的附加问题,但没有指定年份。这也是你要处理的案子吗?
我将日、月和年存储在数据库中的三个单独的列中,每个列都可以为空,然后(在某种程度上)在我的应用程序中重新发明了轮子(以及禁止某些情况,例如人们说“15 日1974 年的")。
但是,当我将所有日期处理逻辑都放在我的应用程序中时,我从未单独访问过这三列。事后看来,我希望我把它们放在一个列中,将部分日期保存为字符串(例如“19740615”、“1974----”、“----0615”等),这样我就可以d 减少列混乱。
我想这取决于您想在数据库中执行多少操作以及您想要在应用程序中执行多少操作。无论哪种方式,我认为您将发明一个形状略有不同的轮子。但是,当然,你可以制作一些整洁、封装、可重用的类——这会让它变得有趣! :-)
【讨论】:
您可以将日期存储为 YYYYMMDD,将未知月份/天数设置为 0。例如,20090200 将是“2009 年 2 月的某天”。这将使您相对轻松地进行排序和比较,如果您需要将其转换为日期,您只需将月或日加 1 即可获得近似值,以便进行更高级的日期比较。
【讨论】:
也许是一个“模糊”的日期。如果他们说“2009 年 6 月”,则可以存储为 2009 年 6 月 15 日,差异为 +/- 15 天。
“2010 年的某个时间”是 2010 年 7 月 1 日,相差 180 天。
所以存储一个日期和 # 天。
我不知道这是否/如何在实践中起作用。只是一个想法。日期范围可能更容易实现。
【讨论】:
您可以将其存储为包含日期后和日期前列的范围。
【讨论】: