Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Неполная дата рождения. Как хранить?  [new]
=Сергей=
Member

Откуда:
Сообщений: 334
Меняю структуру БД. Столкнулся с хранением Даты рождения в виде строки 'ЧЧММГГГГ', тут же решил преобразовать в date, но не тут то было: есть неполные даты рождения: без дня, без месяца... - отсутствующие фрагменты заменены на нули - 00001926 - xx.xx.1926
С одной стороны, нужно обеспечить максимальную гибкость поиска, то есть разделить дату на 3 целочисленных индексированных составляющих, но с другой - не хотелось бы раздувать количество полей. Порекомендуйте решение.
13 июл 16, 14:20    [19404475]     Ответить | Цитировать Сообщить модератору
 Re: Неполная дата рождения. Как хранить?  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Если число или месяц отсутствует - считать что человек родился на новый год 01/01. И все хранить как DATE в одном столбце. Разумный компромисс...
13 июл 16, 14:39    [19404560]     Ответить | Цитировать Сообщить модератору
 Re: Неполная дата рождения. Как хранить?  [new]
ппп-п
Guest
=Сергей=,

Мы у себя храним ДАТУ + МАСКУ.

Т.е. если у Вас есть ГОД(1999) и МЕСЯЦ(02)

1. Дата = 1999-02-01
2. Маска = YYYYMM

Маска может быть YYYY, YYYYMM, YYYYMMDD

Может и Вам такая схема подойдет.
13 июл 16, 14:40    [19404566]     Ответить | Цитировать Сообщить модератору
 Re: Неполная дата рождения. Как хранить?  [new]
o-o
Guest
AlanDenton
Если число или месяц отсутствует - считать что человек родился на новый год 01/01. И все хранить как DATE в одном столбце. Разумный компромисс...

а как же тогда отличить, по-правде 01/01 родился или нет?
зададут потом точную дату для поиска, с 01/01, а получат еще и левых
13 июл 16, 14:43    [19404579]     Ответить | Цитировать Сообщить модератору
 Re: Неполная дата рождения. Как хранить?  [new]
L.Otujktd
Member

Откуда:
Сообщений: 112
=Сергей=,

Если попробовать вынести строку в отдельную таблицу и связывать по ключу? Правда Для работы скорее придется писать хранимки.
13 июл 16, 14:45    [19404595]     Ответить | Цитировать Сообщить модератору
 Re: Неполная дата рождения. Как хранить?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
L.Otujktd
=Сергей=,

Если попробовать вынести строку в отдельную таблицу и связывать по ключу? Правда Для работы скорее придется писать хранимки.

для случая если человек родился несколько раз?
13 июл 16, 14:55    [19404660]     Ответить | Цитировать Сообщить модератору
 Re: Неполная дата рождения. Как хранить?  [new]
iap
Member

Откуда: Москва
Сообщений: 47052
=Сергей=
Порекомендуйте решение
Раздуть количество полей
13 июл 16, 15:07    [19404744]     Ответить | Цитировать Сообщить модератору
 Re: Неполная дата рождения. Как хранить?  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5114
=Сергей=
Меняю структуру БД... нужно обеспечить максимальную гибкость поиска, то есть разделить дату на 3 целочисленных индексированных составляющих
архитектура БД начинается "от запросов" т.е. как будет использоваться.
если "нужно обеспечить максимальную гибкость поиска", то как уже посоветовали дуйте поля.
13 июл 16, 15:17    [19404792]     Ответить | Цитировать Сообщить модератору
 Re: Неполная дата рождения. Как хранить?  [new]
L.Otujktd
Member

Откуда:
Сообщений: 112
TaPaK,

Тогда выносим связи в отдельную таблицу :). Тут уж надо понимать сколько дат может быть у одной сущности-одна или набор.
13 июл 16, 15:31    [19404844]     Ответить | Цитировать Сообщить модератору
 Re: Неполная дата рождения. Как хранить?  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
=Сергей=
Меняю структуру БД. Столкнулся с хранением Даты рождения в виде строки 'ЧЧММГГГГ', тут же решил преобразовать в date, но не тут то было: есть неполные даты рождения: без дня, без месяца... - отсутствующие фрагменты заменены на нули - 00001926 - xx.xx.1926
С одной стороны, нужно обеспечить максимальную гибкость поиска, то есть разделить дату на 3 целочисленных индексированных составляющих, но с другой - не хотелось бы раздувать количество полей. Порекомендуйте решение.
Неполная ДР это отсутствие ДР. :)
Ставьте 1янв. нужного года. Или 01-01-1900. И тогда можно будет найти и заполнить неполные ДР. А еще есть комментарий. Не ?

От неполной даты пользы нет, ИМХО.
13 июл 16, 15:40    [19404896]     Ответить | Цитировать Сообщить модератору
 Re: Неполная дата рождения. Как хранить?  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2395
LSV,

>>Неполная ДР это отсутствие ДР
не совсем. если девочка не стала указывать год, то все равно можно используя дд и мм, поздравить ее
так что некий признак "не указано" и "не полностью указано" можно прикручивать
(в простейшем случае null и какой нить 1900 год )
13 июл 16, 15:48    [19404936]     Ответить | Цитировать Сообщить модератору
 Re: Неполная дата рождения. Как хранить?  [new]
schi
Member

Откуда: Москва
Сообщений: 2601
=Сергей=
Меняю структуру БД. Столкнулся с хранением Даты рождения в виде строки 'ЧЧММГГГГ', тут же решил преобразовать в date, но не тут то было: есть неполные даты рождения: без дня, без месяца... - отсутствующие фрагменты заменены на нули - 00001926 - xx.xx.1926
С одной стороны, нужно обеспечить максимальную гибкость поиска, то есть разделить дату на 3 целочисленных индексированных составляющих, но с другой - не хотелось бы раздувать количество полей. Порекомендуйте решение.


А что вы делаете с неполными днями рождения и зачем они хранятся ?
13 июл 16, 18:05    [19405756]     Ответить | Цитировать Сообщить модератору
 Re: Неполная дата рождения. Как хранить?  [new]
o-o
Guest
schi,

постом выше -- конспирируют возраст женщин.
тогда вроде и завернуть анкету за незаполненностью нельзя,
и подарок на ДР мадам получит.
и вечная молодость, да
13 июл 16, 18:11    [19405810]     Ответить | Цитировать Сообщить модератору
 Re: Неполная дата рождения. Как хранить?  [new]
ппп-пп
Guest
schi
=Сергей=
Меняю структуру БД. Столкнулся с хранением Даты рождения в виде строки 'ЧЧММГГГГ', тут же решил преобразовать в date, но не тут то было: есть неполные даты рождения: без дня, без месяца... - отсутствующие фрагменты заменены на нули - 00001926 - xx.xx.1926
С одной стороны, нужно обеспечить максимальную гибкость поиска, то есть разделить дату на 3 целочисленных индексированных составляющих, но с другой - не хотелось бы раздувать количество полей. Порекомендуйте решение.


А что вы делаете с неполными днями рождения и зачем они хранятся ?


В принципе использование неполных дат считается нормальной практикой при работе с людьми. В штатах такое много где есть.
Вы обращаетесь к человеку и просите предоставить его данные. Полнота данных, называть ли только год, месяц или число - это решение человека. Особенно это распространено во всякой спонсорской деятельности.
13 июл 16, 18:40    [19406003]     Ответить | Цитировать Сообщить модератору
 Re: Неполная дата рождения. Как хранить?  [new]
o-o
Guest
ппп-пп
В принципе использование неполных дат считается нормальной практикой при работе с людьми. В штатах такое много где есть.

В порядке расширения кругозора:
а 3 буквы от фамилии предоставить там тоже нормально?
13 июл 16, 19:02    [19406108]     Ответить | Цитировать Сообщить модератору
 Re: Неполная дата рождения. Как хранить?  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1814
Если структура неполная, то храните как INT
19980823
199710
1994
13 июл 16, 23:46    [19406845]     Ответить | Цитировать Сообщить модератору
 Re: Неполная дата рождения. Как хранить?  [new]
o-o
Guest
X-Cite
Если структура неполная, то храните как INT
19980823
199710
1994

А 2003 это год 2003 или 20/03?
13 июл 16, 23:50    [19406858]     Ответить | Цитировать Сообщить модератору
 Re: Неполная дата рождения. Как хранить?  [new]
o-o
Guest
Вернее, 1204. Это yyyy или mmdd?
а то вроде 20/03 превращается в 302.
Вообще даже 302 уже замечательно, когда ищут на месяц = 03.
Вроде ж сам ТС признался, что поиск по каждой компоненте даты может быть, так чего еще страдать? 3 поля и вперёд
13 июл 16, 23:59    [19406876]     Ответить | Цитировать Сообщить модератору
 Re: Неполная дата рождения. Как хранить?  [new]
982183
Member

Откуда: VL
Сообщений: 3374
X-Cite
Если структура неполная, то храните как INT
19980823
199710
1994

Если INT, то тогда лучше
19980823
19971000
19940000

Соответственно 20/03 (????/20/03)
будет
2003
14 июл 16, 02:31    [19407063]     Ответить | Цитировать Сообщить модератору
 Re: Неполная дата рождения. Как хранить?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8350
StarikNavy
LSV,

>>Неполная ДР это отсутствие ДР
не совсем. если девочка не стала указывать год, то все равно можно используя дд и мм, поздравить ее
так что некий признак "не указано" и "не полностью указано" можно прикручивать
(в простейшем случае null и какой нить 1900 год )


То, о чем Вы пишете - это не дата рождения, а месяц и день рождения.
Если у автора " есть неполные даты рождения: без дня, без месяца", то нельзя хранить такие значения строкой, необходимо три столбца - год, месяц и день. Дата - атомарное значение, в данном же случае в поле хранятся не атомарные, что приводит к конфликту с требованиями первой нормальной формы.
14 июл 16, 02:45    [19407074]     Ответить | Цитировать Сообщить модератору
 Re: Неполная дата рождения. Как хранить?  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2395
Владислав Колосов
то нельзя хранить такие значения строкой, необходимо три .

почему нельзя то?
если принимаем, что какой нить 1901 (или 3030) год - не год, а признак "не указания года", то можно.
и не надо лишние структуры городить.
не говорю что это лучшее решение, но как вариант - почему бы и нет?
14 июл 16, 10:49    [19407784]     Ответить | Цитировать Сообщить модератору
 Re: Неполная дата рождения. Как хранить?  [new]
o-o
Guest
StarikNavy
Владислав Колосов
то нельзя хранить такие значения строкой, необходимо три .

почему нельзя то?
если принимаем, что какой нить 1901 (или 3030) год - не год, а признак "не указания года", то можно.
и не надо лишние структуры городить.
не говорю что это лучшее решение, но как вариант - почему бы и нет?

First normal form
wiki
A relation is in first normal form if and only if the domain of each attribute
contains only atomic (indivisible) values,
and the value of each attribute contains only a single value from that domain

типа если хотим следовать теории и иметь таблицу в первой нормальной форме,
то атрибуты дожны быть *неделимыми*.
и если у большинства из нас дата это и есть неделимый атрибут,
то у ТС это не так, потому что у него поиск идет и по дню, и по месяцу, и по году.
причем каждый из атрибутов может отсутствовать.
так что "по всем правилам" ему положено сделать 3 столбца.
---------------------------
теперь надо у него спросить, а что в таблице-то 260 млн строк, как в соседней теме,
или там и миллиона нет?
на чем экономите уже второй день?
14 июл 16, 11:02    [19407860]     Ответить | Цитировать Сообщить модератору
 Re: Неполная дата рождения. Как хранить?  [new]
0-0
Guest
o-o
AlanDenton
Если число или месяц отсутствует - считать что человек родился на новый год 01/01. И все хранить как DATE в одном столбце. Разумный компромисс...

а как же тогда отличить, по-правде 01/01 родился или нет?
зададут потом точную дату для поиска, с 01/01, а получат еще и левых


Очень просто - добавить еще и битовое поле, в котором помечать "левых"
14 июл 16, 11:21    [19408007]     Ответить | Цитировать Сообщить модератору
 Re: Неполная дата рождения. Как хранить?  [new]
schi
Member

Откуда: Москва
Сообщений: 2601
0-0
Очень просто - добавить еще и битовое поле, в котором помечать "левых"


"Я нашел, как применить здесь
нестирающиеся шины из полиструктурного волокна с вырожденными аминными
связями и неполными кислородными группами. Но я не знаю пока, как
использовать регенерирующий реактор на субтепловых нейтронах. Миша, Мишок!
Как быть с реактором?"

Навеяло :)
14 июл 16, 11:33    [19408107]     Ответить | Цитировать Сообщить модератору
 Re: Неполная дата рождения. Как хранить?  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1814
982183
X-Cite
Если структура неполная, то храните как INT
19980823
199710
1994

Если INT, то тогда лучше
19980823
19971000
19940000

Соответственно 20/03 (????/20/03)
будет
2003

Не суть.. неполные даты хранят как INT, а с какой стороны нули это уже от задачи... Для выпуска авто например, важнее год, чем день...
14 июл 16, 23:40    [19411637]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить