Тип данных MySQL с большим количеством опций

Я создаю таблицу MySQL для хранения пользовательской информации. Если одна информация будет годом выпуска пользователя с 1970 по 2014 год, какой тип данных будет лучшим для этого? Я хочу, чтобы эти значения давали пользователям возможность выбрать год выпуска при регистрации.
Я собирался использовать enum, как это. grdYr ENUM('70','71','72', ... '14'), но MyAQL maual рекомендует не использовать числа в качестве значений перечисления. Было бы просто добавить такой символ grdYr ENUM('s70','s71','s72', ... 's14') решать проблему?

Кроме того, если я добавлю больше значений позже, например, 15, 16 и т. Д. По мере того, как студенты будут выпускаться каждый год, будет ли изменение таблицы каждый раз единственным способом добиться этого? С моим знанием это кажется единственным способом, но изменение таблицы звучит как то, что я не должен делать.

Помогите, пожалуйста!

1

Решение

Во-первых, вы должны использовать несколько таблиц и внешних ключей вместо ENUM, Вы также должны хранить любой год в четырехзначном формате вместо двухзначных. Потому что … что если вам нужно будет добавить 2070 год?

Во-вторых, используйте DATETIME или же DATE тип столбцов для дат. Или используйте VARCHAR, INT, TINYINT для чисел, подобных Вашему (я все еще предпочел бы типы даты). Не создавайте таблицу (или даже один столбец BY ENUM), содержащий только годы выпуска пользователя. Подтвердите это своим HTML / PHP кодом. Делать <select> с конкретным вариантом и подтвердить его.

HTML:

<select>
<option value="1970">1970</option>
<option value="1971">1971</option>
<option value="1972">1972</option>
...
<option value="2013">2013</option>
<option value="2014">2014</option>
</select>

PHP:

$arrayWithYears = array();

foreach($i = 1970; $i <= 2014; $i++) {
$arrayWithYears[] = $i;
}

if(in_array($iSubmittedValue, $arrayWithYears)) {
// TRUE
} else {
// FALSE
}
1

Другие решения

Не используйте ENUM, Если вы храните числа, используйте более подходящий тип, такой как INT, или по крайней мере VARCHAR если вы абсолютно хотите сохранить ведущие нули. Если вы храните даты, используйте один из типов дат, например DATE, Это делает схему базы данных более понятной, поскольку тип столбца дает подсказку относительно ее намерения.

Я также рекомендовал бы хранить полный четырехзначный год вместо двухзначных, поскольку двузначные годы неоднозначны. Помните: рабочий код имеет тенденцию продолжать использоваться дольше, чем предполагалось изначально. Если вы хотите показывать посетителям 2-значные года, сделайте это, но сохраните 4-значные годы в своей базе данных. Дополнительное пространство не будет проблемой, если ваш стол массивный. Это тривиальная проблема пользовательского интерфейса.

Рекомендация против чисел в ENUMЭто потому, что это относительно бессмысленно. Добавление «s» в начале каждого числа не делает его менее бессмысленным.

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

0

По вопросам рекламы [email protected]