Я создаю таблицу MySQL для хранения пользовательской информации. Если одна информация будет годом выпуска пользователя с 1970 по 2014 год, какой тип данных будет лучшим для этого? Я хочу, чтобы эти значения давали пользователям возможность выбрать год выпуска при регистрации.
Я собирался использовать enum, как это. grdYr ENUM('70','71','72', ... '14')
, но MyAQL maual рекомендует не использовать числа в качестве значений перечисления. Было бы просто добавить такой символ grdYr ENUM('s70','s71','s72', ... 's14')
решать проблему?
Кроме того, если я добавлю больше значений позже, например, 15, 16 и т. Д. По мере того, как студенты будут выпускаться каждый год, будет ли изменение таблицы каждый раз единственным способом добиться этого? С моим знанием это кажется единственным способом, но изменение таблицы звучит как то, что я не должен делать.
Помогите, пожалуйста!
Во-первых, вы должны использовать несколько таблиц и внешних ключей вместо 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
}
Не используйте ENUM
, Если вы храните числа, используйте более подходящий тип, такой как INT
, или по крайней мере VARCHAR
если вы абсолютно хотите сохранить ведущие нули. Если вы храните даты, используйте один из типов дат, например DATE
, Это делает схему базы данных более понятной, поскольку тип столбца дает подсказку относительно ее намерения.
Я также рекомендовал бы хранить полный четырехзначный год вместо двухзначных, поскольку двузначные годы неоднозначны. Помните: рабочий код имеет тенденцию продолжать использоваться дольше, чем предполагалось изначально. Если вы хотите показывать посетителям 2-значные года, сделайте это, но сохраните 4-значные годы в своей базе данных. Дополнительное пространство не будет проблемой, если ваш стол массивный. Это тривиальная проблема пользовательского интерфейса.
Рекомендация против чисел в ENUM
Это потому, что это относительно бессмысленно. Добавление «s» в начале каждого числа не делает его менее бессмысленным.
Разумным выбором для столбца является тот, который наиболее точно отражает данные, которые он будет хранить. Это почти никогда ENUM
,