Во-первых, помните, что база данных предназначена для хранения фактов и предназначена для защиты от неверных данных. Таким образом, причина, по которой вы не хотите, чтобы пользователь вводил 250 символов для имени, состоит в том, что пользователь будет помещать в него все виды данных, которые не являются именами. Они напишут все свое имя, размер нижнего белья, роман о том, что они сделали прошлым летом, и так далее. Таким образом, вы хотите стремиться к тому, чтобы данные были максимально точными. ошибка - предполагать, что приложение является единственным средством защиты от неверных данных. Вы хотите, чтобы пользователи сообщили вам, что у них возникла проблема с добавлением Войны в мире в данный столбец.
Таким образом, самый важный вопрос: «Какое наиболее подходящее значение для хранимых данных?» В идеале вы должны использовать int
и проверочное ограничение, чтобы гарантировать, что значения имеют соответствующий диапазон (например, больше нуля, меньше миллиарда и т. д.). К сожалению, это один из самых больших недостатков MySQL: он не соблюдает ограничения проверки. Это просто означает, что вы должны реализовать эти проверки целостности в триггерах, что, по общему признанию, является более громоздким.
Будет ли разница между int
(4 байта) существенно отличаться от tinyint
(1 байт)? Очевидно, это зависит от объема данных. Если у вас будет не более 10 строк, ответ, очевидно, нет. Если у вас будет 10 миллиардов строк, ответ, очевидно, «Да». Впрочем, ИМО, это преждевременная оптимизация. Намного лучше сначала сосредоточиться на обеспечении правильности.
Для текста вам следует спросить, должны ли ваши данные поддерживать значения на китайском, японском или не ANSI (т. Е. Использовать nvarchar или varchar)? Представляет ли это значение код реального мира, такой как код валюты или код банка, который имеет конкретную спецификацию?