Member 11856456 Ответов: 1

Должен ли я разделить дату на столбцы "день", "месяц" и "год"?


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

Я ценю любой вклад, еще раз спасибо.

Что я уже пробовал:

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

1 Ответов

Рейтинг:
4

OriginalGriff

Используйте один столбец DATE, DATETIME или DATETIME2, если вам нужен год, то это легко сделать: Функция datepart[^] даст его вам, когда вы в нем нуждаетесь.

Но отдельные столбцы делает его намного, намного сложнее, так что "все даты после этого", или "заказ на <дата> В" запросы.

Всегда сохраняйте значения в соответствующем типе данных, иначе это приведет к боли позже. Например, один столбец не может содержать недопустимую дату, но очень легко ошибиться и поменять местами номера дней и месяцев с отдельными столбцами, например. Это приводит к огромным проблемам позже, когда вы пытаетесь использовать его и найти плохие даты - и к тому времени это серьезная работа, чтобы исправить, поскольку вы понятия не имеете, сколько из них затронуты или какое-либо представление об исходных данных!


Member 11856456

Что происходит, когда у вас есть неизвестная дата или если в дате отсутствуют значения. Например, 10/--/2017, здесь мы знаем месяц и год события, но не день. То же самое можно сказать и об остальных полях. Может быть, кто-то умер давным-давно, и все, что вы можете прочитать на надгробии, - это часть даты. смогу ли я по-прежнему использовать столбец даты для этих случаев?

OriginalGriff

Проблема в том, что у вас есть почти такая же проблема с отдельными полями, но вы должны проверить ее на целую нагрузку больше. Таким образом, для надгробий и так далее у вас есть значения по умолчанию и отдельный столбец "Примечания", который объясняет, что оценивается и почему.
Без этого у вас просто есть "догадки" и нет очевидной причины, независимо от способа хранения.

Но попробуйте сделать "дату между 10 июля 1921 года и 31 января 1962 года" с системой "отдельных столбцов", которая содержит значения "не знаю"! Это какой-то мерзкий код...

Member 11856456

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

OriginalGriff

Всегда пожалуйста!