在我的国家/地区(法国),有些人的出生日期为YYYY-00-00
(00/00/YYYY
)。这是一个法律惯例(并用于身份证),通常适用于不知道确切出生日期的移民。
当然这是数据库和算法中的一个问题。
你有没遇到过这种情况?你如何解决?你会选择什么?
答案 0 :(得分:0)
由于我很少需要使用出生日期进行计算(有时只是为了确定年龄),我将其存储为字符串,并在需要将其用作日期时将其替换为01/01/YYYY
。
但是我不知道这个年龄是如何合法计算的,而且我对它在语义上并不满意。
答案 1 :(得分:0)
您的问题有几种可能的解决方案,让我来描述一下:
您的解决方案可以解决问题,但会产生一些新问题。 Moo-Juice指出了其中一个问题,但也存在其他一些问题。例如,在应用程序级别处理这些日期将变得越来越困难,因为我相信您将在将这些值转换为日期时遇到问题。此外,阅读日期和日期有困难也不好。为了阅读这些日子,你将不得不处理成千上万的字符串解析。
您可以使用3列。一年一个,一个月另一个,一天另一个。如果日期或月份为0,那么我们所说的是一个出生日期不确定的移民。
您还可以通过设置给定年份和默认月/日的日期来解决应用程序级别的问题。当然,您必须明智地选择默认的月份和日期。最简单的是选择1月1日作为默认日期。但是,如果我是你,我会检查以下问题的答案:
如果移民出生于2000年,他/她的出生月份和日期是 不知道,然后根据法国人的确切日期 立法将考虑给予他人并允许他们投票 2018?
我会选择第三个选项,因为它简化了值的处理方法,保持其原子性和类型可以是日期。此外,如果您必须更改默认值,那么通过更改存储算法可以很容易地做到这一点。可能的问题是您必须更改默认日期并将其应用于已存储在数据库中的移民。为了防止威胁您的应用程序的严重一致性问题,您可以在表中为UnkownBirthDate创建另一列,因此在更改默认日期的情况下,您将知道应该从已存储的用户/人员更改其日期。
干杯。