Что такое домен в sql
Образовательный блог — всё для учебы
1) Понятие домена
Домен или область допустимых значений столбца определяет пользовательский тип данных и позволяет дополнительно указать:
a) Значение по умолчанию.
b) Ограничения на значения.
c) Правила проверки ограничений.
d) Время проверки ограничений.
e) Правила сравнения (для символьного типа).
2) Создание домена
CREATE DOMAIN [AS] [( )] [DEFAULT ] [[ ] ]
[[NOT] DEFERRABLE]
[INITIALLY IMMEDIATE|DEFERRED]]
[COLLATE ]
CREATE DOMAIN DComm AS Decimal CHECK (Comm > 0)
3) Изменение домена
ALTER DOMAIN
DROP CONSTRAINT >
ALTER DOMAIN DSNUM ADD Range_chech CHEK (SNum BETWEEN 1000 AND 10000)
4) Удаление домена
DROP DOMAIN CASCADE|RESTRICT
5) Ключевые слова
a) [NOT] DEFERRABLE
Устанавливает [не] отсроченную проверку ограничения на значения столбца.
По умолчанию действует NOT.
Его обычно указывают для столбцов с PK, UNIQUE, многих ограничений для столбца.
Отсроченную проверку чаще указывают для утверждений.
b) INITIALLY IMMEDIATE|DEFERRED
Используется вместе с DEFERRABLE и устанавливает режим проверки ограничения столбца.
IMMEDIATE (немедленный) – после каждого оператора обновления.
DEFERRED (отсроченный) – по окончанию транзакции, т.е. после оператора COMMIT.
c) CASCADE и RESTRICT
CASCADE – при удалении домена тип данных домена, значение по умолчанию и ограничения столбца передаются в виде соответствующих типов данных, значений по умолчанию и ограничений на соответствующие столбцы таблиц.
RESTRICT – запрещает удалять используемый домен.
d) CHECK
Ограничение CHECK на значение столбца может включать проверки для других столбцов, если они включены в подзапрос в разделе WHERE.
Следовательно, может стать ложным, если не выполняется условие не проверяемого, а кого-то другого столбца и будет ошибка.
6) Особенности значения по умолчанию
При определении начального значения домена могут быть указаны:
— Константа: число, строка, дата.
— Переменная: Current_user, Current_connection, …
— Предварительно определенный литерал даты.
— NULL.
Что такое домен в sql
CREATE DOMAIN — создать домен
Синтаксис
Описание
CREATE DOMAIN создаёт новый домен. Домен по сути представляет собой тип данных с дополнительными условиями (ограничивающими допустимый набор значений). Владельцем домена становится пользователь его создавший.
Домены полезны для абстрагирования и вынесения общих характеристик разных полей в единое место для упрощения сопровождения. Например, в нескольких таблицах может присутствовать столбец, содержащий электронный адрес, и для всех требуются одинаковые ограничения CHECK, проверяющие синтаксис адреса. В этом случае лучше определить домен, а не задавать для каждой таблицы отдельные ограничения.
Чтобы создать домен, необходимо иметь право USAGE для нижележащего типа.
Параметры
Имя создаваемого домена (возможно, дополненное схемой). тип_данных
Нижележащий тип данных домена (может включать определение массива с этим типом). правило_сортировки
Необязательное указание правила сортировки для домена. Если это указание отсутствует, используется правило сортировки по умолчанию нижележащего типа данных. Указать COLLATE можно, только если нижележащий тип данных является сортируемым. DEFAULT выражение
Предложение DEFAULT определяет значение по умолчанию для столбцов, типом данных которых является этот домен. Значением может быть любое выражение без переменных (подзапросы также не допускаются). Тип данных этого выражения должен соответствовать типу данных домена. Если значение по умолчанию не указано, им будет значение NULL.
Значение по умолчанию будет использоваться в любой операции добавления строк, в которой не задано значение для этого столбца. Если значение по умолчанию установлено для конкретного столбца, оно будет переопределять значение по умолчанию, связанное с доменом. В свою очередь, значение по умолчанию для домена переопределяет любое значение по умолчанию, связанное с нижележащим типом данных. CONSTRAINT имя_ограничения
Имя ограничения. Если не указано явно, имя будет сгенерировано системой. NOT NULL
Значения этого домена будут отличны от NULL (но см. замечания ниже). NULL
Этот домен может содержать значение NULL. Это свойство домена по умолчанию.
Это предложение предназначено только для совместимости с нестандартными базами данных SQL. Использовать его в новых приложениях не рекомендуется. CHECK ( выражение )
Замечания
Пустой скалярный вложенный SELECT выдаст значение NULL, типом которого будет считаться домен, так что к этому значению не будут применены дополнительные проверки ограничений и строка будет успешно добавлена.
Избежать таких проблем очень сложно, так как в SQL вообще предполагается, что значение NULL является подходящим для любого типа данных. Таким образом, лучше всего разрабатывать ограничения так, чтобы значения NULL допускались, а затем при необходимости применять ограничения NOT NULL к столбцам доменного типа, а не непосредственно к самому этому типу.
В PostgreSQL предполагается, что условия ограничений CHECK являются постоянными, то есть при одинаковых входных значениях они всегда выдают одинаковый результат. Именно этим предположением оправдывается то, что ограничения CHECK проверяются только при первом преобразовании значения в тип домена, а не при каждом обращении к нему. (По сути таким же образом обрабатываются ограничения CHECK для таблиц, как описано в Подразделе 5.3.1.)
Примеры
В этом примере создаётся тип данных us_postal_code (почтовый индекс США), который затем используется в определении таблицы. Для проверки значения на соответствие формату почтовых индексов США применяется проверка с регулярными выражениями:
Совместимость
Команда CREATE DOMAIN соответствует стандарту SQL.
Что такое домен в sql
CREATE DOMAIN — создать домен
Синтаксис
Описание
CREATE DOMAIN создаёт новый домен. Домен по сути представляет собой тип данных с дополнительными условиями (ограничивающими допустимый набор значений). Владельцем домена становится пользователь его создавший.
Домены полезны для абстрагирования и вынесения общих характеристик разных полей в единое место для упрощения сопровождения. Например, в нескольких таблицах может присутствовать столбец, содержащий электронный адрес, и для всех требуются одинаковые ограничения CHECK, проверяющие синтаксис адреса. В этом случае лучше определить домен, а не задавать для каждой таблицы отдельные ограничения.
Чтобы создать домен, необходимо иметь право USAGE для нижележащего типа.
Параметры
Имя создаваемого домена (возможно, дополненное схемой). тип_данных
Нижележащий тип данных домена (может включать определение массива с этим типом). правило_сортировки
Необязательное указание правила сортировки для домена. Если это указание отсутствует, используется правило сортировки по умолчанию нижележащего типа данных. Указать COLLATE можно, только если нижележащий тип данных является сортируемым. DEFAULT выражение
Предложение DEFAULT определяет значение по умолчанию для столбцов, типом данных которых является этот домен. Значением может быть любое выражение без переменных (подзапросы также не допускаются). Тип данных этого выражения должен соответствовать типу данных домена. Если значение по умолчанию не указано, им будет значение NULL.
Значение по умолчанию будет использоваться в любой операции добавления строк, в которой не задано значение для этого столбца. Если значение по умолчанию установлено для конкретного столбца, оно будет переопределять значение по умолчанию, связанное с доменом. В свою очередь, значение по умолчанию для домена переопределяет любое значение по умолчанию, связанное с нижележащим типом данных. CONSTRAINT имя_ограничения
Имя ограничения. Если не указано явно, имя будет сгенерировано системой. NOT NULL
Значения этого домена будут отличны от NULL (но см. замечания ниже). NULL
Этот домен может содержать значение NULL. Это свойство домена по умолчанию.
Это предложение предназначено только для совместимости с нестандартными базами данных SQL. Использовать его в новых приложениях не рекомендуется. CHECK ( выражение )
Замечания
Пустой скалярный вложенный SELECT выдаст значение NULL, типом которого будет считаться домен, так что к этому значению не будут применены дополнительные проверки ограничений и строка будет успешно добавлена.
Избежать таких проблем очень сложно, так как в SQL вообще предполагается, что значение NULL является подходящим для любого типа данных. Таким образом, лучше всего разрабатывать ограничения так, чтобы значения NULL допускались, а затем при необходимости применять ограничения NOT NULL к столбцам доменного типа, а не непосредственно к самому этому типу.
Примеры
В этом примере создаётся тип данных us_postal_code (почтовый индекс США), который затем используется в определении таблицы. Для проверки значения на соответствие формату почтовых индексов США применяется проверка с регулярными выражениями:
Совместимость
Команда CREATE DOMAIN соответствует стандарту SQL.
Базы данных. Вводный курс
15.3. Средства определения, изменения определения и отмены определения доменов
Как неоднократно упоминалось выше, при определении столбцов таблицы требуется явно указывать тип данных каждого столбца. Для этого можно использовать описанные выше средства спецификации типа. Но в SQL поддерживается и другой механизм— механизм доменов. Домен является долговременно хранимым, именованным объектом схемы базы данных. Домены можно создавать (определять), изменять (изменять определения) и ликвидировать (отменять определение). Имена доменов можно использовать при определении столбцов таблиц. Можно считать, что в SQL определение домена представляет собой вынесенное за пределы определения индивидуальной таблицы «родовое» определение столбца, которое можно использовать для определения различных реальных столбцов реальных базовых таблиц. В языке SQL обеспечиваются средства определения доменов, изменения и отмены существующих определений.
15.3.1. Определение домена
Раздел default_definition имеет вид
Здесь literal представляет любое допустимое литеральное значение определяющего типа домена, NULL обозначает неопределенное значение, а niladic_function может задаваться в одной из следующих форм:
Элемент списка domain_constraint_definition_list имеет вид
Необязательный раздел CONSTRAINT constraint_name позволяет определить имя нового ограничения целостности. Если явное указание имени отсутствует, ограничению назначается имя, автоматически генерируемое системой. Что касается вида условного выражения, служащего собственно ограничением целостности, то в стандарте запрещается лишь прямое или косвенное использование в нем домена, в определение которого входит данное условное выражение. 93) Однако наиболее естественным (и наиболее распространенным) видом ограничения домена является следующий:
Такое ограничение запрещает появление в любом столбце, определенном на данном домене, любого значения определяющего типа, не входящего в список допустимых значений.
15.3.2. Примеры определений доменов
Домен SALARY определим следующим образом:
Размер заработной платы является значением точного числового типа NUMERIC из десяти десятичных цифр, две из которых составляют дробную часть. По умолчанию размер заработной платы составляет 10000 руб. Установлен диапазон допустимого размера зарплаты от 10000 руб. до 20000000 руб. Неопределенное значение зарплаты не допускается (на уровне определения домена).
15.3.3. Изменение определения домена
Как видно из синтаксических правил, при изменении определения домена можно выполнить действие по изменению раздела значения по умолчанию либо изменить ограничение домена. Для первого варианта действует следующий синтаксис:
В случае установки нового значения по умолчанию ( SET ) это значение автоматически применяется ко всем столбцам, определенным на данном домене. Более точно, это значение становится новым значением по умолчанию. Операция не оказывает влияния на состояние существующих строк таблиц базы данных. В случае отмены раздела значения по умолчанию в определении домена ( DROP ) существовашее значение домена по умолчанию становится значением по умолчанию каждого столбца, который определен на данном домене и для которого не специфицировано собственное значение по умолчанию.
Действие по изменению ограничения домена определяется следующим синтаксисом:
15.3.4. Примеры изменения определения домена
Для отмены значения по умолчанию в домене SALARY следует воспользоваться оператором
Если к определению домена SALARY требуется добавить ограничение (например, запретить значение зарплаты, равное 15000 руб.), необходимо выполнить оператор
15.3.5. Отмена определения домена
Чтобы отменить ранее созданное определение домена, нужно воспользоваться оператором DROP DOMAIN в следующем синтаксисе:
15.4. Неявные и явные преобразования типа или домена
В языке SQL обеспечивается возможность использования в различных операциях не только значений тех типов, для которых предопределена операция, но и значений типов, неявным или явным образом приводимых к требуемому типу.
15.4.1. Неявные преобразования типов в SQL
15.4.2. Явные преобразования типов или доменов и оператор CAST
Оператор преобразует значение заданного скалярного выражения к указанному типу или к базовому типу указанного домена. Результатом применения оператора CAST к неопределенному значению является неопределенное значение. Для значений, отличных от неопределенных, в стандарте приводятся подробные правила выполнения преобразований, которые интуитивно понятны.
Поясним действие оператора CAST в наиболее важных случаях. Примем следующие обозначения типов данных:
EN – точные числовые типы ( Exact Numeric )
AN – приблизительные числовые типы ( Approximate Numeric )
C – типы символьных строк ( Character )
FC – типы символьных строк постоянной длины ( Fixed-length Character )
VC – типы символьных строк переменной длины ( Variable-length Character )
B – типы битовых строк ( Bit String )
FB – типы битовых строк постоянной длины ( Fixed-length Bit String )
VB – типы битовых строк переменной длины ( Variable-length Bit String )
TS – типы Timestamp
YM – типы Interval Year-Month
DT – типы Interval Day-Time
Пусть TD – это тип данных, к которому производится преобразование, а SD – тип данных операнда. Тогда допустимы следующие комбинации («да» означает безусловную допустимость, «нет» – безусловную недопустимость и «?» – допустимость с оговорками).
SD | TD | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
EN | AN | VC | FC | VB | FB | D | T | TS | YM | DT | ||
EN | Да | Да | Да | Да | Нет | Нет | Нет | Нет | Нет | ? | ? | |
AN | Да | Да | Да | Да | Нет | Нет | Нет | Нет | Нет | Нет | Нет | |
C | Да | Да | ? | ? | Да | Да | Да | Да | Да | Да | Да | |
B | Нет | Нет | Да | Да | Да | Да | Нет | Нет | Нет | Нет | Нет | |
D | Нет | Нет | Да | Да | Нет | Нет | Да | Нет | Да | Нет | Нет | |
T | Нет | Нет | Да | Да | Нет | Нет | Нет | Да | Да | Нет | Нет | |
TS | Нет | Нет | Да | Да | Нет | Нет | Да | Да | Да | Нет | Нет | |
YM | ? | Нет | Да | Да | Нет | Нет | Нет | Нет | Нет | Да | Нет | |
DT | ? | Нет | Да | Да | Нет | Нет | Нет | Нет | Нет | Нет | Да |
15.5. Заключение
Нельзя с уверенностью сказать, что система типов языка SQL настолько полна, что может удовлетворить любые потребности, но можно отметить, что в этой системе типов отсутствует единый логический подход и имеется избыточность. Возможно, это станет понятнее после обсуждения в конце курса средств объектно-реляционных расширений языка SQL.
Как должно быть ясно из этой лекции, механизм доменов в SQL играет вспомогательную роль. Это не совсем те (может быть, и совсем не те) домены, поддержка которых предполагается реляционной моделью. Фактически определение домена обеспечивает спецификацию ограничений и значений по умолчанию, выносимых за пределы определения столбца. В комитете по стандартизации SQL обсуждается идея полного отказа от поддержки механизма доменов и замены его на соответствующим образом адаптированный механизм индивидуальных типов (см. последнюю лекцию курса).
88 Начиная с этого места мы будем приводить более или менее точный синтаксис конструкций языка SQL (не злоупотребляя излишествами). Без этого текст был бы менее точным и более объемным. Прописными буквами показываются «терминалы» – ключевые слова языка SQL.
90 Это значение будет использоваться в качестве значения по умолчанию для любого столбца, определенного на данном домене, для которого не определено собственное значение по умолчанию (см. следующую лекцию).
93 Более подробно мы обсудим допустимые в SQL виды условных выражений в следующих лекциях.
Создание домена
В этом разделе описывается, как создать домен в службах Data Quality Services (DQS). Значения в домене являются семантическим представлением данных в поле. Дополнительные сведения о доменах см. в разделе Управление доменом.
Существуют следующие два способа создания нового домена. Первый — на этапе сопоставления действий по обнаружению знаний, в процессе анализа образца данных для добавления набора знаний в новую или существующую базу знаний. Второй — в ходе действий по управлению доменами, когда вместо изменения существующего домена вы создаете новый.
Перед началом
Предварительные требования
Чтобы создать домен, необходимо создать и открыть базу знаний.
безопасность
Permissions
Для создания домена необходимо иметь в базе данных DQS_MAIN роль dqs_administrator или dqs_kb_editor.
Создание домена в ходе операции обнаружения знаний
Запустите клиент DQS. Дополнительные сведения об этой процедуре см. в разделеЗапустите приложение Data Quality Client.
На главной странице Клиент Data Quality нажмите кнопку Открыть базу знаний и выберите базу знаний или нажмите кнопку Создать базу знаний и введите свойства новой базы знаний.
На странице Сопоставление укажите соединение с источником данных. Дополнительные сведения см. в разделе Perform Knowledge Discovery.
Создание домена в действии «Управление доменами»
На главной странице Клиент Data Quality нажмите кнопку Открыть базу знаний и выберите базу знаний или нажмите кнопку Создать базу знаний и введите свойства новой базы знаний.
На странице Управление доменами щелкните значок Создать домен над списком доменов.
Задание свойств домена
В диалоговом окне Создание домена введите имя, уникальное в базе знаний, и описание длиной не более 256 символов.
Дополнительные сведения о свойствах домена см. в разделе Set Domain Properties.
Из списка Тип данных выберите тип данных для значений в домене. Типом данных может быть String (по умолчанию), Date, Integerили Decimal.
Из раскрывающегося списка Формат вывода выберите формат, который будет применяться при выводе значений данных домена. Форматирование зависит от типа данных, выбранного в шаге 2, как показано в следующем списке.
Для строкового значения вы можете указать, что строка выводится в верхнем регистре, нижнем регистре или прописными буквами.
Для значения даты вы можете указать формат дня, месяца и года.
Для целочисленного значения вы можете указать тип маски формата, которую следует применить.
Для десятичного значения вы можете указать точность и тип маски формата, которую следует применить.
Если тип данных — String, из раскрывающегося списка Язык выберите язык варианта проверки орфографии, который необходимо применить в случае, если проверка орфографии включена.
Нажмите кнопку ОК.
Дальнейшие действия. После создания правила домена
Создав домен, вы можете выполнить другие задачи управления доменами для этого домена, провести обнаружение знаний для добавления знаний в домен или добавить в домен политику сопоставления. Дополнительные сведения см. в разделах Обнаружение набора знаний, Управление доменом и Создание политики сопоставления.