
- •22 Методические указания к лабораторной работе №1 "Проектирование базы данных"
- •Проектирование базы данных введение
- •Порядок выполнения работы
- •Наибольшее распространение для семантического моделирования получила модель "сущность-связь" (Entity-Relationship) 2, или er-модель.
- •Рассмотрим базовые понятия er-модели.
- •Различают следующие виды атрибутов:
- •Реляционная модель данных
- •Ограничения целостности
- •6. Ссылочная целостность
- •Стандартные типы данных
- •Типы данных
- •Создание баз данных и таблиц на sql Для операций над базами данных и таблицами в стандарте sql имеются следующие операторы:
- •Объявление текущей базы данных
- •Домены и пользовательские типы данных
- •Правила преобразования er-модели в реляционную
- •Проектирование доменов
- •Создание автоинкрементных столбцов
- •Нормализация
- •Первая нормальная форма (first normal form) – 1нф
- •Библиографический список
Домены и пользовательские типы данных
Множество допустимых значений столбца реляционной таблицы называется доменом(domain). На практике домены используют, если несколько столбцов хранят одинаковые по смыслу данные, например, адреса (работников, предприятий, учащихся). Тогда хорошим стилем программирования является создание объекта базы данных "домен".
Создание домена заключается в выборе стандартного типа данных для представления значений столбца и ограничений целостности, общих для всех столбцов данного домена. Использование доменов позволяет изменять настройки столбцов, принадлежащих одному домену, за один приём, нежели последовательно менять определения каждого столбца командой ALTERTABLE. Например, если нужно расширить диапазон допустимых значений табельных номеров сотрудников, то достаточно изменить определения домена (ограничение целостностиCHECK), и это ограничение автоматически охватит все таблицы, содержащие табельные номера.
MySQLдомены не поддерживает.
В InterBaseдомен создается командой
CREATE DOMAIN Имя_домена AS ТИП –- ТИП-название стандартного типа данных
[DEFAULT {значение_по_умолчанию | NULL | USER}]
[NOT NULL]
[CHECK (условие_проверки)]
Имя домена можно использовать вместо типа данных при создании таблиц. Например,
CREATE DOMAIN DTabNum -- домен "табельный номер сотрудника"
AS INTEGER –- базируется на типе INTEGER
DEFAULT 1000 NOT NULL -- по умолчанию равен 1000, обязательный
CHECK(Value BETWEEN 1000 AND 9999) -- 4-значные числа от 1000 до 9999
-- использование домена
CREATE TABLE Workers(
TabNum DTabNum PRIMARY KEY -- табельный номер
Name VARCHAR(60) NOT NULL, -- ФИО сотрудника
...)
Бывает, что InterBaseнекорректно выполняет запросы из-за того, что столбцы, принадлежащие одному базовому типу, не объявлены принадлежащими одному домену.
Домен можно изменить командой ALTERDOMAINи удалить командойDROPDOMAIN.
В SQL Serverвместо термина "домен" используется понятие "пользовательский тип данных" (user-defined data type). Его создание проходит в два этапа: 1) объявление типа данных; 2) связывание с этим типом ограничений целостности.
Объявляется пользовательский тип данных с помощью вызова системной хранимой процедуры sp_addtype. Ее формат:
sp_addtype
[@typename =] Имя_пользовательского_типа_данных,
[@phystype =] стандартный_тип_данных
[,[@nulltype =] 'NULL' или 'NOT NULL' ] [,[@owner =] 'имя_пользователя_создавшего_тип' ]
С символа @ начинаются имена формальных параметров процедуры. Объявление типа "табельный номер сотрудника" будет в SQLServerвыглядеть так:
EXEC sp_addtype @typename=DTabNum, @phystype=INTEGER, @nulltype ='NOT NULL'
Оператор EXECвызывает хранимую процедуру. Имена параметров, начинающиеся с @, можно в оператореEXECне писать, но фактические значения параметров должны перечисляться в том же порядке, что и в заголовке процедуры:
EXEC sp_addtype DTabNum, INTEGER, 'NOT NULL'
Второй этап – связывание с пользовательским типом ограничений целостности. Значение по умолчанию задается специальным объектом базы данных "умолчание" (Default):
CREATE DEFAULT Имя_Умолчания AS значение_по_умолчанию
Умолчание связывается с пользовательским типом хранимой процедурой sp_bindefault
sp_bindefault
[@defname = ]'Имя_Умолчания',
[@objname = ] 'Имя_пользовательского_типа_данных'
[,[ @futureonly = ] 'futureonly' или 'NULL' по умолчанию ]
Для нашего примера присвоение табельным номерам значения по умолчанию 1000 выполняется SQL-скриптом:
CREATE DEFAULT TabNumDef AS 1000
GO -– оператор GO заставляет сервер выполнить предыдущую команду
-- вместо оператора GO можно писать ; (точку с запятой)
EXEC sp_bindefault 'TabNumDef', 'DTabNum'
GO
Ограничения целостности (CHECK-подобные) задаются объектом базы данных "правило" (rule). Правило создается оператором
CREATE RULE Имя_правила AS условие_проверки
-- в условии_проверки значение проверяемой переменной обозначается
-- любым именем, которое начинает с символа @.
Правило связывается с пользовательским типом данных хранимой процедурой sp_bindrule
sp_bindrule
[@defname = ]'Имя_Правила',
[@objname = ] 'Имя_пользовательского_типа_данных'
[,[ @futureonly = ] 'futureonly' или 'NULL' по умолчанию ]
Для нашего примера наложение ограничений на значения табельных номеров от 1000 до 9999 будет выглядеть так:
CREATE RULE TabNumRange AS @Value BETWEEN 1000 AND 9999
GO
EXEC sp_bindrule 'TabNumRange', 'DTabNum'
GO
Пользовательский тип данных удаляется хранимой процедурой sp_droptype:
sp_droptype Имя_пользовательского_типа_данных
Для переименования пользовательского типа данных служит процедура sp_rename. Кстати, эта процедура может переименовывать и другие объекты СУБД: базы данных, таблицы, столбцы, представления, хранимые процедуры и пр.