您的系统允许新用户注册并输入他们的结婚日期。作为一个纯粹主义者,我想把它作为约会存储。在用户访谈之后,很明显现实与此方法不同。用户通常不确定当天或月份,并希望存储部分日期,因此“2009年6月”或“2012年的某个时间”。
有没有人知道一个好的设计模式,允许存储部分日期,然后尝试为重要日子创建时间表 - 即使输入了部分日期?
答案 0 :(得分:3)
您可以将其存储为具有日期和日期之前列的范围。
答案 1 :(得分:2)
您始终可以将日期存储在不同的列中:
让它们都可以为空。您可以添加用于存储计算的全部时间的列。对于该计算时间,您对所有为空的列使用一些默认值。
答案 2 :(得分:2)
也许是一个“模糊”的约会。如果他们说“2009年6月”,可以存储为2009年6月15日,差异为+/- 15天。
“2010年的某个时间”将于2010年7月1日,差异为180天。
所以存储日期和#天。
如果/如何在实践中发挥作用我不知道。只是一个想法。日期范围可能更容易实现。
答案 3 :(得分:1)
您可以将日期存储为YYYYMMDD
,将未知的月/天设置为0.例如,20090200
将是“2009年2月的某一天”。这将使您可以相对轻松地进行排序和比较,如果您需要将其转换为日期,您可以在月份或日期添加1以获得更高级日期比较的近似值。
答案 4 :(得分:1)
我有类似日期的问题;还有一些人也想说“6月15日”而没有指明年份。这是一个你必须处理的案例吗?
我将日,月和年存储在数据库中的三个单独的列中,每个列都可以为空,然后(稍微)重新发明了我的应用程序中的轮子(以及不允许某些情况,例如人们说“The 15th” 1974年“)。
但是,当我将所有日期处理逻辑放在我的应用程序中时,我从未单独访问过三列。事后我希望我把它们放在一个列中,将部分日期保存为字符串(类似“19740615”,“1974 ----”,“---- 0615”等),这样我就是d具有较少的列杂乱。
我想这取决于你想在数据库中做多少以及你想在应用程序中做多少。无论哪种方式,我认为你会发明一种略有不同形状的轮子。但是,当然,你已经足够好,可以制作一些整洁,封装,可重复使用的课程 - 这将使它变得有趣! : - )