Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Домены и пользовательские типы данных





В реляционной модели доменом называется множество допустимых значений столбца таблицы: у каждого столбца – свой домен. Некоторые СУБД поддерживают специальный объект базы данных «домен» (domain), который представляют собой именованный пользователем стандартный тип данных (из таблицы 1), с которым могут быть связаны декларативные ограничения целостности. Домены применяются, когда несколько столбцов, обычно из разных таблиц, хранят логически одинаковые данные.

Например, в таблице Сотрудники есть столбец АдресСотрудника, и в таблице Клиенты столбец АдресКлиента. Адреса предполагается хранить в виде текстовой строки VARCHAR длиной 60 байт. Для адресов можно объявить домен с именем (например, TAddress), и связать его с типом VARCHAR(60). Далее при создании таблиц вместо типа столбцов АдресСотрудника и АдресКлиента указывается имя домена TAddress. В дальнейшем, если потребуется изменить формат хранения адресов (например, увеличить длину строки, или поменять тип с VARCHAR на NVARCHAR), достаточно изменить настройки домена, и СУБД автоматически поменяет формат всех столбцов этого домена. Если создавать базу данных вообще без доменов, то администратору базы данных придется ручками менять типы столбцов в нескольких таблицах – долго и больше вероятность ошибиться.

MySQL 3.x домены не поддерживает.

 


Типы данных Таблица 1

Название типа Описание Поддержка СУБД
SQL Server MySQL Fire- bird
         
Целые числа      
TINYINT 1-байтовое число (со знаком или без него: –128..+127 или 0..255) + +
SMALLINT* 2-байтовое число (со знаком или без него) + + +
MEDIUMINT 3-байтовое число (со знаком или без него) +
INT*, INTEGER* 4-байтовое число (со знаком или без него) + + +
BIGINT 8-байтовое число (со знаком или без него) + +
Числа с плавающей запятой      
FLOAT* Вещественное число одинарной точности в диапазоне: 1,17E-38..3.4E+38 (MySQL), 2,22E-308..1,79E+308 (SQL Server) + + +
DOUBLE* DOUBLE PRECISION* Вещественное число двойной точности в диапазоне 2,22E–308..1,79E+308 (MySQL) + +
REAL* Вещественное число в диапазоне 2,22E-308..1,79E+308 (MySQL) 1,17E-38..3.4E+38 (SQL Server) + +
Числа с фиксированной запятой      
DECIMAL(d,p)* DEC(d,p)* NUMERIC(d,p)* Используется для точного представления вещественных десятичных чисел со знаком: d (dimension) – размерность, общее количество знаков; p (precision) – точность, количество знаков после запятой. Например, числа: три знака перед запятой, два знака после (±000,00..999,99) определяются как DECIMAL(5,2) + + +
Денежный тип      
MONEY Совместим с типом DECIMAL; в MySQL это эквивалент DECIMAL(12,2), в SQL Server аналог DECIMAL(15,4) + +
SMALLMONEY В SQL Server аналог DECIMAL(10,4) +
           

Таблица 1 (продолжение)

         
Строки символов      
CHAR(n)* CHARACTER(n)* Строка фиксированной длины, занимает в памяти n байт независимо от реальной длины содержащейся в ней строки. + + +
NCHAR(n)* NATIONAL CHAR(n)* Строка фиксированной длины в кодировке Unicode, занимает 2 n байт. + + +
VARCHAR(n)* Строка переменной длины. Занимает в памяти количество байт, равное реальной длине строки +1. При объявлении n – максимальная длина строки. + + +
NVARCHAR(n)* NATIONAL VARCHAR(n) NCHAR VARYING(n)* Строка переменной длины в кодировке Unicode. Используется для хранения строк с национальными символами алфавита. +   +     +
Биты и битовые массивы      
BIT (MySQL) BOOL (SQL Server) Булевский тип (0 или 1), занимает в памяти один бит. + +
BIT(n)* BINARY(n) Массив из n бит, каждый элемент принимает значение 0 или 1   + +
BIT VARYING(n)* VARBINARY(n) Массив бит переменной длины (максимальная длина n) +   +
Дата и время      
DATE* Дата от '1000-01-01' до '9999-12-31' + +
DATETIME Дата и время от '1000-01-01 00:00:00' до '9999-12-31 23:59:59' + +
SMALLDATETIME Дата и время от '1900-01-01 00:00' до '2079-06-06 23:59' +
TIMESTAMP* Дата и время, диапазоны зависят от СУБД + + +
TIME* Время с точностью до секунд от 00:00:00 до '838:59:59' + +
YEAR Год +
INTERVAL Временной интервал
             

Таблица 1 (продолжение)

         
Перечисления и множества      
ENUM Множество до 65535 элементов +
SET Множество до 255 элементов +
Неструктурированные объекты      
TINYBLOB, TINYTEXT Блок памяти размером до 255 байт +
BLOB, TEXT Блок памяти размером до 64Kб + +
TEXT(n) Блок памяти размером до 2Гб +
NTEXT(n) Блок памяти размером до 2Гб (вмещает до 1 Гб символов кодировки Unicode) +
MEDIUMBLOB, MEDIUMTEXT Блок памяти размером до 16 Mб +
LONGBLOB, LONGTEXT Блок памяти размером до 4 Гб +
IMAGE Массив бит длиной до 231–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']
[,[@owner=]' имя_пользователя_создавшего_тип ']

Вызов этой процедуры для объявления пользовательского типа "табельный номер сотрудника" в 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: 574; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию