Как разработать дату рождения в БД и ORM для сочетания известных и неизвестных частей даты

Обратите внимание,мой вопрос оказывается похожим на вопрос SO 1668172 .


Это вопрос дизайна, который наверняка возникал раньше у других, но я не мог найти ответа, который подходит для моей ситуации. Я хочу записать дату рождения в своем приложении с несколькими «уровнями» информации:

  • NULL значение, т.е. DoB не известен
  • 1950 - ?? - ?? Только DoB значение года известно, число / месяц нет
  • ???? - 11-23 Просто месяц, день или их комбинация, но без года
  • 1950-11-23 Известен полный DoB

Для своего приложения я использую следующие технологии:

  • Asp.NET 4 (C #), возможно, с MVC
  • Некоторое решение ORM, возможно, Linq-to-sql или
  • MSSQL Server 2008 NHibernate, сначала только Express edition

Возможности для бита SQL, которые приходили мне в голову до сих пор:

  • 1) Используйте один столбец varchar, допускающий значение NULL, например 1950-11-23 и замените unkown на 'X, например XXXX-11-23 или 1950-XX-XX
  • 2) Используйте три столбца int, допускающие значение NULL, например 1950 , 11 и 23
  • 3) Используйте столбец INT для года, плюс столбец datetime для всех известных DoB.

Для конца C # этого проблема Я просто дошел до этих двух вариантов:

  • A) Использовать строковое свойство для представления DoB, преобразовывать только для целей просмотра.
  • B) Использовать настраиваемую (?) структуру или класс для DoB с тремя целыми числами, допускающими значение NULL
  • C) Используйте DateTime, допускающее значение NULL, вместе с целым числом, допускающим значение NULL, для года

. Похоже, что решения образуют согласованные пары в 1A , 2B или 3C . Конечно, 1A - не лучшее решение, но оно устанавливает базовый уровень.

Любые советы и ссылки приветствуются. Ну, в любом случае, если они связаны:)


Редактировать, по поводу ответов : Я пометил один ответ как принятый, потому что я думаю, что он сработает для меня. Тем не менее, стоит взглянуть и на другие ответы, если вы наткнулись на тот же вопрос.

11
задан Community 23 May 2017 в 12:04
поделиться