Типы данных и полей: общее и в разных СУБД
Характеристики полей БД и типы данных
Одна СУБД отличается от другой в первую очередь набором поддерживаемых типов данных и их свойствами. Но понимание общих подходов позволяет достаточно легко решить значительную часть возникающих нестыковок.
Первым делом введем тип данных, для которого не существует поля, но он чрезвычайно важен, так как означает отсутствие данных. Он обозначается как NULL и его необходимо присваивать отдельно. Сделать это можно только для тех полей, для которых указано в структуре таблицы соответствующее разрешение. В этом случае, например, задав его значением по умолчанию, мы можем получить 3 варианта логического поля: null, true, false. При этом данные будут пустыми (null) при создании записи и актуализируются только после ввода конкретной информации.
Поле — минимальная единица структурированной информации в БД, характеризующая один показатель для одного явления. Каждое поле имеет тип и размер. Все поля для данного явления составляют запись. Поле — структурная единица записи. Обратите внимание, что, уже с точки зрения всей БД, поле является совокупностью какого-либо значения во всех записях.
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
Характеристики полей БД (на основе xBase)
Тип поля | Обозначение | Ограничения (размер) | Содержание (виды информации) |
Символьный | (Character) | 254/255 символов | Любые символы кодовой таблицы |
Числовой | (Numeric) | 20 разрядов | Числовые значения. Размер поля состоит из суммы числа разрядов до десятичной точки, после нее +1 знак на точку |
(Float) | 20 разрядов | Числа с плавающей точкой | |
(Integer) | (4 байта) | Целые числа, размер поля фиксирован! | |
Дата | (Date) | 8 байтов | Дата |
Время | (Time) | 6 байтов | Время, часто объединено с датой (DateTime) |
Логический | (Logical) | (1 байт) | Логические данные — истина (.T. или .Y.) или ложь (.F. или .N.), то есть 1 или 0 |
Примечаний | (Memo) | нет* | Любые данные, в том числе в двоичном виде |
Общего назначения | (General) | нет* | Как правило графические или мультимедийные (звук, видео) данные |
* В отличие от всех полей хранится в отдельном файле, не имеет фиксированного размера и ограничивается только свободным дисковым пространством, либо размером файла операционной системы.
Характеристики основных полей MySQL
Тип поля | Обозначение | Ограничения (размер) | Содержание (виды информации) |
Символьный | (CHAR) | 255 символов* | Любые символы кодовой таблицы |
(TEXT) | 65535 символов | Любые символы кодовой таблицы | |
(VARCHAR(Size)) | 65532 символа | Любые символы кодовой таблицы | |
(MEDIUMTEXT) | 16777215 символов | Любые символы кодовой таблицы | |
(LONGTEXT) | 4294967295 символов | Любые символы кодовой таблицы | |
Числовой | (FLOAT(M,D)) | 4 байта | Числовые значения. Размер поля состоит из суммы числа разрядов до и после десятичной точки. Из них выделяются десятичные разряды |
(DOUBLE(M,D)) | 8 байт | То же, что и FLOAT, но со значительным расширением диапазона значений | |
(DECIMAL(M,D)) | число знаков | Тоже что и DOUBLE, но хранится в виде строки | |
(TINYINT(Size)) | 1 байт | Целое число от -128 до 127 или 0-255 без знака | |
(SMALLINT(Size)) | 2 байта | Целое число от -32768 до 32767 | |
(INT(Size)) | 4 байта | Целое число от -2147483648 до 2 147 483 647 | |
Дата | (DATE) | 3 байта | Дата |
Время | (DATETIME) | 8 байт | Время с датой от 1000 до 9999 года |
Время | (TIMESTAMP) | 4 байта | Время с датой (момент создания записи) |
Время | (TIME) | 3 байта | Время суток с точностью до секунд |
Двоичная информация | (LONGBLOB) | 0–4 294 967 295 байт | LONG Binary Large OBjects. Самый большой тип поля для хранения бинарных данных |
* Размер для символьных (строковых) полей зависит от используемой кодировки.
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
Неверный выбор типа и размера полей
Поскольку размер поля в «правильной» реляционной БД имеет фиксированное значение, он должен быть достаточным (иначе данные могут не поместиться) но не избыточным (лишнее место на диске и в памяти). Если подумать, то данный параметр должен быть, например, для символьного типа точно равен самой длинной строке генеральной совокупности.
Тип поля должен соответствовать вводимым данным с учетом возможного развития. В том числе числу записей для идентификаторов.
Ошибка типа — достаточно грубая и примитивная. Если недостаточный размер поля еще может быть оправдан просто отсутствием достаточного (исчерпывающего) объема информации, то ошибка в выборе типа — следствие слишком поверхностных рассуждений.
Еще один, совсем неочевидный пример. Так как размер поля всегда измеряется в целых байтах, логический тип, теоретически требующий всего одного бита, следует рассматривать как нерациональный. Да, он будет всегда обрабатываться быстрее, так как может иметь всего от двух до трех вариантов значения (T, F, null). Но даже банальный интерфейсный флажок, чаще всего используемый для управления полем, может иметь до четырех состояний.
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
....
Прошу обратить особо пристальное внимание на неопределенную информацию, традиционно вносимую для xBase в Memo-поле. Новые концепции не предусматривают такого типа и придется пользоваться текстовыми полями, дополнительно обдумывая их структуру. Важно создать среду, когда не будет вывода пользователю, что он превысил объем сохраняемых данных.
См. также Ключевые поля.