2014-01-10 59 views
4

在我的國家(法國),有些人的出生日期像YYYY-00-0000/00/YYYY)。這是一個法律慣例(並用於身份證),通常是不知道確切出生日期的移民。「YYYY-00-00」/「00/00/YYYY」的出生日期

當然,這是數據庫和算法的問題。

你有沒有遇到過這種情況?你如何解決?你會選擇什麼?

+0

「AAAA」在這裏是「AAAA」字符串文字,還是打算成爲實際日期的佔位符,例如:出生日期可以是'1950-00-00'? – Dukeling

+0

我猜法文中的'AAAA'是英文的'YYYY':它是4位數年份的佔位符。問題是關於零日和月。 –

+0

對不起,應該是YYYY。我修正了這一點。 –

回答

0

有你的問題的幾種可能的解決方案,讓我描述他們:

  1. 您的解決方案解決了這個問題,但創建若干新的問題。 Moo-Juice指出了其中一個問題,但也有其他一些問題。例如,在應用程序級別,處理這些日期將越來越困難,因爲我相信在將這些值轉換爲日期時會遇到問題。另外,在閱讀月份和日期時遇到困難是不好的。你將不得不處理數以千計的字符串解析來閱讀這些日子。

  2. 您可以使用3列。一年一個,一個月另一個,一天另一個。如果日或月是0,那麼我們正在談論一個出生日期不確定的移民。

  3. 您還可以通過設置給定年份和默認月份/日期的日期來解決應用程序級別的問題。當然,你將不得不明智地選擇默認的月份和日期。最簡單的是選擇1月1日作爲默認日期。不過,如果我是你,我會檢查回答以下問題:

如果一個移民誕生於2000年和他/她的出生月份和日期是 不知道,那會是什麼根據法國 立法確切的一天,將考慮給予的人並允許在 2018投票?

我會選擇第三個選項,因爲它簡化了值的處理方法,保持其原子性,其類型可以是日期。此外,如果您必須更改默認值,那麼通過更改存儲算法可以很簡單地完成此操作。可能的問題是您必須更改默認日期並將其應用於已存儲在數據庫中的移民。爲防止威脅應用程序的嚴重一致性問題,您可以在表中爲UnkownBirthDate創建另一列,以便在更改默認日期的情況下,您將知道應該從已存儲的用戶/人員更改哪些日期。

乾杯。

0

由於我很少需要使用出生日期進行計算(有時只是爲了確定年齡),因此我將其存儲爲字符串,並在需要將其作爲日期使用時將其替換爲01/01/YYYY。 但我不知道年齡是如何合法計算的,我對它的語義不滿意。

+1

將字符串存儲爲字符串時,您可能會遇到排序問題。你可能不需要做計算,但排序可能是一個問題。 –