Теперь, когда вы уже почувствовали, какие новые возможности открываются перед вами, можно уделить несколько минут тому, чтобы разобраться в процессе выбора данных, которые лучше всего подходят для решения ваших задач.
Как упоминалось в начале этой главы, разбиение данных по типам играет важную роль в сохранении целостности данных и повышении эффективности и скорости обработки данных. Следовательно, к процессу выбора типов данных во время разработки базы данных нельзя подходить поверхностно.
В этом разделе приводятся некоторые критерии, которые необходимо принимать во внимание при выборе типов данных для столбцов таблиц MySQL.
Допустимые значения
Диапазон и типы значений, которые допустимы для размещения в поле, является наиболее важным фактором, в соответствии с которым выбирается тип данных для определенного поля. Например, при определении типа данных для столбца, в котором будут храниться складские цены, вы вряд ли прибегнете к строковому или календарному типу. Это скорее всего должен быть один из числовых типов - FLOAT или DECIMAL, в зависимости от точности. Аналогично, для хранения дат дней рождения лучше всего подойдет тип DATE, а не какой-нибудь тип VARCHAR с необходимостью последующей обработки значений для дней, месяцев и годов.
Эффективность хранения
Не менее важно, особенно тогда, когда речь идет о цифровых типах, учитывать диапазон возможных величин для полей. Например, при создании столбца для хранения возраста всех пользователей, работающих с системой, очевидно, что значения для этого поля всегда будут лежать в диапазоне чисел 0 - 255. В таком случае неэффективно для этого поля пользоваться типом INT или BIGINT, т.к. для такого диапазона чисел вполне достаточно типа UNSIGNED TINYINT, который занимает меньше места - всего 1 байт, вместо 4 или 8 байтов.
Аналогичная логика применима и для строковых значений. Зная, например, что определенное поле будет содержать, строку, содержащую два символа (скажем, коды штатов США), имеет смысл задействовать тип CHAR с индексом 2, а не TEXT или BLOB, для которых потребуется значительно больше места, чем требуется для хранения необходимой информации, не добавляя при этом никаких дополнительных возможностей. Аналогично, если априори известно, что допустимые значения принадлежат к определенному набору значений, это будет подсказкой для выбора типа ENUM или SET.
Требования к форматированию и отображению
Другим важнейшим фактором, влияющим на выбор типа поля, являются требования к форматированию и отображению данных, предъявляемые к данным этого поля на прикладном уровне. Например, если строка должна всегда иметь определенную длину, уместно будет воспользоваться типом CHAR, который автоматически добавляет пробелы везде, где это необходимо. (Для цифровых данных, эквивалентом этого является модификатор ZEROFILL, который для заполнения использует нули.) Аналогично, если вам необходимы числа, которые будут всегда отображаться с четырьмя цифрами после запятой, можно воспользоваться типом DECIMAL, который позволяет задавать точность сохраняемых им значений.
Форматирование также играет существенную роль при работе с календарными датами и временем. В зависимости от того, какие задачи будет выполнять разрабатываемая вами система - отображать данные в том виде, в котором они были сохранены, или обрабатываться дальше, - можно выбрать обычный тип DATE, который использует запись даты в понятном для человека формате "YYYY-MM-DD" или в формате "YYYYMMDDHHMMSS", который удобен для программной обработки.