Запишите вверх, мой вопрос окажется похожим на вопрос SO 1668172.
Это вопрос дизайна, который наверняка должен был появиться для других, но я не смог найти ответ, который соответствует моей ситуации. Я хочу записать дату рождения в моем приложении с несколькими "уровнями" информации:
-
NULL
значение, то есть DoB не указано -
1950-??-??
Известно только значение года DoB, дата/месяц не -
????-11-23
Всего месяц, день или комбинация из двух, но без года -
1950-11-23
Известен полный DoB
Технологии, которые я использую для моего приложения, следующие:
- Asp.NET 4 (С#), возможно, с MVC
- Некоторые решения ORM, возможно, Linq-to-sql или NHibernate's
- MSSQL Server 2008, сначала только версия Express
Возможности для SQL-бит, которые до сих пор переходили мне в голову:
- 1) Используйте один нулевой столбец varchar, например.
1950-11-23
, и замените unkowns на "X", например.XXXX-11-23
или1950-XX-XX
- 2) Используйте три нулевых столбца int, например.
1950
,11
и23
- 3) Используйте столбец INT за год, а также столбец datetime для всех известных DoBs
Для конца С# этой проблемы я просто воспользовался этими двумя вариантами:
- A) Используйте свойство string для представления DoB, конвертируйте только для просмотра.
- B) Используйте пользовательскую (?) структуру или класс для DoB с тремя целыми числами с нулевым значением.
- C) Используйте нулевое значение DateTime вместе с нулевым целым числом в течение года
Решения, похоже, образуют согласованные пары в 1A, 2B или 3C. Конечно, 1A не является хорошим решением, но оно устанавливает базовую линию.
Любые советы и ссылки высоко ценятся. Ну, если они связаны, так или иначе:)
Изменить, об ответах. Я принял один ответ как принятый, потому что я думаю, что это сработает для меня. Это стоит посмотреть на другие ответы, хотя, если вы споткнулись здесь с тем же вопросом.