Как я храню (и вид) неопределенные диапазоны даты?

У меня есть база данных, которая должна сохранить диапазоны года (такие как продолжительность жизни), которые в некоторых случаях не очень конкретны. Например, а также обычное '1960', мы имеем 'c. 1960' для "приблизительно в 1960", и 1960-е на в десятилетие 1960, а также 'без обозначения даты' ни для какой даты, которая отчетливо отличается от ПУСТОГО УКАЗАТЕЛЯ, который был бы до настоящего момента.

Каков был бы лучший способ сохранить их?

Я думал о возможном хранении года как строка и добавление' в течение многих десятилетий и 'c' для приблизительно, с 'без обозначения даты' ни для какой даты..., но это чувствует себя просто неправильным. Кроме того, при сортировке хронологически я должен отсортировать путем вставки объектов 1960-х прежде c. 1 960 объектов, которые в свою очередь являются до 1960 объектами.

Как я делаю это правильно?

Некоторые диапазоны даты в качестве примера:

1957
c. 1957
c. 1957 - 1965
c. 1957 - 1960-е
c. 1957 - существующий
c. 1957 - без обозначения даты

Спасибо за помощь!

12
задан Tricky 4 March 2010 в 11:32
поделиться

5 ответов

Вы можете вставить самую раннюю и самую позднюю дату, возможную для диапазона.

Например, точная дата -

Jan 1, 1960   Jan 1, 1960

, ок. 1960 -

Jan 1, 1960   Dec 31, 1960

, 1960-е -

Jan 1, 1960   Dec 31, 1969

и т.д.

Затем вы можете упорядочить по первой дате и датировке:

SELECT  *
FROM    mytable
ORDER BY
        start_date, DATEDIFF(end_date, start_date) DESC

Также вы можете хранить ожидаемое значение и отклонение вместо начальной и конечной дат.

9
ответ дан 2 December 2019 в 22:22
поделиться

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

  • Наиболее ранняя возможная дата
  • Наиболее ранняя определенная дата
  • Последняя определенная дата
  • Наиболее поздняя возможная дата

Ваши примеры могут быть представлены как

  • 1957,1957,1957 , 1957
  • 1955,1957,1957,1959
  • 1955,1959,1965,1965
  • 1955,1959,1960,1969
  • 1955,1959, NULL, NULL
  • 1955,1959,9999 , 9999

Я предполагаю, что 'c' означает +/- 2 года, декада идет от '0 до' 9, а 9999 - это значение флага для 'nd'

Какое-нибудь использование?

{{ 1}}
1
ответ дан 2 December 2019 в 22:22
поделиться

Я думаю, что ответ Квассного хорош, в качестве альтернативы вы можете сгенерировать измерение времени , а затем ссылаться на него аналогичным образом (хотя вашему измерению может не потребоваться столько строк)?

0
ответ дан 2 December 2019 в 22:22
поделиться

Вам нужно заранее определить, какой будет структура circa, ИЛИ допустить вариативность. Circa часто связана с классификацией артефактов (книги, фотографии, записи) и других объектов (неизвестные точные даты рождения/смерти), где может быть большой разброс. Следует помнить, что классификация артефактов часто происходит по мере получения дополнительной информации. Таким образом, то, что определил Макс, работает, но я бы также добавил окончательную дату классификации и, возможно, колонку с описанием и/или именем классификатора/существа, определяющего классификацию. Вы можете определить, нужны ли вам исторические записи о реклассификации и как с этим работать.

Еще одно замечание относительно вещей такого рода - какой календарь был на месте, определяя фактическую дату дня, например, дата 4 октября (юлианский) сменилась датой 15 октября (григорианский), которая была изменена в 1582 году, и аналогичное изменение в 1751 году, которое перевело Великобританию и ее тогдашние колонии на григорианский календарь. Таким образом, необходимо определить используемый календарь, который может быть переведен на современные календари.

Смысл этого в том, что вам также может понадобиться идентификатор используемого календаря, связанный с определением, и привести его.

Кроме того, некоторые события связаны с месяцами, обозначаемыми как "первый месяц, второй месяц и т.д.", что может сбить с толку, как, например, изменение квакеров, когда "первым месяцем" в 1751 году был март, а в 1752 году - январь - особенно важно, когда предметом изучения является генеалогия (как вы предполагаете), а событиями - рождение/смерть.

Для развлечения, добавьте сюда Цезаря и Календы (первый день марта) и его реформу високосного года/дня, где 24 февраля был високосным днем как "второй 6-й день, предшествующий Календам", так что в високосные годы было два 24 февраля (два 6-х дня).

Я указываю на это, потому что количество дней в високосном году может в некоторых случаях отличаться от ваших периодов.

Итак, используйте структуру, подобную той, которую предлагают Макс и/или Квасной, но, возможно, немного больше для разграничения.

Цитата для календарей и понимания: Что такое календарь

0
ответ дан 2 December 2019 в 22:22
поделиться

«Как мне хранить (и сортировать) неопределенные диапазоны дат?»

(A) Давайте проанализируем с уровнем тщательности выше среднего, что это означает диапазон дат. Это означает, что существует точная дата начала и точная дата окончания диапазона.

(B) Давайте проанализируем с уровнем внимательности выше среднего, что может означать «неопределенный» диапазон дат. Мне кажется, что это какой-то диапазон дат, в котором либо дата начала, либо дата окончания, либо и то и другое точно не известны, но в котором один (или оба) из них являются САМИ ] диапазон.

(C) Это известный факт, что обычное математическое понятие «упорядочение» (также известное как «общий порядок») бесполезно применимо к концепции «диапазонов» (как бы вы решили, что 1-3 больше или меньше 0-6?). IS теоретически возможно определить такой порядок, например, на основе «заказывайте сначала по датам начала, а в пределах равных дат начала - по датам окончания», но такой порядок никогда не бывает полезен.

(D) И если «дата начала» и / или «дата окончания» диапазона сами по себе «расплывчаты» (т.е. эти компоненты сами являются диапазонами), тогда очевидно, почему безумие пытаться и осмысленно упорядочивать такие диапазоны.

Итак, ответ на часть «(и сортировка)»: «Вы этого не сделаете, потому что вы не можете (значимым образом)».

0
ответ дан 2 December 2019 в 22:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: