Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лаба 1 Создание схемы базы данных

.doc
Скачиваний:
24
Добавлен:
15.06.2014
Размер:
163.84 Кб
Скачать

Лабораторная работа №1: «Создание схемы базы данных»

Теоретические сведения

Схема базы данных – это коллекция именованных объектов в базе данных. Схема позволяет логически классифицировать объекты базы данных, например, таблицы, виды, пользователи, триггеры, функции и пакеты. Сама схема является также объектом базы данных. При создании базы данных, например, в DB2, все пользователи имеют права IMPLICIT_SCHEMA. Это дает возможность создавать любые объекты базы данных в рамках данной схемы. Если данная схема запрещена для пользователей группы PUBLIC, то она все равно может быть создана при помощи соответствующего оператора CREATE SCHEMA (см. ниже) пользователем, который наделен правами создания этой схемы [3, 4, 7].

С помощью оператора определения схемы можно за одно обращение к СУБД создать все необходимые объекты, связанные с указанным идентификатором авторизации. Этот оператор имеет следующий синтаксис:

<schema definition> ::=

CREATE SCHEMA <schema name clause>

[ <schema element>... ]

<schema name clause> ::=

<schema name>

|AUTHORIZATION <schema authorization identifier>

|<schema name> AUTHORIZATION <schema authorization identifier>

<schema element> ::=

<table definition>

|<view definition>

|<grant statement>

При выполнении оператора определения схемы создаются объекты, определяемые элементами схемы (базовые таблицы, представления, ограничения, домены, утверждения целостности, наборы символов, привилегии и т.д.), и их соответствующие описатели. Операторы, используемые для определения элементов схемы, можно использовать независимо, вне оператора определения схемы. Например, пользователь с правами администратора создает схему с именем lab1 для пользователя db2admin:

CREATE SCHEMA lab1 AUTHORIZATION db2admin

Созданную ранее схему можно уничтожить. Для уничтожения схемы используется оператор DROP SCHEMA, определяемый следующим синтаксисом:

<drop schema statement> ::=

DROP SCHEMA <schema name> <drop behavior>

<drop behavior> ::= CASCADE | RESTRICT

Имя схемы должно идентифицировать существующую схему. Если специфицировано RESTRICT, то к моменту выполнения оператора DROP SCHEMA схема не должна содержать какие бы то ни было объекты (постоянные базовые таблицы, глобальные временные таблицы, создаваемые локальные временные таблицы, представления и т.д.). Эти объекты должны быть ранее уничтожены соответствующими индивидуальными операторами (см. ниже). Если специфицировано CASCADE, то такие объекты уничтожаются при выполнении оператора DROP SCHEMA путем неявного вызова соответствующих операторов. При выполнении оператора DROP SCHEMA указанная схема и ее описание уничтожаются.

Оператор создания таблицы определяется следующими синтаксическими правилами:

<table definition> ::=

CREATE TABLE <table name> <table element list>

<table element list> ::=

<(> <table element> [ { <,> <table element> }... ] <)>

<table element> ::=

<column definition>

|<table constraint definition>

Определение таблицы должно содержать, по крайней мере, одно определение столбца. При выполнении оператора определения таблицы создается набор описателей привилегий, определяющих привилегии INSERT, SELECT, UPDATE, DELETE и REFERENCES на этой таблице и INSERT, SELECT, UPDATE и REFERENCES для каждого определения столбца. Все привилегии являются передаваемыми и относящимися к идентификатору авторизации из определения схемы или модуля в зависимости от того, где выполняется оператор определения таблицы.

Определение столбца имеет следующий синтаксис:

<column definition> ::=

<column name> { <data type> <domain name> }

[ <default clause> ]

[ <column constraint definition>... ]

[ <collate clause> ]

<column constraint definition> ::=

[ <constraint name definition> ]

<column constraint>

<constraint name definition> ::= CONSTRAINT <constraint name>

<column constraint> ::=

NOT NULL

|<unique specification>

|<references specification>

|<check constraint definition>

Определение столбца может входить в оператор определения таблицы (CREATE TABLE), в оператор изменения схемы таблицы (ALTER TABLE). Пусть T обозначает соответствующую таблицу. Номер столбца соответствует позиции определения этого столбца в операторе CREATE TABLE, т.е. i-тый столбец таблицы описывается i-тым определением столбца в определении таблицы. Имя и тип данных или домен столбца специфицируется именем столбца и типом данных или именем домена соответственно.

Пользователь A может создавать таблицы в рамках схемы C. Данная команда создаст таблицу student в схеме lab1 с единственным столбцом stud_id типа INT:

CREATE TABLE lab1.student (stud_id INT)

При определении столбца можно указать значение, которое должно присваиваться этому столбцу по умолчанию, если при занесении новых строк в соответствующую таблицу значение данного столбца не задается явно. Раздел умолчаний определяется следующим синтаксисом:

<default clause> ::= DEFAULT <default option>

<default option> ::=

<literal>

|<datetime value function>

|USER

|CURRENT_USER

|SESSION_USER

|SYSTEM_USER NULL

Общие синтаксические правила определения табличных ограничений выглядят следующим образом:

<table constraint definition> ::=

[ <constraint name definition> ]

<table constraint> [ <constraint attributes> ]

<table constraint> ::=

<unique constraint definition>

|<referential constraint definition>

|<check constraint definition>

Ограничение уникальности определяется следующими синтаксическими правилами:

<unique constraint definition> ::=

<unique specification> <(> <unique column list> <)>

<unique specification> ::=

UNIQUE | PRIMARY KEY

<unique column list> ::=

<column name list>

Ссылочное ограничение определяется следующими синтаксическими правилами:

<referential constraint definition> ::=

FOREIGN KEY <(> <referencing columns><)> <references specification>

<references specification> ::=

REFERENCES <referenced table and columns>

[ <referential triggered action> ]

<referencing columns> ::= <reference column list>

<referenced table and columns> ::=

<table name>

[ <(> <reference column list> <)> ]

<reference column list> ::= <column name list>

<referential triggered action> ::=

<update rule> [ <delete rule> ]

|<delete rule> [ <update rule> ]

<update rule> ::= ON UPDATE <referential action>

<delete rule> ::= ON DELETE <referential action>

<referential action> ::=

CASCADE

|SET NULL

|SET DEFAULT

|NO ACTION

Ссылающейся таблицей мы будем называть таблицу, фигурирующую в определении таблицы или изменении схемы таблицы (операторе ALTER TABLE). Таблицей, на которую указывает ссылка, будем называть таблицу, имя которой указывается в разделе referenced table and columns. Ссылающимися столбцами будем называть столбцы, перечисленные в списке столбцов-ссылок (reference column list). Если в разделе referenced table and columns специфицирован список столбцов, то набор имен столбцов из этого списка должен совпадать с набором столбцов уникальности, содержащемся в ограничении уникальности таблицы, на которую указывает ссылка. Если раздел referenced table and columns не содержит списка столбцов, то для таблицы, на которую указывает ссылка, должно быть определено ограничение уникальности с ключевым словом PRIMARY KEY.

Проверочное ограничение целостности определяется следующим синтаксическим правилом:

<check constraint definition> ::=

CHECK <(> <search condition> <)>

Условие поиска не должно содержать спецификации агрегатной функции, не содержащейся в подзапросе.

Оператор изменения схемы таблицы (ALTER TABLE) предназначен для изменений в начальном определении таблицы. Оператор имеет следующий синтаксис:

<alter table statement> ::=

ALTER TABLE <table name> <alter table action>

<alter table action> ::=

<add column definition>

|<alter column definition>

|<drop column definition>

|<add table constraint definition>

|<drop table constraint definition>

<add column definition> ::=

ADD [ COLUMN ] <column definition>

Спецификация определения столбца в операторе ALTER TABLE имеет то же действие, что спецификация определения столбца в определении таблицы. В частности, степень таблицы увеличивается на единицу, и порядковый номер добавляемого столбца устанавливается равным новой степени таблицы.

Определение удаления столбца позволяет ликвидировать указанный столбец таблицы. Конструкция имеет следующий синтаксис:

<drop column definition> ::=

DROP [ COLUMN ] <column name> <drop behavior>

<drop behavior> ::= CASCADE | RESTRICT

Если в определении удаления столбца указано RESTRICT, то на удаляемый столбец не должно быть ссылок в выражении запроса любого существующего представления и в условии поиска любого существующего ограничения, кроме табличных ограничений, ссылающихся только на этот столбец и входящих в описание данной таблицы. Если в определении удаления столбца указано CASCADE, то любой зависимый объект уничтожается при выполнении неявного оператора REVOKE (см. ниже).

Определение добавления табличного ограничения имеет следующий синтаксис:

<add table constraint definition> ::=

ADD <table constraint definition>

Определение уничтожения табличного ограничения имеет следующий синтаксис:

<drop table constraint definition> ::=

DROP CONSTRAINT <constraint name> <drop behavior>

Представляемая таблица, или просто представление создается с помощью оператора CREATE VIEW:

<view definition> ::=

CREATE VIEW <table name> [ <(> <view column list> <)> ]

AS <query expression>

[ WITH [ <levels clause> ] CHECK OPTION ]

<levels clause> ::=

CASCADED | LOCAL

<view column list> ::= <column name list>

Число имен столбцов в списке столбцов представления должно совпадать со степенью таблицы, специфицированной выражением запроса. Если в определении представления содержится раздел WITH CHECK OPTION, то представление должно быть обновляемым. Если специфицировано WITH CHECK OPTION без задания раздела уровней (levels clause), то по умолчанию полагается указание класса CASCADED. В соответствии с правилами обновляемости представления, для каждой строки обновляемого представления существует только одна строка базовой таблицы, на которой в конечном счете основывается это представление. Занесение новой строки, удаление или модификация существующей строки приводит к выполнению соответствующей операции над строками этой базовой таблицы. Под операцией обновления понимаются операции INSERT и UPDATE.

Для каждого из упомянутых в этой теме операторов создания элементов схемы базы данных имеются обратные операторы уничтожения этих элементов.

Созданная ранее таблица может быть уничтожена следующим оператором:

<drop table statement> ::=

DROP TABLE <table name> <drop behavior>

Пусть уничтожается таблица с именем T. T должна быть базовой таблицей. Если специфицировано RESTRICT, то ни в каком существующем представлении и ни в каком условии поиска существующего ограничения не должны содержаться ссылки на T. Пусть A обозначает текущий идентификатор авторизации. Тогда при выполнении оператора уничтожения таблицы неявно выполняется следующий оператор: REVOKE ALL PRIVILEGES ON T FROM A CASCADE, что при наличии спецификации CASCADE в операторе уничтожения таблицы приводит к уничтожению всех объектов, в определении которых использовалась ссылка на T. Таблица T и ее дескриптор уничтожаются.

Созданное ранее представление может быть уничтожено с помощью следующего оператора:

<drop view statement> ::=

DROP VIEW <table name> <drop behavior>

Пусть V - имя уничтожаемого представления. V должно быть именем представляемой таблицы. Если специфицировано RESTRICT, то ни в одном существующем представлении или условии поиска существующего ограничения не должна содержаться ссылка на V. Пусть A обозначает текущий идентификатор авторизации. При выполнении оператора уничтожения представления неявно выполняется следующий оператор: REVOKE ALL PRIVILEGES ON V FROM A CASCADE, что при наличии спецификации CASCADE в операторе уничтожения представления приводит к уничтожению всех объектов, в определении которых использовалась ссылка на V.

Рассмотрим пример базы данных слушателей тренингов (рис.1). База содержит семь таблиц: “PERSON” содержит данные о студентах, изучающих некоторый курс; “TRAINING” содержит данные об изучаемом курсе; “SKILL” содержит данные о приобретаемых в процессе тренинга профессиональных навыках; “PERSON2SKILL” содержит связи между студентами и профессиональными навыками, которые они приобрели; “PERSON2TRAINING” содержит связи между студентом и изучаемым курсом; “UNIVERSITY” содержит список университетов; “SEX” содержит идентификаторы пола.

Рис.1 UML-диаграмма базы данных “Слушатели тренинга”.

Для создания схемы базы данных “Слушатели тренингов” необходимо создать следующий запрос:

create table university (

id int NOT NULL default 0,

name varchar(64) NOT NULL default '',

primary key (id)

);

create table person (

id int NOT NULL default 0,

univer_id int,

login varchar(14) NOT NULL default '',

password varchar(20) NOT NULL default '',

name varchar(64),

phone varchar(32),

birthday date,

sex int NOT NULL default 0,

is_admin int NOT NULL default 0,

primary key (id)

);

alter table person

add constraint p_u foreign key (univer_id)

references university (id);

create table skill (

id int NOT NULL default 0,

name varchar(32) NOT NULL default '',

primary key (id)

);

create table training (

id int NOT NULL default 0,

skill_id int NOT NULL default 0,

name varchar(32) NOT NULL default '',

primary key (id)

);

alter table training

add constraint t_s foreign key (skill_id)

references skill (id);

create table person2training (

id int NOT NULL default 0,

person_id int NOT NULL default 0,

training_id int NOT NULL default 0,

primary key (id)

);

alter table person2training

add constraint p2t_p foreign key (person_id)

references person (id) on delete cascade,

add constraint p2t_t foreign key (training_id)

references training (id);

create table person2skill (

id int NOT NULL default 0,

person_id int NOT NULL default 0,

skill_id int NOT NULL default 0,

level int NOT NULL default 0,

primary key (id)

);

alter table person2skill

add constraint p2s_p foreign key (person_id)

references person (id) on delete cascade,

add constraint p2s_s foreign key (skill_id)

references skill (id);

Контрольные вопросы

  1. Какой идентификатор схемы базы данных в операторе CREATE SCHEMA используется по умолчанию?

  2. Что произойдет если в операторе DROP SCHEMA специфицировано Restrict, а к моменту выполнения этого оператора в нем еще содержаться объекты?

  3. Что означает ключевое слово CASCADE в операторе DROP SCHEMA?

  4. Может ли имя схемы входит в имя таблицы?

  5. Может ли определение таблицы не содержать ни одного определения столбца?

  6. Может ли пользователь, который выполнил оператор определения таблица передавать при помощи оператора GRANT привилегии другим пользователям, если да, то какие это привилегии?

  7. Каким образом задается порядок столбцов в таблице?

  8. Поясните понятия check-ограничение таблицы и check-ограничение столбца.

  9. Что означает ключевое слово PRIMARY KEY в ограничении уникальности таблицы?

  10. Дайте определения понятий ссылающаяся таблица и родительская таблица.

  11. Может ли check-ограничение содержать агрегатную функцию?

  12. В каком случае не удовлетворяется утверждение целостности в check-ограничении?

  13. Можно ли изменять схему таблицы?

  14. Можно ли добавить столбец из другой таблицы, уже содержащих значения, к новой таблице?

  15. Каким образом можно отменить значение столбца по умолчанию?

  16. Определите степень любой таблицы из примера.

  17. Может ли имя определяемого представления содержаться в какой-либо ссылке на таблицу, содержащейся в выражении запроса (другими словами, допускаются ли рекурсивные определения представлений)?

  18. Приведите пример случая, когда представление не является обновляемым.

  19. Поясните назначение домена.

Задание

Создать схему реляционной базы данных для заданной предметной области. Все объекты базы данных должны быть определены в операторе создания схемы. Для выполнения задания использовать рекомендуемые преподавателем СУБД. По завершении лабораторной работы необходимо сдать отчет, в котором должна содержаться диаграмма объектов базы данных с пояснениями и распечатка запроса.

Варианты индивидуальных заданий

  1. База данных студентов университета

  2. База данных преподавателей университета

  3. База данных подразделений университета

  4. База данных библиотеки

  5. База данных успеваемости студентов

  6. База данных материально-технического оборудования кафедры

  7. База данных студентов, проживающих в общежитии

  8. База данных материально-технического обеспечения общежития

  9. База данных расписания занятий

  10. База данных программного обеспечения

  11. База данных курсовых проектов

  12. База данных лабораторных работ по некоторой дисциплине

  13. База данных мероприятий (конференции, семинары, выставки)

  14. База данных абитуриентов

  15. База данных документооборота