Что такое домен в таблице
Домен в таблице — это множество допустимых значений, которые может принимать определённое поле. Проще говоря, он задаёт правила для данных: какие значения разрешены, в каком формате они должны быть представлены и какие ограничения необходимо соблюдать. Например, для поля «Возраст» доменом могут быть целые числа от 0 до 120, а для поля «Статус заказа» — только значения «новый», «оплачен», «отправлен» и «завершён».
Понятие домена особенно важно в реляционных базах данных, где таблицы состоят из столбцов, а каждый столбец описывает одно свойство объекта. Домен помогает сделать структуру таблицы понятной, предотвращает появление ошибочных записей и поддерживает целостность базы данных.
Определение домена в таблице
В теории реляционных баз данных домен — это набор атомарных значений, допустимых для атрибута или столбца. Атрибут определяет смысл данных, а домен определяет границы их допустимых вариантов. Например, столбец «Количество» может использовать домен положительных целых чисел, а столбец «Дата регистрации» — домен календарных дат.
У домена есть не только перечень возможных значений, но и общие правила их представления. Они могут включать тип данных, допустимый диапазон, максимальную длину строки, возможность использовать значение NULL и дополнительные проверки. Благодаря этому база данных хранит не просто набор произвольных символов, а данные, соответствующие установленным условиям.
В практической работе домен чаще всего связывают с конкретным столбцом таблицы. Если несколько столбцов подчиняются одинаковым правилам, для них можно использовать один и тот же логический домен. Например, поля «Индекс отправителя» и «Индекс получателя» могут принимать строки одинаковой длины и формата.
Чем домен отличается от типа данных
Тип данных отвечает на вопрос, как значение хранится и обрабатывается системой: это может быть число, строка, дата, логическое значение или другой стандартный тип. Домен является более широким понятием. Он включает тип данных, но дополнительно описывает смысл и ограничения значения.
Например, тип INTEGER обычно позволяет хранить большое количество целых чисел. Однако домен «Количество товаров» может разрешать только числа от 1 до 100 000. Домен «Оценка» на основе того же типа может ограничиваться диапазоном от 1 до 5. В обоих случаях используется целое число, но назначение и правила проверки различаются.
Разница важна для проектирования. Если ограничиться только типом данных, в поле могут появиться формально корректные, но бессмысленные значения: отрицательная цена, дата окончания раньше даты начала или произвольный текст вместо статуса. Домен уточняет требования к информации и делает модель данных точнее.
Примеры доменов для столбцов
Домен можно определить практически для любого поля таблицы. Его содержание зависит от предметной области и бизнес-правил.
- «Цена» — положительное число с двумя знаками после запятой; значение не может быть отрицательным.
- «Дата рождения» — календарная дата, не превышающая текущую дату.
- «Код страны» — строка из двух заглавных букв или заранее заданный список кодов.
- «Пол сотрудника» — одно из значений справочника, если такое ограничение действительно нужно предметной области.
- «Статус заявки» — фиксированный набор состояний, например «создана», «на проверке», «одобрена» и «отклонена».
- «Электронная почта» — строка установленной длины, соответствующая принятому формату адреса.
Иногда домен задаётся диапазоном, иногда перечислением, а иногда сложным условием. Для денежных величин важны точность и масштаб, для идентификаторов — уникальность и формат, для текстовых полей — длина и допустимые символы. Чем точнее определён домен, тем меньше неоднозначности возникает при вводе и обработке данных.
Как домен задаётся в базе данных
В SQL правила домена обычно реализуют с помощью типов столбцов, ограничений NOT NULL, CHECK, DEFAULT, внешних ключей и справочных таблиц. Например, столбцу цены можно назначить числовой тип, запретить отрицательные значения проверкой CHECK, а для статуса использовать ограниченный список или ссылку на таблицу статусов.
Логика может выглядеть так: поле «Количество» имеет целочисленный тип и условие, что значение больше нуля; поле «Статус» принимает только значения из утверждённого набора; поле «Дата создания» получает текущую дату по умолчанию. Конкретный синтаксис зависит от используемой СУБД, но принцип остаётся одинаковым: система должна отклонять записи, нарушающие домен.
Некоторые системы поддерживают отдельный объект домена, который можно создать один раз и применять к нескольким столбцам. Такой подход удобен, когда одинаковые ограничения используются во многих таблицах. Если отдельные домены не поддерживаются или не применяются в проекте, те же правила можно выразить комбинацией стандартных типов и ограничений.
Зачем нужны домены и как их проектировать
Главная задача домена — защита качества данных. Он не позволяет сохранять значения, которые противоречат смыслу поля, снижает количество ошибок в отчётах и упрощает работу приложений. Кроме того, формальное описание допустимых значений помогает разработчикам, аналитикам и администраторам одинаково понимать структуру базы.
При проектировании домена сначала определяют смысл столбца, затем выбирают подходящий тип данных и устанавливают необходимые ограничения. Следует учитывать минимальное и максимальное значение, точность, длину, возможность отсутствия значения, правила округления и перечень разрешённых вариантов. Не стоит добавлять ограничения без оснований: слишком жёсткий домен может затруднить развитие системы или не учитывать реальные сценарии.
Полезно отделять общие правила от уникальных. Например, домен номера телефона может задавать формат и длину, а уникальность конкретного номера должна быть отдельным ограничением столбца. Аналогично, домен даты определяет допустимый формат и диапазон, а связь даты с другими датами проверяется на уровне бизнес-логики или специальных ограничений.