Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Домены и пользовательские типы данных
В реляционной модели доменом называется множество допустимых значений столбца таблицы: у каждого столбца – свой домен. Некоторые СУБД поддерживают специальный объект базы данных «домен» (domain), который представляют собой именованный пользователем стандартный тип данных (из таблицы 1), с которым могут быть связаны декларативные ограничения целостности. Домены применяются, когда несколько столбцов, обычно из разных таблиц, хранят логически одинаковые данные. Например, в таблице Сотрудники есть столбец АдресСотрудника, и в таблице Клиенты столбец АдресКлиента. Адреса предполагается хранить в виде текстовой строки VARCHAR длиной 60 байт. Для адресов можно объявить домен с именем (например, TAddress), и связать его с типом VARCHAR(60). Далее при создании таблиц вместо типа столбцов АдресСотрудника и АдресКлиента указывается имя домена TAddress. В дальнейшем, если потребуется изменить формат хранения адресов (например, увеличить длину строки, или поменять тип с VARCHAR на NVARCHAR), достаточно изменить настройки домена, и СУБД автоматически поменяет формат всех столбцов этого домена. Если создавать базу данных вообще без доменов, то администратору базы данных придется ручками менять типы столбцов в нескольких таблицах – долго и больше вероятность ошибиться. MySQL 3.x домены не поддерживает.
Типы данных Таблица 1
Таблица 1 (продолжение)
Таблица 1 (продолжение)
* – типы данных, предусмотренные стандартом SQL92.
В InterBase/Firebird домен создается командой CREATE DOMAIN Имя_домена AS ТИП [DEFAULT { значение_по_умолчанию | NULL | USER}] [NOT NULL] [CHECK (условие_проверки)] Здесь ТИП – имя стандартного типа данных из таблицы 1. Имя домена указывается вместо стандартного типа данных при объявлении столбца. Пример -- создаем домен "табельный номер сотрудника" CREATE DOMAIN DTabNum AS INTEGER DEFAULT 1000 NOT NULL CHECK (Value BETWEEN 1000 AND 9999) -- использование домена при создании таблиц CREATE TABLE Workers(-- таблица "Работники" TabNum DTabNum PRIMARY KEY -- табельный номер Name VARCHAR (60) NOT NULL, -- ФИО сотрудника ...) CREATE TABLE Leave(-- таблица "Отпуск" TabNum DTabNum FOREIGN KEY REFERENCES Workers(TabNum), StartDate DATE NOT NULL, -- начало отпуска FinDate DATE);
Бывает, что Firebird некорректно выполняет запросы из-за того, что столбцы, принадлежащие одному базовому типу, не объявлены принадлежащими одному домену. Домен можно изменить командой ALTER DOMAIN и удалить командой DROP DOMAIN.
В MS SQL Server вместо термина "домен" используется понятие "пользовательский тип данных" (user-defined data type). Его создание проходит в два этапа: 1) объявление типа данных; 2) связывание с этим типом ограничений целостности. Объявляется пользовательский тип данных системной хранимой процедурой sp_addtype. Вот ее формат (имена параметров начинаются с символа @): Sp_addtype [@typename=] Имя_пользовательского_типа_данных, [@phystype=] стандартный_тип_данных [,[@nulltype=] 'NULL' или 'NOT NULL'] Вызов этой процедуры для объявления пользовательского типа "табельный номер сотрудника" в SQL Server будет выглядеть так: EXEC sp_addtype @typename=DTabNum,@phystype=INTEGER, @nulltype ='NOT NULL' SQL-оператор EXEC вызывает хранимую процедуру. Имена параметров, начинающиеся с @, можно не писать, тогда фактические значения параметров следует перечислять в том же порядке, что и в заголовке процедуры. Предыдущий вызов можно переписать так: EXEC sp_addtype DTabNum, INTEGER, 'NOT NULL' Второй этап – связывание с пользовательским типом данных ограничений целостности. Значение по умолчанию задается объектом базы данных "умолчание" (Default). “Умолчание” создается SQL-оператором CREATE DEFAULT Имя_Умолчания AS значение_по_умолчанию “Умолчание” связывается с пользовательским типом хранимой процедурой sp_bindefault. Ее формат: Sp_bindefault [@defname=]' Имя_Умолчания ', [@objname=]' Имя_пользовательского_типа_данных ' [,[@futureonly=]' futureonly 'или'NULL'по умолчанию] CHECK-подобные ограничения целостности задаются объектом базы данных "правило" (rule). Правило создается оператором CREATE RULE Имя_правила AS условие_проверки /* в условии_проверки значение проверяемой переменной обозначается любым именем, которое начинается с символа @ */ Правило связывается с пользовательским типом данных хранимой процедурой sp_bindrule Sp_bindrule [@defname=]' Имя_Правила ', [@objname=]' Имя_пользовательского_типа_данных ' [,[@futureonly=]' futureonly 'или'NULL'по умолчанию]
Полный SQL-скрипт для создания домена "табельный номер сотрудника" в MS SQL Server будет выглядеть так: EXEC sp_addtype DTabNum, INTEGER, 'NOT NULL'; CREATE DEFAULT TabNumDef AS 1000; EXEC sp_bindefault 'TabNumDef', 'DTabNum'; CREATE RULE TabNumRange AS @Value BETWEEN 1000 AND 9999; EXEC sp_bindrule 'TabNumRange', 'DTabNum';
Пользовательский тип данных удаляется хранимой процедурой sp_droptype: sp_droptype Имя_пользовательского_типа_данных Для переименования пользовательского типа данных служит процедура sp_rename. Кстати, эта процедура может переименовывать и другие объекты СУБД SQL Server: базы данных, таблицы, столбцы, представления, хранимые процедуры и пр. Date: 2016-07-25; view: 754; Нарушение авторских прав |