Вот как типы в словаре данных соотносятся с типами в физической модели данных:
В отличие от словаря данных, в физической модели стоит учитывать, сколько места занимает тот или иной тип в памяти. Диапазон возможных значений напрямую связан с размером выделяемой памяти. Чем длиннее строка или число, которые вы хотите записать, тем больше места в памяти нужно зарезервировать. С другой стороны, если вы зарезервируете больше места, чем надо, ресурсы будут потрачены впустую.
Обратите внимание: размер памяти и длина поля — это не одно и то же. Длина измеряется в символах, а размерность — в байтах.
Рассмотрим базовые типы данных и место, необходимое для их хранения.
Числовые типы
Числовые типы отличаются от всех других типов тем, что позволяют совершать математические операции с данными, включая агрегирование. К тому же числа, записанные в числовые данные, занимают меньше места, чем записанные в другие типы.
Вспомним основные числовые типы в PostgreSQL:
integer — это, как правило, небольшие числа фиксированного диапазона, например рост, вес, возраст.
bigint — это числа, которые не помещаются в int. Обычно это идентификаторы. Например, порядковый номер заказа в онлайн-магазине может выйти за пределы 9 символов.
Наконец, real — это чаще всего цены, процентные показатели и другие подобные числа.
Символьные типы
Символьный тип — это основной тип для хранения текстовых данных. Это могут быть, например, Ф. И. О., электронная почта, адрес. С такими данными нельзя производить математические операции, зато можно менять регистр, обрезать, работать с отдельными символами и так далее.
Вот какие типы относятся к символьным:
Если вы используете тип char, строка будет занимать ровно столько места, сколько вы указали, а неиспользованные символы будут заполнены пробелами. Например, в char(5) имя Ira превратится в Ira . В varchar(5) такого не произойдёт — имя Ira сохранится как 3 символа и будет занимать место ровно для 3 символов. Если же лимит n=5 будет превышен, в обоих случаях строка обрежется.
Тип varchar, как правило, используют для хранения строк, включая одиночные слова, а тип char(1) — для хранения единичных символов.
Логический тип
К логическому типу относятся данные, у которых есть только два состояния: истинное и ложное. Это данные, к которым можно задать вопрос на «да» и «нет». Например, является ли билет возвратным, подписал ли клиент согласие на обработку данных, состоялась ли сделка.
Теоретически можно было бы хранить логические данные в символьном типе, записывая в значение true или false. Но символьный тип данных занимает больше места, чем тип boolean, поэтому boolean в этом случае предпочтительнее.
Типы для работы с датой и временем
Данные, которые содержат дату или время, относятся к типам date и timestamp. Кроме того, с датами можно производить математические операции. Например, вычитая одну дату из другой, можно найти количество дней между ними.
При выборе типа даты стоит ответить на вопрос, есть ли необходимость хранить время, и если да, то нужно ли указывать часовой пояс. Даты с временем и часовым поясом занимают больше всего места — это тип time.
PostgreSQL поддерживает много типов данных, включая геометрические фигуры, перечисления и даже пользовательские типы. Подробнее о каждом типе можно прочитать
здесь.