Инфологическое моделирование

Вид материалаДокументы

Содержание


Таблица BOOKS Таблица READERS Таблица CATALOG (системный
Create table books с
Constrant ck_pages check (pages > = 5 and pages
Create table exemplar (
Primary key (idjxemplar, isbn) )
Средства определения схемы базы данных
Средства изменения описания таблиц и средства удаления таблиц
{set default
Alter table readers
Alter table exemplare
Средства изменения описания таблиц
[cascade | restrict]
Глава 8. Принципы поддержки целостности в реляционной модели данных
Drop table exemplar drop table relatioh_67 drop table catalog drop table readers drop table books
Представление (View)
Подобный материал:
1   2   3   4
можно сказать и о проверочных (CHECK) ограничениях, если условия проверки предполагают сравнения значений нескольких столбцов таблицы. Вве­дем дополнительное ограничение для таблицы BOOKS, которое может быть сфор­мулировано следующим образом: соавтор не может быть задан, если не задан автор. При описании книги допустимо не задавать ни автора, ни соавтора, или . задать и автора и соавтора, или задать только автора. Однако задание соавтора в отсутствие задания автора считается ошибочным. В этом случае оператор со­здания таблицы BOOKS будет выглядеть следующим образом:



Для анализа ошибок целесообразно'именовать все ограничения, особенно если таблица содержит несколько ограничений одного типа. Для именования ограни­чений используется ключевое слово CONSTRAINT, после которого следует упшсаль-

146 Глава 8. Принципы поддержки целостности в реляционной модели данных

woe имя ограничения, затем тип ограничения и его выражения. Для идентифи­кации ограничении рекомендуют использовать систему именования, которая легко позволит определить при получении сообщения об ошибке, которое выра­батывает СУБД, какое ограничение нарушено. Обычно имя ограничения состо­ит из краткого названия типа ограничения, далее через символ подчеркивания идет имя атрибута или таблицы, в зависимости от того, к какому уровню отно­сится ограничение, и, наконец, порядковый номер ограничения данного типа, ес­ли к одному объекту задается несколько ограничений одного типа.

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



Приведем пример оператора создания таблицы BOOKS с именованными ограниче­ниями:





Операторы языка SQL, как указывалось ранее, транслируются в режиме интер­претации, в отличие от большинства алгоритмических языков, трансляторы для которых выполнены по принципу компиляции. В режиме интерпретации каж­дый оператор отдельно транслируется, то есть переводится в машинные коды, и тут же выполняется. В режиме компиляции вся программа, то есть совокуп­ность операторов, сначала переводится в машинные коды, а затем может быть выполнена как единое целое. Такая особенность SQL накладывает ограничение на порядок Описания создаваемых таблиц. Действительно, если при трансляции оператора описания подчиненной таблицы с указанным внешним ключом и со­ответствующей ссылкой па родительскую таблицу эта родительская таблица не будет обнаружена, то мы получим сообщение об ошибке с указанием ссылки на несуществующий объект. Сначала должны быть описаны все основные табли-Ды, а потом подчиненные таблицы.

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

148 Глава 8. Принципы поддержки целостности в реляционной модели данных
  1. Таблица BOOKS
  2. Таблица READERS
  3. Таблица CATALOG (системный каталог)
  4. Таблица EXEMPLAR
  5. Таблица RELATION_1 (дополнительная связующая таблица между книгами и
    системным каталогом).

Набор операторов языка SQL принято называть не программой, а скриптом. Тогда скрипт, который добавит набор из 5 взаимосвязанных таблиц базы дан­ных «Библиотека» в существующую базу данных, будет выглядеть следующих! образом:

CREATE TABLE BOOKS С

ISBN varchar(14) NOT NULL .

TITLE varchar(120) NOT NULL.

AUTOR varchar (30) NULL,

COAUTOR varchar(30) NULL.

YEARJHJBL smallInt NOT NULL,

PUBLICH varchar(20) NULL,

PAGES smallint NOT NULL,

CONSTRAINT PKJOOKS PRIMARY KEY (ISBN). CONSTRAINT DF_ YEARJHJBL DEFAULT (Year(GetDateO), CONSTRAINT CK_ YEAR_PUBL CHECK (YEARJUBL >= 1960 AND

YEARJUBL <= YEAR(GetDateO)),

CONSTRANT CK_PAGES CHECK (PAGES > = 5 AND PAGES <« 1000), CONSTRAINT CKJOOKS CHECK (NOT (AUTOR IS NULL AND COAUTOR IS NOT NULL)) CREATE TABLE READERS

( i

READERJD Smallint PRIMARY KEY.

FIRSTJ1AME char(30) NOT NULL,

LASTJWME char<30) NOT NULL,

ADRES char(50),

HQME_PHON char(12),

WQRKJHON char(12),

BIRTHJAYdate CHECK( DateDlffCyear, GetDate(),BIRTH_DAY) >=17 ). CONSTRAINT CKJEADERS CHECK (HOME_PHON IS NOT NULL OR WORKjHON IS NOT NULL)' ); CREATE TABLE CATALOG

Средства определения схемы базы данных 149

ID_CATALOG Smallint PRIMARY KEY,

KNOWELEDGE_AREA Varchar(150) );

CREATE TABLE EXEMPLAR (

IDJXEMPLAR int NOT NULL.

ISBN varchar(14) NOT NULL FOREIGN KEY references BOOKS(ISBN).

READER_IO Smallint(4) NULL FOREIGN KEY references READERS (READERJD).

DATAJN date,

DATA JUT date,

EXIST Logical,

PRIMARY KEY (IDJXEMPLAR, ISBN) );

CREATE TABLE RELATION,.! (

ISBN varchar(l4> NOT NULL FOREIGN KEY references BOOKS(ISBN).

IDJATALOG small int NOT NULL FOREIGN KEY references CATALOG (IDJATALOG), CONSTRAINT PKJELATIONJ PRIMARY KEY (ISBN.IDJATALOG) ).

При написании скрипта мы добавили в оператор создания таблицы «Читатели» ограничение на уровне таблицы, которое связано с обязательным наличием хотя бы одного из двух телефонов.

Средства определения схемы базы данных

В стандарте SQL1 задается спецификация оператора описания схемы базы дан­ных, но не указывается способ создания собственно базы данных, поэтому в раз­личных СУБД используются неодинаковые подходы к этому вопросу.

Например, в СУБД ORACLE база данных создается в ходе установки программ­ного обеспечения собственно СУБД. Все таблицы пользователей помещаются в единую базу данных. Однако они могут быть разделены на группы, объеди­ненные в подсхемы. Понятие подсхемы не стандартизировано в SQL и не ис­пользуется в других СУБД.

В состав СУБД INGRES входит специальная системная утилита, имеющая имя CREATEDB, которая позволяет создавать новые базы данных. Права на исполь­зование этой утилиты имеет администратор сервера. Для удаления базы данных существует соответствующая утилита DESTROYDB.

В СУБД MS SQL Server существует специальный оператор CREATE DATABASE, ко­торый является частью языка определения данных, для удаления базы данных

150 Глава 8. Принципы поддержки целостности в реляционной модели данных

в языке определен оператор DROP DATABASE. Правами на создание баз данных на­деляются администраторы баз данных, которых в общем случае может быть не­сколько. Правами более высокого уровня обладает администратор сервера баз данных (SQL Server), который и может предоставить права администратора базы данных другим пользователям сервера. Администраторы баз данных могут удалить только свою базу данных. Приведем пример оператора создания схемы базы данных в MS SQL Server 7.0:

CREATE DATABASE databasejiame

[ON [РКИ-дазСспецификация файла>[,...пЗ]С,<группа файлов> [....пЗЗЗ

[ LOG ON { спецификация файла* С....П]} 3С FOR LOAD | FOR ATTACH ] спецификация файла> ::= ( [ NAME = логическое имя файла,3FILENAME ° 'физическое имя файла1

[. SIZE = разнер][, MAXSIZE = { максимальный размер | UNLIMITED J 3

С. FILEGROWTH = инкремент увеличения файла] ) С....П] <группа файлов>::= FILEGROUP имя группы файлов спецификация файла> [....nil

Здесь

D databasejiame — имя базы данных, идентификатор в системе;

Q ON — ключевое слово, которое означает, что далее будут заданы специфика-дни файлов, которые будут использованы для размещения базы данных;

Q PRIMARY — ключевое слово, которое определяет первичное файловое простран­ство, в котором будет размещена собственно база данных;

Q LOG ON — ключевое слово, которое задает спецификацию файлов, которые бу­дут использованы для хранения журналов транзакций;

Q FOR LOAD — ключевое слово, которое определяет, что после создания базы дан­ных будет произведена загрузка базы данных данными;

Q FOR ATTACH — предложение, которое определяет, что база данных для управле­ния будет подсоединена к другому серверу.

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

CREATE DATABASE Library

Для изменения схемы базы данных в MS SQL Server 7.0 может быть использо­вана команда;

ALTER DATABASE database

{ ADD FILE «спецификация файлов> с....р] [TO FILEGROUP fnegroupjiame]

f ADD LOG FILE спецификация файлов> [,...пЗ

I REMOVE FILE имя_файла

I ADD FILEGROUP имя_грулпы файлов

[REMOVE FILEGROUP имя группы_файлов

Средства изменения описания таблиц и средства удаления таблиц 151

[MODIFY FILE «спецификация файлов>

imodify rlegroup имя_группы_файлов имя_свойства_группы файлов}

Здесь свойства группы файлов определяет одно из допустимых ключевых слов: Q READONLY — только для чтения; Р READWRITE — для чтения и записи;

О DEFAULT — назначает данную группу файлов в качестве группы по умолчанию, в которой размещаются данные, если не задано дополнительных условий размещения информации.

Как видно, при изменении схемы базы данных в нее могут быть добавлены (ADD) дополнительные файлы и файловые группы или удалены (REMOVE ) ранее опре­деленные файлы или файловые группы. Назначение этих файлов нам будет бо­лее понятно после того, как мы познакомимся с физическими моделями и фай­ловыми структурами, используемыми для хранения данных в базах данных.

Сейчас мы познакомимся с последней командой, которая предназначена для уда­ления базы данных. В MS SQL Server 7.0 это команда имеет следующий синтаксис;

DROP DATABASE databusejiame

После выполнения этой команды уничтожается вся база данных вместе с содер­жащимися в ней данными,

Средства изменения описания таблиц и средства удаления таблиц

В язык SQL добавлены средства изменения схемы таблиц. Что можно и что нельзя изменять в описании таблицы? В стандарте SQL2 добавлены достаточно широкие возможности по модификации уже существующих схем таблиц. Для модификации таблиц используется оператор ALTER TABLE, который позволяет вы­полнить следующие операции изменения для схемы таблицы:

СЗ добавить новый столбец в уже существующую и заполненную таблицу; О изменить значение по умолчанию для какого-либо столбца; Q удалить столбец из существующей таблицы; Q добавить или удалить первичный ключ таблицы; Q добавить или удалить новый внешний ключ таблицы; Р добавить или удалить условие уникальности;

Q добавить или удалить условие проверки для любого столбца пли для табли­цы в целом.

Синтаксис оператора ALTER TABLE:

«Изменить описание таблицы>::° ALTER TABLE <имя таблицы> { ADD определение столбца> |

152 Глава 8 Принципы поддержки целостности в реляционной модели данных

ALTER <имя столбца> {SET DEFAULT <значение>

DROP DEFAULT } j

DROP <имя столбца> {CASCADE 1 RESTRICT} |

ADD { определение первичного ключа>|

определение внешнего ключа> [

<условие уникальности данных> |

<условие проверки> } {

DROP CONSTRAINT имя условия { CASCADE |

RESTRICT}

}

Одним оператором ALTER TABLE можно провести только одно из перечисленных изменений, например, за один раз можно добавить один столбец. Если вам тре­буется добавить два столбца, то необходимо применить два оператора.

Давайте рассмотрим несколько примеров. Чаще всего применяется операция до­бавления столбца. Предложение определения нового столбца в операторе ALTER TABLE имеет точно такой же синтаксис, как и в операторе создания таблицы. До­бавим столбец EDUCATION (образование), содержащий символьный тип данных, с за­данным перечнем значении («начальное», «среднее», «неоконченное высшее», «высшее»).

ALTER TABLE READERS

ADD EDUCATION varchar (30) DEFAULT NULL-

CHECK (EDUCATION IS NULL OR

EDUCATION= "начальное" OR

EDUCATION= "среднее " OR EDUCATION= "неоконченное высшее" OR

EDUCATION "высшее" )

В таблицу READERS будет добавлен столбец EDUCATION, в который по умолчанию будут добавлены все кортежи неопределенного значения. В дальнейшем эти зна­чения могут быть заменены на одно из допустимых символьных значений.

Добавим ограничение на соответствие между датами взятия и возврата книги в таблице EXEMPLAR. Действительно, если даты введены, то требуется, чтобы дата возврата книги была бы больше на срок выдачи книги. Считаем, что стандарт­ным сроком являются 2 недели. Теперь сформулируем оператор изменения таб­лицы EXEMPLARE:

ALTER TABLE EXEMPLARE

ADD CONSTRAINT CK_ EXEMPLARE CHECK ((DATAJN IS NULL AND DATA_OUT IS NULL) OR (DATAJUT >° DATAJN +14) )

Здесь мы применили операцию сложения к календарной дате, которая предпо,-лагает, что добавляют заданное число дней.

Операция удаления столбца связана с проверкой ссылочной целостности, и по­этому не разрешается удалять столбцы, связанные с поддержкой ссылочной це-

Средства изменения описания таблиц и средства удаления таблиц 153

лостностн таблицы, то есть нельзя удалить столбцы родительской таблицы, вхо­дящие в первичный ключ таблицы, если на них есть ссылки в подчиненных таблицах.

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



154 Глава 8. Принципы поддержки целостности в реляционной модели данных

Чаще всего операция ALTER TABLE применяется в CASE-системах при автомати­ческой генерации скриптов создания таблиц в базе данных. В этих системах универсальный алгоритм предполагает сначала создание всех таблиц, которые заданы в даталогической модели, и только после этого добавляются соответ­ствующие связи. И это понятно — в отличие от человеческого разума искусственный интеллект CASE-системы будет испытывать затруднения в опре­делении иерархических взаимосвязей таблиц базы данных, поэтому он предпо­читает использовать универсальный алгоритм, в котором сначала все объекты определяются, а затем добавляются соответствующие свойства для атрибутов, которые являются внешними ключами с указанием требуемых ссылок. В этом случае все операции назначения внешних ключей будут считаться корректны­ми, потому что все объекты были описаны заранее, и для такого алгоритма по­рядок создания таблиц безразличен. Далее приведен скрипт, который был полу­чен при разработке схемы базы данных «Библиотека» в Po\verDesigner6.1. По умолчанию для каждой таблицы создается индекс по первичному ключу» так что кроме знакомых операций создания и изменения таблиц мы увидим еще и операцию создания индексов (CREATE INDEX), после изучения физических моде­лей в базах данных мы еще вернемся к этой операции, а пока примем ее на веру. При создании даталогической модели в качестве СУБД был выбран сервер MS SQL Server 6.X, и для этого сервера скрипт был сгенерирован на устроенном языке этой СУБД, называмом TransactSQL, В нем операция USE <имя базы дан-ных> соответствует операции открытия базы данных, а команда до означает пере­ход к выполнению следующей команды.













Средства изменения описания таблиц и средства удаления таблиц 157

/* =п=ои===е=е====в=!п[=====5==1рае==о====авв==£===1=н==о=в====1=я=,з */

/* Index: IOIINEONYJ_IAEANOE_CIAIEE_FK */

/* вши========iaс=и========ииисвсг=а====ивн=======:=яоаыи=========а */

create index IOIINEONY_EJAEANOE_CIAIEE_FK on RELATIQNJ7 (ISBN)

go

/* ==a=c=====:==5====e=i======ггвеиа апис:=======ен е==в н==========q в= А/

/* Index: IJWNOAAEAIAJUIEAAOJK */

/ =—=========J= с===========:=o===tsc=====s3E:=:j=eei=is=========я=a о и a it I

create Index I_AANOAAEAIA_A_EIEAAO_FK on RELATIONJ7 (KWKOO)

go

alter table EXEMPLAR

add constraint FKJXEMPLAR_RELATION_BOOKS foreign key (ISBN) references BOOKS (ISBN)

go

alter table EXEMPLAR

add constraint FKJXEMPLAR_RELATION_READERS foreign key (NUMJEADER) references READERS (NUM_REAOER)

go

alter table RELATIONJ7

add constraint FK_RELATION_IOIINEONY_BOOKS foreign key (ISBN)

references BOOKS (ISBN) go alter table RELATIQN_67

add constraint FK_RELATION_I_AANOAAE_CATALOG foreign key (KWJCOD)

references CATALOG (KWJCOD) go

В языке SQL присутствует-и операция удаления таблиц. Синтаксис этой опера­ции предельно прост:

<УдалиП таблицу>:;= DROP TABLE <иня таблицы> [CASCADE | RESTRICT]

Параметр CASCADE означает, что при удалении таблицы одновременно удаляются и все объекты, связанные с ней. С таблицей, кроме рассмотренных ранее огра­ничений, могут быть связаны также объекты тина триггеров и представления» Понятие представления будет рассмотрено в следующем подразделе, а тригге­ров мы коснемся в разделах, связанных с архитектурой клиент-сервер. Однако операция удаления объектов определяется еще правами пользователей, что свя­зано с концепцией безопасности в базах данных. Это значит, что если вы не яв­ляетесь владельцем объекта, то вы можете не иметь прав на его удаление. И в этом случае синтаксически правильный оператор DROP TABLE не может быть вы­полнен системой в силу отсутствия прав на удаление связанных с удаляемой

158 Глава 8. Принципы поддержки целостности в реляционной модели данных

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

Например, в нашей схеме, связанной с библиотекой, мы не можем удалить ни таблицу BOOKS, ни таблицу READERS, ни таблицу CATALOG. У этих таблиц есть связь с подчиненными таблицами EXEMPLAR и RELATION 67. Поэтому если вы хотите уда­лить некоторый набор таблиц, то сначала необходимо грамотно построить по­следовательность их удаления, которая не нарушит базовых: принципов поддержки целостности вашей схемы БД. В нашем примере последовательность операторов удаления таблиц может быть следующей:

DROP TABLE EXEMPLAR DROP TABLE RELATIOH_67 DROP TABLE CATALOG DROP TABLE READERS DROP TABLE BOOKS

Понятие представления операции создания представлений

Для описания внешних моделей в реляционной модели могут использоваться представления. Представление (View) - это SQL-запрос на выборку, который пользователь воспринимает как некоторое виртуальное отношение. Задание пред­ставлении входит в описание схемы БД в реляционных СУБД. Представления позволяют скрыть ненужные несущественные детали для разных пользователей, модифицировать реальные структуры данных в удобном для приложений виде и, наконец, разграничить права доступа к данным и тем самым повысить защиту данных от несанкционированного доступа.

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

Оператор определения представления имеет следующий вид: <создание представлениям ;= CREATE VIEW <имя представлена С (<список столбцов>)] AS

Понятие представления операции создания представлений 159

При необходимости в представлении можно задать новое имя для каждого столб­ца виртуальной таблицы. При этом надо помнить, что если указывается список столбцов, то он должен содержать ровно столько столбцов, сколько содержит Их SQL-sanpoc.

Если список имей столбцов в представлении не задай, то каждый столбец пред­ставления получает имя соответствующего столбца запроса.

Рассмотрим типичные виды представлений и их назначение.