Как производительность отличается между этими методами?
Это сильно зависит от типа приложения, использующего базу данных.
Первый метод можно считать ненормализованным подходом, но это может быть хорошей идеей, если данные используются для приложения OLAP. Например, если вам часто нужно собирать массивные наборы данных для определенного дня месяца, тогда эта денормализация может быть оправдана ... в противном случае это будет просто пустой тратой памяти и излишне сложным.
То же самое с третьим вариантом ... это просто ненормализованное представление даты; это может быть оправдано при очень ограниченном использовании, но обычно это будет плохая идея.
- EDIT -
Под Денормализованным я имею в виду следующее ...
Допустим, у вас есть запись со следующими полями ...
Date Day Month Year
3/28/2011 28 3 2011
И скажем, вам нужно изменить день с 28 на 29. В этом случае вам нужно обновить два поля: поле «Дата» и «День» ... вместо одного. Если вы всегда помните, чтобы обновить оба, то это не большая проблема. Но если вы этого не сделаете, со временем вы получите что-то вроде следующего.
Date Day Month Year
3/28/2011 29 2 2009
Так какова фактическая дата? Храня информацию в одном месте, вы исключаете возможность несоответствия в данных.
- КОНЕЦ РЕДАКТИРОВАНИЯ -
Какой из них является лучшим на ваш взгляд и почему?
Если ваша база данных не используется для OLAP ... я бы посчитал второй вариант лучшим.
Каким будет запрос на выборки, вставки и обновления
построен для этих разных
предлагаемые решения?
Для предпочтительного второго варианта это тривиально.
- ВТОРОЕ РЕДАКТИРОВАНИЕ -
Вы можете передать дату в виде строки, и MySQL проанализирует ее в соответствии с. Формат даты: «ГГГГ-ММ-ДД ЧЧ: мм: СС», но вам не нужно указывать время, если вы не хотите его хранить.
INSERT INTO tablename (date) VALUES ('2011-3-28')
Или, если вы просто хотите добавить текущую дату ...
INSERT INTO tablename (date) VALUES (CURDATE() )
- КОНЕЦ РЕДАКТИРОВАНИЯ -