Разработка приложений баз данных для СУБД Sybase SQL Anywhere

         

Cвойства таблиц данных


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

признак уникальности совокупности значений нескольких полей; определение составного первичного ключа; определение составного внешнего ключа; наложение условия на значения совокупности полей.

Для задания свойств таблицы в утилите SQL Central следует установить соединение с базой данных Dubl_Biblia. Затем необходимо в левой или правой панели щелкнуть правой клавишей мыши по пиктограмме требуемой таблицы, например таблицы Books. В результате этого на экране появляется контекстное меню (см. рис. 50).

Рис. 50. Контекстное меню установки свойств таблицы данных

Рассмотрим элементы этого меню.

Выбор пункта Open приводит к отображению в правой панели содержимого папки, соответствующей выбранной таблице.

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

запуск утилиты ISQL; соединение с текущей базой данных под именем текущего пользователя; выполнение SQL-оператора SELECT:, в результате которого в окно выводится содержимое всех записей таблицы. Для нашего случая этот оператор будет иметь вид:

/* Выбор всех полей таблицы */ SELECT * FROM "Stepanov"."Books"

ПРИМЕЧАНИЕ

SQL Anywhere допускает в SQL-операторах использование в названий объектов любых символов. К этим символам относятся пробел, различные специальные символы и символы национальных алфавитов. В таких случаях имена объектов должны быть заключены в двойные кавычки. Если имена объектов состоят только из символов английского алфавита и цифр, то кавычки можно опускать.

Пункт Validate предназначен для запуска утилиты DBVALID (см. табл. - ).

Она осуществляет проверку соответствия:




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

Применять этот пункт меню могут пользователь с правами администратора базы данных и только на ЭВМ - сервере базы данных.

В утилите ISQL эти действия реализуются следующим SQL-оператором:

/* Проверка индексов и целостности таблицы */ DBTOOL VALIDATE TABLES '"Stepanov"."Books"' USING /*строка соеди- нения () */ 'DBN=Dubl_Biblia;UID=Stepanov; PWD=s;ENG=Server_ste1'

Следующим является пункт меню Unload. Данный пункт могут использовать только пользователи с правами администратора базы данных. Он служит для использования утилиты DBUNLOAD (см. табл. - ). Эта утилита осуществляет выгрузку базы данных. Эта процедура заключается в формировании командного файл и файлов для импорта данных. При этом содержимое таблиц данных записывается в отдельные файлы. Командный файл содержит SQL-операторы, позволяющие создать полную копию базы данных, включая таблицы данных, хранимые процедуры и другие объекты.

Для применения утилиты DBUNLOAD (см. табл. - ) в утилите ISQL необходимо выполнить оператор DBTOOL вида:

//Выгрузка базы данных DBTOOL UNLOAD TABLES TO 'd:\Log_DB\Unload' /* каталог, куда записываются файлы с содержимым таблиц */ RELOAD FILE TO 'd:\Log_DB\Biblia.sql' //полное имя команд- // ного файла USING //строка соединения 'DBN=Biblia;UID=Stepanov; PWD=s; ENG=Server_ste1' //строка соединения ()

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

создать новую базу данных; установить с ней соединение под именем DBA в утилите ISQL; выполнить командный файл при помощи SQL-оператора READ, имеющего следующий синтаксис:

/* запуск на исполнение командного файла SQL-операторов */ READ <ПУТЬ>,

где ПУТЬ - полное имя командного файла SQL-операторов.

После этого новая база данных становится точной копией исходной.

Реакцией на пункт меню Edit Columns является запуск редактора структуры таблиц (). Право использовать этот пункт меню имеют владелец таблицы, пользователи с классом полномочий DBA () и пользователи, для которых для работы с таблицей установлена привилегия ALTER().

Выбор пункта Copy позволяет запомнить в системном буфере свойства текущей таблицы с целью копирования их в дальнейшем в другую базу данных. Для этого требуется в текущем сеансе работы утилиты SQL Central осуществить соединение с другой базой данных. Затем для нее отобразить в правой панели содержимое папки Tables. После этого следует щелкнуть в любом свободном месте правой панели правой кнопкой мыши и выбрать в появляющемся контекстном меню пункт Paste. В результате этого на основании данных системного буфера создается копия таблицы первой базы данных.

Следующим пунктом контекстного меню установки свойств таблицы данных является пункт Paste. Применять этот пункт могут только владелец таблицы, пользователи, имеющие для этой таблицы привилегию ALTER () и администратор базы данных. Пункт Paste позволяет добавлять в текущую или другую базу данных копию таблицы, информация о которой была запомнена при выборе пункта Copy рассматриваемого меню.

Посредством выбора пункта Delete осуществляется удаление текущей таблицы из базы данных. Это могут сделать только владелец таблицы или администратор базы данных.

В утилите ISQL для исключение таблицы Stepanov.Books из базы необходимо выполнить следующий оператор:



// Удаление таблицы из базы данных DROP TABLE Stepanov.Books

Последний пункт рассматриваемого меню Properties позволяет проанализировать и модифицировать свойства текущей таблицы. Изменять эти свойства могут только владелец таблицы, пользователи, имеющие для этой таблицы привилегию ALTER ()и администратор базы данных. Другие пользователи могут только просматривать свойства таблицы.

Выбор пункта меню Properties инициирует появление окна Books Properties (рис. 51).



Рис. 51. Окно свойств таблицы Books - вкладка General

Вкладка General позволяет в случае необходимости изменить название таблицы и отредактировать комментарий к таблице. Кроме того она показывает кто является владельцем таблицы и в какой области базы данных хранится текущая таблица ().

В утилите ISQL замена названия таблицы Stepanov.Books на Stepanov.Книги реализуется оператором вида:

//Изменение названия таблицы ALTER TABLE Stepanov.Books RENAME "Книги"

Вкладка Columns предназначена для формирования составного первичного ключа (рис.52).



Рис. 52. Окно свойств таблицы Books - вкладка Columns



ПРИМЕЧАНИЕ

В одной таблице данных может быть определен только один первичный ключ.

В поле вкладки Columns указывается состав первичного ключа. В частном случае, как показано на рис. 52 первичный ключ может состоять из одного поля. Для расширения состава ключа необходимо выделить поля, которые необходимо ввести в состав ключа. Выделение нескольких полей осуществляется щелком левой клавиши мыши при нажатой клавиши Ctrl. После этого необходимо щелкнуть по кнопке Add To Key. При этом состав первичного ключа будет отображен в поле внизу вкладки. Если затем "нажать" на одну из кнопок OK или Применить, то состав первичного ключа будет зафиксирован в базе данных. Отличие состоит в том, что при использовании кнопки OK окно Books Properties закроется. При щелчке мышью по кнопке Применить это окно останется на экране и пользователь может продолжить модификацию первичного ключа.

Включение в таблице Books в состав первичного ключа полей City_publish и Publisher в дополнение к ключевому полю Code_book в утилите ISQL осуществляется операторами:



// удаление первичного ключа ALTER TABLE Stepanov.Books DELETE PRIMARY KEY; //формирование составного первичного ключа ALTER TABLE Stepanov.Books ADD PRIMARY KEY (Code_book,City_publish,"Publisher")

Элементы управления вкладки Columns позволяют также исключать поля из первичного ключа. Для следует выделить исключаемые поля и воспользоваться кнопкой Remote From Key. Измененный состав ключа опять отобразиться в нижнем поле вкладки. Для удаления всего первичного ключа таблицы можно применить кнопку Remote All.

Все эти действия в ISQL реализуются совокупностью двух SQL-операторов, приведенных выше.

Кнопка Details вкладки Columns позволяет просмотреть все свойства выделенного поля. В утилите ISQL эту информацию можно получить, применив оператор SELECT к системному представлению SYS.SYSCOLUMNS.

Задание признака уникальности и наложение условия для значений совокупности полей осуществляется во вкладке Constraints (рис. 53).



Рис. 53. Окно свойств таблицы Books - вкладка Constraints



ПРИМЕЧАНИЕ

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

В поле области Uniqueness Constraints данной вкладки отображаются группы полей таблицы с признаками уникальности значений. Для таблицы Books уникальность значений установлена только для одной группы. Она состоит из одного поля Code_book и была автоматически сформирована при определении этого поля первичным ключом таблицы. Для формирования новой группы следует воспользоваться кнопкой New. При этом открывается окно Add Uniqueness Constraint. Оно имеет точно такой же вид как и вкладка Columns ().

В утилите ISQL для добавления/удаления совокупности полей с признаком уникальности необходимо выполнить SQL-операторы вида:

/* Добавления новой совокупности полей с признаком уникальности /* ALTER TABLE Stepanov.Books ADD UNIQUE(City_publish,"Publisher"); /* Удаление совокупности полей с признаком уникальности /* ALTER TABLE Stepanov.Books DELETE UNIQUE(City_publish, "Publisher")



Поле области Check Constraint вкладки Constraints предназначено для задания условия накладываемые на значения таблицы. В утилите ISQL эти действия реализуются следующими операторами:

/* Установка условий для значений таблицы */ ALTER TABLE Stepanov.Books ADD CHECK(Number>0 AND Start_date>=1992); /* Снятие условий для значений таблицы */ ALTER TABLE Stepanov.Books DELETE CHECK

Назначение вкладки Permissions (рис. 54) состоит в установлении для пользователей привилегий по манипулированию текущей таблицей.



Рис. 54. Окно свойств таблицы Books - вкладка Permissions

На вкладке Permissions показано, что пользователь Sidorova имеет привилегию SELECT () для таблицы Books (). Причем он(она) имеет право предоставлять эту привилегию другим пользователям. Такие привилегии данному пользователю предварительно установил автор. Для предоставлении привилегий другим пользователям следует щелкнуть мышью по кнопке Grant.



Рис. 55. Назначение пользователей, допущенных к работе с таблицей Books

После этого необходимо выделить из предлагаемого списка требуемых отдельных пользователей или/и групп пользователей. Этим самым реализуется назначение индивидуальных или групповых привилегий. На рис. 55 показано выделение пользователей Ivanova, Popova и группы пользователей LIBRARIANS. После этого следует щелкнуть по кнопке Grant Permission. Результат допуска этих пользователей будет отображен в вкладке Permissions (рис. 56).



Рис. 56. Пользователи допущенные к работе с таблицей Books и перечень их привилегий

По умолчанию каждому пользователю назначаются все привилегии без права из передачи другим пользователям. Для коррекции привилегий отдельного пользователя следует выделить его как показано на рис. 56. В результате этого становятся доступными группы флажков Permission и Grant option. Установка/снятие флажков в первой группе соответствует назначению/отмене соответствующих привилегий. На рис. 56 показано, что какие привилегии устанавливаются пользователю Petrova. Этому пользователю назначены все привилегии кроме привилегии DELETE (). Привилегия UPDATE () позволяет пользователю Petrova модифицировать только поля Number и Times_read. Уточнение привилегий для подмножества полей таблицы осуществляется при помощи кнопок с многоточием. Кроме того, пользователь Petrova имеет право назначать привилегию SELECT () для таблицы Books другим пользователям. Следует отметить, в закладке Permissions (см. рис. 56) можно устанавливать как индивидуальные, так и групповые привилегии. Так на рис. 56 видно, что индивидуальные привилегии установлены для пользователей Petrova, Ivanova и Sidorova. Групповые привилегии определены для группы пользователей LIBRARIANS. Из этого следует, что для всех членов этой группы (пользователей Petrova, Ivanova, Sidorova и Popova) определена привилегия INSERT () для работы с таблицей Stepanov.Books. Таким образом, установка данной привилегий для пользователей Petrova и Ivanova является избыточной.

Все действия, произведенные в SQL Central при рассмотрении вкладки Permissions, можно произвести и в утилите .ISQL Для этого следует выполнить последовательность ниже приведенных SQL-операторов:



/* Установление привилегии SELECT для пользователя Sidorova, с правом ее передачи другим пользователям */ GRANT SELECT ON Stepanov.Books TO Sidorova WITH GRANT OPTION; /* Установление всех привилегий для пользователя Ivanova */ GRANT ALL PRIVILEGES ON Stepanov.Books TO Ivanova; /* Установление трех привилегий для пользователя Petrova */ GRANT ALTER, INSERT, INDEX ON Stepanov.Books TO Petrova; /* Установление привилегии SELECT для пользователя Petrova, с правом ее передачи другим пользователям */ GRANT SELECT ON Stepanov.Books TO Petrova WITH GRANT OPTION; /* Установление для пользователя Petrova привилегии UPDATE для полей Number и Times_read */ GRANT UPDATE(Number,Times_read) ON Stepanov.Books TO Petrova; /* Установление привилегии INSERT для группы пользователей LIBRARIANS */ GRANT INSERT ON Stepanov.Books TO LIBRARIANS

Последней вкладкой окна свойств таблицы данных () является вкладка Statistics. Она представлена на рис. 57.



Рис. 57. Окно свойств таблицы Books - вкладка Statistics

Вкладка Statistics показывает некоторые физические характеристики текущей таблицы. В поле Number of columns показано количество полей таблицы. Таблица Books состоит из 10 полей. Поле Approximate number of rows отображает примерное число записей таблицы. Таблица Books пока не содержит ни одной записи. В поле Maximum table width указывается максимальная длина записи в байтах. При этом размеры полей с перемененной длинной (см.табл. , ) не учитываются.

В утилите ISQL количество полей таблицы можно определить путем просмотра из перечня (см. рис. , ). Количество записей в таблице можно определить при выполнении оператора SELECT. Оно отображается при этом в окне Statistics утилиты ISQL.

Таким образом, совместно со свойствами полей, свойства таблицы представляют пользователям возможность хранить в базах данных информацию с широким спектром характеристик.


Дополнительные свойства полей


В SYBASE SQL Anywhere создание таблиц осуществляется оператором Create Table. Согласно синтаксиса этого оператора для каждой таблицы можно определить свойства для всей таблицы, а также основные и дополнительные свойства полей.

К основным свойствам полей относятся:

название поля; тип поля; размер и точность поля; признак разрешения хранения значений NULL; значение, присваиваемое полю по умолчанию.

Дополнительные свойства полей включают:

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

Некоторые свойства полей были рассмотрены в , остальные - будут рассмотрены ниже. Свойства таблиц будут предметом рассмотрения .

В утилите SQL Central разработчики вынесли в окна редактора структуры таблиц наиболее часто используемые свойства полей (). Доступ к остальным свойствам осуществляется через меню или панель инструментов редактора. Другим способом установить вышеуказанные свойства можно, используя контекстные меню полей и таблиц. Эти меню появляются после щелчка правой кнопкой мыши по соответствующему полю или таблице. В утилите ISQL определение свойств таблиц и ее полей осуществляется при помощи SQL-операторов Create Table и Alter Table. Установим дополнительные свойства полей в таблице Books базы данных Dubl_Biblia.

Как было показано в , эта таблица была создана путем копирования ее структуры из исходной таблицы . В создаваемую таким образом таблицу дополнительные свойства полей и свойства таблицы из исходной не переписываются. В связи с этим данные свойства необходимо установить принудительно. В таблице Books следует определить поле Code_book первичным ключом и показать как устанавливаются значения, присваиваемые этому полю по умолчанию. Для этого воспользуемся контекстным меню.

ПРИМЕЧАНИЕ

Изменять свойства полей таблицы имеют возможность ее владелец, пользователи с классом полномочий DBA и пользователи, для которых для работы с таблицей установлена привилегия ALTER ().




Подключитесь к базе данных Dubl_Biblia в утилите SQL Central для установления дополнительных свойств полей таблицы Books. Отобразите в правой панели перечень ее полей. Последовательно раскройте содержимое папок Tables, Books и Columns. Выделите поле Code_book и щелкните по нему правой кнопкой мыши. В результате этого появится контекстное меню (рис. 45).



Рис. 45. Контекстное меню установки свойств поля таблицы данных

Последовательно рассмотрим пункты данного меню.

Выбор первого пункта этого меню Add Primary Key позволяет установить признак ключевого поля, т.е. признак вхождения поля в состав первичного ключа. Если для поля этот признак уже установлен, то данный пункт меню имеет название Remote from Primary Key. Выбор рассматриваемого меню в этом случае приводит к снятию признака первичного ключа.

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

/* Изменение свойств таблицы */ ALTER TABLE Stepanov.Books ADD PRIMARY KEY (Code_book)

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

/* Удаление первичного ключа таблицы */ ALTER TABLE Stepanov.Books DELETE PRIMARY KEY

Следующим пунктом контекстного меню свойств поля является пункт Advanced Properties. Посредством этого пункта осуществляется установка некоторых дополнительных свойств поля. В случае выбора данного пункта на экран выводится окно Advanced Column Properties (рис. 46).



Рис. 46. Окно дополнительных свойств поля таблицы данных

В этом окне можно определить значения, присваиваемое полю по умолчанию. Речь идет о значениях полей новых записей. Новые записи добавляются в таблицы при выполнении SQL-оператора INSERT. В этом операторе для каждой новой записи указывается перечень инициализируемых полей и их значений. Полям, отсутствующих в этом перечне, присваиваются значения, определенные по умолчанию. Если значение по умолчанию не установлено, то в поле записывается значение NULL.

В SYBASE SQL Anywhere пользователям предоставляется возможность устанавливать произвольные значения полей по умолчанию в виде :



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

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

CURRENT DATABASE- текущая база данных для полей символьного типа; CURRENT DATE - текущая дата для полей типа DATE или полей символьного типа; CURRENT PUBLISHER - текущий издатель для полей символьного типа (используется только при организации репликации; CURRENT TIME - текущее время для полей типа TIME или полей символьного типа; CURRENT TIMESTAMP - текущий момент времени текущей даты для полей типа TIMESTAMP или полей символьного типа; USER - текущий пользователь для полей символьного типа; AUTOINCREMENT - уникальное число, генерируемое SQL Anywhere при создании каждой новой записи для полей числовых типов.

Рассмотрим AUTOINCREMENT подробнее. В поле A с таким значением по умолчанию всегда записывается число на единицу превышающее текущий максимум M. М содержит максимальное значение среди всех ранее введенных в поле A, в том числе и уже удаленных записей. Если для поля A в операторе INSERT (добавляет новую запись) указано конкретное значение N, то:

при N > M изменяется значение текущий максимум - ему присваивается значение N; при N < M текущий максимум остается неизменным. Если в таблице уже имеется запись с полем A, значение которого равно N,то оператор завершается аварийно.

Динамика изменения значений поля A представлена на рис. 47.



Рис. 47. Динамика изменений значения поля А, для которого по умолчанию определена установка AUTOINCREMENT:

а)исходное состояние таблицы;

б)таблица после добавления новой записи, значение N не задано;

в)таблица после добавления новой записи, N =10;

г)таблица после удаления двух последних записей;

д)таблица после добавления новой записи, N =4;

е)таблица после добавления новой записи, значение N не задано.



В окне Advanced Column Properties () задание значений, присваиваемых по умолчаний, осуществляется в области Default value. Состояние переключателя этой области в положении User-defined позволяет устанавливать в поле, находящемся справа от него, значения по умолчанию в виде строк, чисел или константных выражений. Если для этой цели требуется использовать служебные значения по умолчанию, то тогда следует установить переключатель в состояние Pre-defined. При этом станет доступным список, из которого можно сделать необходимый выбор.

В области Constraints можно установить такие свойства полей как: признак уникальности значений поля - при помощи флажка Value are unique; признак разрешения хранения значений NULL - посредством флажка Column allows NULL; условие, накладываемое на значения поля. Оно задается в поле Check.

Реализация этих действий в утилите ISQL иллюстрируется следующими SQL-операторами, изменяющих свойства поля Books.Year_publish:

/* Установка признака уникальности значений поля */ ALTER TABLE Stepanov.Books ADD UNIQUE(Year_publish); /* Снятие признака уникальности значений поля */ ALTER TABLE Stepanov.Books DELETE UNIQUE(Year_publish); /* Установка признака разрешения хранения значения NULL */ ALTER TABLE Stepanov.Books MODIFY Year_publish NULL; /* Снятие признака разрешения хранения значения NULL */ ALTER TABLE Stepanov.Books MODIFY Year_publish NOT NULL; /* определение условия для значений поля */ ALTER TABLE Stepanov.Books MODIFY Year_publish CHECK(Year_publish>1992); /* Снятие условия для значений поля */ ALTER TABLE Stepanov.Books MODIFY Year_publish CHECK NULL

Следующим пунктом контекстного меню свойств поля таблицы данных () является пункт Copy. Его выбор позволяет запомнить в буфере основные свойства поля для последующего копировать описания поля в другую таблицу. Для использования информации из буфера следует выделить необходимую таблицу в левой панели утилиты и вызвать правой кнопкой мыши контекстное меню. Выбор в нем пункта Paste позволяет добавить в эту таблицу новое поле с основными свойствами исходного. Например, таким образом можно переместить поле Books.Title_book в таблицу Copies.

В утилите ISQL это действие осуществляется выполнением следующего SQL-оператора:



//Введение нового поля в таблицу ALTER TABLE Stepanov.Copies ADD Title_book // имя нового поля LONG VARCHAR NOT NULL //свойства поля

Пункт меню контекстного меню свойств поля Delete позволяет удалить поле из таблицы данных.

В ISQL это действие реализуется следующим SQL-оператором:

/* Исключение поля Code_book из таблицы Stepanov.Books */ ALTER TABLE Stepanov.Books DELETE Code_book

Пункт Properties этого меню позволяет проанализировать и отредактировать все свойства поля таблицы данных. Реакцией на его выбор в нашем случае является появление окна Code_book Properties (рис. 48).



Рис. 48. Окно свойств поля Code_book - вкладка General

Вкладка General этого окна позволяет изменить название поля и при необходимости сделать краткий комментарий о назначении поля.

Для модификации названия поля в утилите ISQL необходимо выполнить следующий SQL-оператор:

/* Изменение в таблице Books названия поля "Code_book" на "Code_b" */ ALTER TABLE Stepanov.Books RENAME Code_book TO Code_b

Вкладка Data Type этого окна (рис. 49) предназначена для изменения типа данных поля.



Рис. 49. Окно свойств поля Code_book - вкладка Data Type

Для поля входящего в состав первичного или составного ключа изменить тип данных поля невозможно. Этот момент представлен на рис. 49, список Data type не доступен.

Другой функцией вкладки Data Type является анализ таких свойств поля как признак разрешения хранения значений NULL, значение, присваиваемое полю по умолчанию, признак уникальности значений поля и условие, накладываемое на значения поля. Для изменения этих свойств необходимо щелкнуть мышью по кнопке Edit. В этом случае на экране появляется окно Advanced Column Properties (), которое было рассмотрено выше.

В утилите ISQL также имеется возможность изменения типов полей и проанализировать свойства полей. Информация об этих свойствах может быть получена при помощи SQL-оператора SELECT из системного представления SYS.SYSCOLUMNS. Изменение типов данных полей реализуется оператором ALTER TABLE. Для изменения в поле Books.Number типа данных Smallint на Integer следует воспользоваться оператором вида:

/* Изменение типа данных поля /* ALTER TABLE Stepanov.Books MODIFY Number INTEGER

Таким образом, используя контекстное меню свойств поля можно проанализировать его свойства, а при необходимости и отредактировать их.


Определение таблиц данных


Таблицы данных являются, как правило, самыми первыми объектами создаваемых в базах данных. Рассмотрим как решается эта задача в СУБД SYBASE SQL Anywhere, на примере создания в базе данных Dubl_Biblia копий двух таблиц . Речь идет о таблицах Copies (характеристики экземпляров книг) и Books (данные о книгах, имеющиеся в библиотеке). При этом в учебных целях установим для поля Copies.Code_book тип данных Char(10). Следует напомнить, что создание любых объектов базы данных могут осуществлять только пользователи, имеющие класс полномочий RESOURCE или DBA.

Как и ранее, начнем с применения SQL Central. После запуска этой утилиты осуществим соединение с базой данных Dubl_Biblia под именем администратора базы данных Stepanov. Затем воспользуемся редактором структуры таблиц. Его можно запустить через элемент Add Table, который находится в папке Tables. Редактор структуры таблиц выводит на экран окно Table <Unnamed> - SQL Central. Такое окно с заполненной информацией о свойствах таблицы Copies представлено на рис.42.

Рис.42. Окно редактора структуры таблиц

ПРИМЕЧАНИЕ

Редактор структуры таблиц, но с названием таблицы вместо фразы <Unnamed> в наименовании окна, инициализируется и элементом Add Column. В этом случае редактор используется для добавления полей в ранее созданные таблицы данных. Элемент Add Column находится папках Tables - <Название таблицы> - Columns.

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

В колонке Key указывается признак ключевого поля, означающий что это поле входит в состав первичного ключа таблицы. На показано, что первичный ключ таблицы состоит только из одного поля N_books. Установка/снятие признака ключевого поля осуществляется щелчком левой кнопки мыши.

Колонка Column Name содержит название полей таблицы данных.

ПРИМЕЧАНИЕ

В названиях полей таблицы допустимо использовать любые символы, в том числе и пробелы, и буквы неанглийского алфавита. В дальнейшем в SQL-операторах при обращении к таким полям их следует заключать в двойные кавычки.




Колонка Data Type служит для определения типов данных полей создаваемой таблицы. Задание типа данных осуществляется выбором из списка, в виде которого эта колонка представлена в каждой строке.

Колонка Size/Prec. предназначена для задания размера для типов данных Char и его синонимов, Decimal, Numeric и Binary. Если в колонке Data Type задан один из этих типов, то колонка Size/Prec. представляется в виде счетчика. Щелкая мышью по стрелкам счетчика, можно установить требуемый размер поля таблицы данных. Как видно на , таким образом задан размер в 10 байтов для поля Code_book.

Для типов данных Decimal и Numeric, помимо переменного общего размера, требуется указать еще и точность дробной части представляемых значений. Для этого используется колонка Scale. В необходимых случаях она, как и колонка Size/Prec, представляется в виде счетчика.

Важное значение имеет колонка Allow Nulls. Оно указывает может ли текущее поле создаваемой таблицы содержать специальное значение NULL. Это значение указывает на то, что в поле не содержатся данные. Оно помогает определить были ли ранее в это поле введены данные. Как видно на , для всех полей таблицы Copies не разрешено хранение значения NULL.

В колонку Comment записывается комментарий к полям таблицы данных.

Таблица со свойствами полей создаваемой таблицы данных является основным элементом окна редактора свойств таблицы, но не единственным. Поле Name предназначено для ввода имени таблицы. Поле Creator предназначено для выбора владельца создаваемой таблицы. Такая возможность предоставлена только для пользователей с правами администратора. В базе данных Dubl_Biblia - это пользователи dba и Stepanov. Такие пользователи могут создавать объекты базы данных от имени других пользователей. Эта возможность для таблиц реализуется при помощи поля Creator в окне редактора свойств таблицы. .Новые объекты могут создавать также пользователи с классом полномочий Resource. Однако пользователи данной категории могут создавать эти объекты только от своего имени.

Управление работой редактора структуры таблиц осуществляется при помощи меню. Оно появляется после щелка правой кнопки мыши в любом месте окна редактора ниже таблицы свойств полей таблицы данных. Такое меню приведено на . Оно содержит следующие пункты:



Add Column - добавление нового поля в таблицу данных; Delete Column - удаление выделенного поля таблицы данных; Advanced Column Properties - определение дополнительных свойств текущего поля таблицы (рассмотрены в ); Advanced Column Properties - определение дополнительных свойств таблицы (рассмотрены в ); Save Table - сохранение структуры таблицы; Save and Close - сохранение структуры таблицы и завершение работы с редактором структуры таблиц.

Действия, реализуемые пунктами меню редактора, можно выполнить при помощи панели инструментов. Она расположена в верхнем правом углу окна редактора ().

Введем всю информацию для определения свойств полей таблицы Copies как показано на . После этого завершим работу в редакторе структуры таблиц. В результате этого в базе данных Dubl_Biblia появится новая и пока единственная таблица Copies. Этот факт будет представлен вложенной папкой Copies в папке Tables. Самостоятельно раскройте данную папку и проверьте это утверждение. Обратите внимание, что владельцем созданной таблицы является пользователь Stepanov.

Для того, чтобы создать таблицу Copies в утилите ISQL необходимо выполнить следующую последовательность SQL-операторов:

//Создание таблицы CREATE TABLE Stepanov.Copies /* Имя владельца может указывать только администратор базы данных */ ( N_books SMALLINT NOT NULL, /* Тип поля SMALLINT, значения NULL не допустимы */ Code_book SMALLINT NOT NULL, Present BIT NOT NULL, /* Тип поля BIT */ PRIMARY KEY(N_books), /* Ключ таблицы состоит из одного поля */ ); /* Комментарии к полям таблицы */ COMMENT ON COLUMN Stepanov.Copies.N_books IS 'Инвентарный N экземпляра книги'; COMMENT ON COLUMN Stepanov.Copies.Code_book IS 'Шифр (код) наименования книги'; COMMENT ON COLUMN Stepanov.Copies.Present IS ' Признак наличия данного экземпляра книги '

Убедиться в том, что в базе данных появилась новая таблица можно, просмотрев список имеющихся в базе таблиц и представлений (см. рис. - ).

Теперь создадим в базе данных Dubl_Biblia копию таблицы Books . Она содержит много полей (). В утилите SQL Sentral имеется возможность не устанавливать большинство их свойства вручную. Это реализуется копированием структуру таблицы Books из .

В текущий момент в утилите SQL Sentral установлено соединение к базе данных Dubl_Biblia. Подключимся еще и к . Раскроем в правой панели папку Tables этой базы данных. Затем выделим в правой панели папку Books, соответствующий таблице Books. После этого перетащим ее в папку Tables базы данных Dubl_Biblia. При перетаскивании курсор Books принимает сложную форму. Вид курсора, установленный при этом на папку Tables базы данных Dubl_Biblia в левой панели утилиты, и содержимое главного окна утилиты SQL Central на этот момент времени приведен на рис. 43.





Рис.43. Копирование структуры таблицы данных Books

При копировании таким образом утилита запрашивает у пользователя подтверждение копирования структуры таблицы (рис. 44).



Рис.44. Подтверждение копирование структуры таблицы данных Books

В результате проведенных действий в базе данных Dubl_Biblia появилась таблица Books. Чтобы убедиться в этом раскройте ее папку Tables.

При дублировании таким образом в новую базу переписывается структура исходной таблицы. Но при этом следует отметить, что созданная таблица содержит только основные свойства ее полей. Речь идет о названиях, типах и размерах полей, а также о разрешении хранения значений NULL и признаке уникальности значений полей. Дополнительные свойства в этом случае должны устанавливаться заново. Свойства полей и таблиц рассмотрены в и .

В утилите ISQL создание копии таблицы Books производится только оператором Create Table. Для того, чтобы получить такой же результат, что и в утилите SQL Central необходимо выполнить этот оператор следующими параметрами:

CREATE TABLE Books ( Code_book SMALLINT /* Уникальное поле типа SMALLINT.*/ NOT NULL /* Значения NULL запрещены */ DEFAULT //Значения по умолчанию автома- AUTOINCREMENT UNIQUE, /*тически- увеличиваются на единицу */ .

Author LONG VARCHAR NULL, /* Поле типа LONG VARCHAR. Значения NULL разрешены. */ Coauthors LONG VARCHAR NULL, Title_book LONG VARCHAR NULL, City_publish CHAR(15) NOT NULL, "Publisher" /* Название поля в кавычках потому что имеется одноименное служебное слово в языке Watcom-SQL */ CHAR(20) NOT NULL, Year_publish SMALLINT NOT NULL, Number SMALLINT NOT NULL, Start_date DATE NOT NULL, Times_read SMALLINT NOT NULL )


Определение внешних ключей


Внешние ключи используются для организации связей между таблицами базы данных (родительскими и дочерними) и для поддержания ограничений ссылочной целостности данных. В СУБД SYBASE SQL Anywhere ссылочная целостность проверяется при:

удаление записей родительской таблицы; модификация значений полей родительской таблицы, на которые ссылаются поля внешнего ключа дочерней таблицы.

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

Для проверки действия механизма внешних ключей перепишем содержимое таблиц Books и Copies в одноименные таблицы базы данных Dubl_Biblia. Такая возможность довольно просто реализуется в утилите ISQL. Для решения поставленной задачи необходимо в среде этой утилиты установить соединение с и произвести экспорт содержимого таблиц в текстовые файлы. Это могут сделать владельцы таблиц, пользователи, имеющие привилегию SELECT () для этих таблиц, и администратор базы данных.

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

/* Экспорт в текстовые файлы каталога C:\temp содержимого таблиц Books и Copies */ UNLOAD TABLE Stepanov.Books TO 'c:\temp\books.txt'; UNLOAD TABLE Stepanov.Copies TO 'c:\temp\copies.txt'

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

/* Импорт из текстовых файлов содержимого таблиц Books и Copies */ LOAD TABLE Stepanov.Copies FROM 'c:\temp\copies.txt'; LOAD TABLE Stepanov.Books FROM 'c:\temp\books.txt'

Выполнять операторы LOAD имеют право владельцы таблиц, пользователи, имеющие привилегию INSERT () для этих таблиц, и администратор базы данных.

Для проверки результатов копирования достаточно просмотреть содержимое таблиц при помощи оператора SELECT ().

Внешние ключи могут создавать:

пользователи - владельцы родительской и дочерней таблиц; пользователи с полномочиями ALTER () для дочерней и REFERENCES () - для родительской таблиц; администратор базы данных.




В утилите SQL Central внешние ключи создаются мастером Add Foreign Key. Для доступа к нему следует последовательно раскрыть папки Tables - <имя таблицы> - Foreign Keys. Мастер Add Foreign Key выполняет ряд шагов, которые мы рассмотрим по устоявшейся схеме (п.5.1). Работу мастера покажем на примере создания внешнего ключа таблицы Copies, который ссылается на таблицу Books.

Шаг 1. Начальная стадия создания внешнего ключа таблицы данных (рис. 63).



Рис. 63. Создание внешнего ключа таблицы данных

Пояснение. Добро пожаловать в Мастер создания внешних ключей. Этот Мастер позволяет вам создать ссылку на другую таблицу данных.

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

Дочерняя таблица: Copies.

Вопрос. На какую таблицу будет ссылаться создаваемый внешний ключ?

Ниже следует список, в котором следует произвести указать родительскую таблицу. Создаваемый внешний ключ должен ссылаться на таблицу Books и ее мы выбираем в качестве родительской таблицы.

После выбора родительской таблицы следует щелкнуть по кнопке Далее для выполнения следующего шага.

Шаг 2. Выбор полей родительской таблицы, на которые будет ссылаться внешний ключ дочерней таблицы данных (рис. 64).



Рис. 64. Выбор полей родительской таблицы, на которые будет ссылаться внешний ключ дочерней таблицы данных

Вопрос 1. Создаваемый внешний ключ будет указывать на первичный ключ или совокупность полей с признаком уникальности?

Ниже следует список, предлагающий путем выбора одной из альтернатив ответить на этот вопрос. В нашем случае внешний ключ должен содержать ссылку на первичный ключ.

Содержание вопроса 1связано с тем, что внешний ключ должен обязательно ссылаться или на первичный ключ или на одну из совокупностей полей с признаком уникальности.

Вопрос 2. Какие поля внешнего ключа будут соответствовать полям первичного ключа родительской таблицы?

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

Если предлагаемое соответствие вас устраивает, то переходим к очередному шагу.

Шаг 3. Определение названия и комментария к внешнему ключу (рис. 65).





Рис. 65. Определение названия и комментария к внешнему ключу

Вопрос. Какое название будет иметь новый внешний ключ?

Следующее ниже поле окна представляет собой средство для ответа на поставленный вопрос. Назовем внешний ключ Books_Copies.

Пояснение. Вы можете включить комментарий для нового внешнего ключа.

Ниже располагается поле для ввода комментария для создаваемого внешнего ключа.

Произведя все манипуляции, приступаем к следующему шагу.

Шаг 4. Задание атрибутов внешнего ключа (рис. 66).



Рис. 66. Задание атрибутов внешнего ключа

Пояснение 1. SQL Anywhere позволяет внешнему ключу содержать значения NULL.

Вопрос 1. Желаете ли вы разрешить хранение значений NULL в полях, составляющих внешний ключ?

Для ответа на этот вопрос предназначен флажок Allows NULLS. В тех случаях, когда это недопустимо, например как в нашем, ниже в области Note приводится комментарий по этому поводу.

Комментарий. Ни одно из полей, составляющих внешний ключ, не допускают хранение значений NULL.

Пояснение 2. SQL Anywhere может отложить проверку ссылочной целостности с использованием этого внешнего ключа до выполнения оператора COMMIT вместо того, чтобы производить проверку целостности сразу после изменения содержимого таблицы данных.

Вопрос 2. Желаете ли вы производить проверку целостности только при выполнении оператора COMMIT?

Флажок Check on COMMIT позволяет ответить на этот вопрос.

Оператор COMMIT осуществляет завершение текущей и начало следующей транзакций. В некоторых случаях необходимо при выполнения последовательности SQL-операторов, изменяющих сразу несколько таблиц, выполнять проверку целостности только при завершении транзакций. SQL Anywhere предоставляет такую возможность и именно этим вызван вопрос 2.

В нашем случае нет необходимости откладывать проверку ограничений целостности и поэтому оставим флажок Check on COMMIT в сброшенном состоянии.

После выполнения действий, предписанных в шаге 4, переходим шагу 5.

Шаг 5. Определение условий ссылочной целостности (рис. 67).





Рис. 67. Определение условий ссылочной целостности

Вопрос 1. Какие действия должны предприниматься для поддержания ссылочной целостности?

Для ответа на этот вопрос используются переключатели Update Action и Delete Action. Первый из них, Update Action, определяет действие, выполняемое при модификации значений полей родительской таблицы, на которые ссылаются поля внешнего ключа дочерней таблицы. Назовем эти поля родительской таблицы адресуемыми полями. Второй переключатель Delete Action предназначен для выбора действия, выполняемого при удалении записей родительской таблицы.

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

Restrict Update - запрещение модификацию адресуемых полей; Cascade - (каскадное обновление) изменение значений полей внешнего ключа в записях, ссылающихся на модифицируемую запись родительской таблицы, на новое значение адресуемых полей; Set NULL- изменение значений полей внешнего ключа в записях, ссылающихся на модифицируемую запись родительской таблицы, на значение NULL; Set Default - изменение значений полей внешнего ключа в записях, ссылающихся на модифицируемую запись родительской таблицы, на значение присваиваемое полю по умолчанию.

Для указания действий, которые надлежит выполнить при удалении записей родительской таблицы используется переключатель Delete Action. Он следующие положения:

Restrict Delete- запрещение удаления; Cascade - (каскадное удаление) удаление записей дочерней таблицы, ссылающихся на удаляемую запись родительской таблицы; Set NULL- изменение значений полей внешнего ключа в записях, ссылающихся на удаляемую запись родительской таблицы, на значение NULL; Set Default - изменение значений полей внешнего ключа в записях, ссылающихся на удаляемую запись родительской таблицы, на значение присваиваемое полю по умолчанию.

Как показано на рис. 67 для создаваемого внешнего ключа определено каскадное обновление полей внешнего ключа дочерней таблицы (поле Copies.Code_book) при изменение адресуемых полей родительской таблицы (поле Books.Code_book) - (Update Action/ Cascade) и запрещение удаления записей родительской таблицы Books, на которую имеются ссылки из дочерей таблицы Copies. (Delete Action / Restrict Delete).

После определения условий ссылочной целостности приступаем к заключительному шагу.

Шаг 6. Подтверждение готовности к созданию нового внешнего ключа (рис. 68).



Рис. 68. Подтверждение готовности к созданию нового внешнего ключа




Регистрация пользователей


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

Регистрация пользователей позволяет установить для каждого из них индивидуальные привилегии по манипулированию с объектами базы данных. Разработчики SYBASE SQL Anywhere рекомендуют регистрировать каждого пользователя. Накладные расходы, связанные с администрирование небольшие и кроме того, это создает дополнительные возможности по контроля за работой баз данных. Это проявляется в том, что:

утилита DBTRAN (см. табл. - ), позволяет извлечь из журнала изменений базы данных все SQL-операторы, выполненные конкретным пользователем. Это позволяет проанализировать, ранее произведенные им действия при возникновении каких-либо трудностей или при появлении некоторых вопросов; в окне Connection сервера баз данных () фиксируются все пользователи, работающие с базами данных, управляемые сервером. Это информация может оказаться весьма полезной при анализе текущего состояния сервера или конкретной базы данных; информация о всех соединения с базами данных, осуществленных в среде утилиты SQL Central, содержится в папке Connected Users (). Это дает отдельному пользователю иметь некоторое представление о "текущем моменте" функционирования СУБД.

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

DBA - класс полномочий администратора базы данных. Пользователи имеющий такой класс полномочий пользуется правами администратора базы данных, т. е. они могут производить все манипуляции в базе данных без каких-либо ограничений. В одной базе данных несколько пользователей могут иметь класс полномочий DBA; Resource - класс полномочий, имеющих право создавать такие объекты баз данных, как таблицы данных, представления, хранимые процедуры и функции, а также триггеры; Remote DBA - класс полномочий, имеющих право участвовать в репликации данных.




Рассмотрим технологию регистрации индивидуальных пользователей и групп пользователей.

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

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

ПРИМЕЧАНИЕ

В СУБД SYBASE SQL Anywhere привилегии по манипулированию объектами могут предоставляться пользователями - владельцами объектов и пользователями с классом полномочий DBA. Классы полномочий предоставляются только пользователями с правами администратора базы данных.

В СУБД SYBASE SQL Anywhere реализованы привилегии для таблиц данных, представлений и для хранимых процедур и функций. Привилегии таблиц представлены в (табл. 7).


Создание базы данных


Создание базы производится посредством утилиты DBINIT (см. табл. - ). Покажем, как она используется в SQL Central.

ПРИМЕЧАНИЕ

Действия по созданию новой базы данных можно производить только на ЭВМ-сервере баз данных. На клиентской ЭВМ эти действия выполнить невозможно.

После запуска SQL Central на ЭВМ-сервере баз данных раскройте папку Utilities и выберите мастер Create Database (рис. 25).

Рис.25. Выбор мастера Create Database для создания базы данных

После запуска мастера Create Database вам будет предложено выполнить ряд шагов. Каждый шаг представляется в виде отдельного окна. Заголовок, как правило, но совсем не обязательно, имеет название выполняемого шага. В верхней части окна обычно следует пояснение выполняемого шага. Ниже следует вопрос с предлагаемыми альтернативами. Именно в такой последовательности будем рассматривать шаги, который предлагает выполнить мастер Create Database. По этой же схеме будем обсуждать действия, выполняемые другими мастерами.

Шаг 1. Начальная стадия создание базы данных (рис. 26).

Рис.26. Создание базового файла базы данных

Пояснение. Добро пожаловать в Мастер создания баз данных. Этот Мастер позволяет вам создать файл для хранения базы данных СУБД SQL Anywhere.

Вопрос. В каком каталоге и какое имя файла вы хотите использовать для хранения новой базы данных?

Ниже следует поле, в которое необходимо ввести полное имя файла. Это имя можно также выбрать при помощи кнопки Browse. Назовем создаваемую базу данных Dubl_Biblia. Поместим ее в тот же каталог (папку), что и . Как было сказано в , на ЭВМ-сервере размещается в каталоге с:\database. После заполнения поля окна щелкните мышью по кнопке Далее для выполнения следующего шага.

Шаг 2. Выбор параметров журнала изменений базы данных (рис. 27).

Рис.27. Выбор параметров журнала изменений базы данных

Пояснение. Если вы выберете режим использования журнала изменений базы данных (transaction log), то вы можете поместить его в отдельном каталоге (по умолчанию журнал размещается в том же каталоге, что и базовый файл базы данных).

Вопрос. Будете ли вы использовать журнала изменений базы данных?

Нахождение переключателя в состоянии No transaction log является отрицательным ответом на поставленный вопрос. Если переключатель установлен в положение Maintain a log file in this path and file , то означает, что база данных будет использовать журнал изменений. При этом в единственном поле окна предлагается имя файла, в котором будет храниться журнал. Оно может быть изменено вручную или при помощи кнопки Browse.

В целях повышения надежности хранения и восстановления базы данных целесообразно размещать журнал изменений на другом жестком диске сервера или другой ЭВМ вычислительной сети.

После проведенных манипуляций переходим к очередному шагу.




Шаг 3. Определение зеркального файла для журнала изменений базы данных (рис. 28).



Рис.28. Определение зеркального файла для журнала изменений базы данных

Пояснение. Вы можете использовать зеркальный файл для журнала изменений базы данных (mirror log file) с тем же именем, но размещенном на другом устройстве. Это позволит предотвратить потерю базу данных при возникновении жесткого сбоя (отказе жесткого диска), но может привести к снижению скорости выполнения операций с базой данных.

Вопрос. Будете ли вы использовать зеркальный файл для журнала изменений базы данных?

Установленный флажок Maintain a mirror log file является положительным ответом на поставленный вопрос. При этом поле окна и кнопка Browse позволяют вам задать полное имя зеркального файла.

Мы не будем использовать зеркальный файл и поэтому приступаем к следующему шагу.

Шаг 4. Установка атрибутов базы данных (рис. 29).



Рис.29. Установка атрибутов базы данных

Вопрос. Какие атрибуты вы хотите определить для файлов новой базы данных?

Альтернативы задаются флажками:

Encypt the Database - шифрование базы данных; Ignore Trailing Blanks in Comparisons - игнорирование конечных пробелов при сравнениях строк; Case sensitivity for all names and values - игнорирование разницы между строчными и прописными буквами.

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

Пояснение. Для владельца некоторых системных объектов (системных таблиц) будет определено имя "dbo" (аббревиатура от слов Database object). По своему усмотрению можете заменить его.

Для нас это имя пока не имеет никакого смысла и поэтому ничего менять не будем.

Выполнив шаг 4, переходим к шагу 5 при помощи кнопки Далее.

Шаг 5. Установка размера страницы файлов базы данных (рис. 30).



Рис.30. Установка размера страницы файлов базы данных

Вопрос. Какой размер станицы вы хотите установить для файлов новой базы данных?

Альтернативы задаются переключателем. Выбор страницы желательно выбрать кратным размеру кластера, чтобы сократить время считывания необходимых данных.

После того как выбор произведен делаем следующий шаг.

Шаг 6. Выбор кодовой таблицы для базы данных (рис. 31).





Рис.31. Выбор кодовой таблицы для базы данных

Вопрос. Какую кодовую таблицу вы хотите выбрать для новой базы данных?

Альтернативы предлагаются в виде списка кодовых таблиц. Для представления текстовой информации на русском языке вам предлагаются несколько вариантов. На рис. 31 показан выбор 866-й кодовой таблицу.

Кодовая таблица выбрана, теперь приступаем к выполнению очередного шага.

Шаг 7. Подтверждение готовности к созданию новой базы данных (рис. 32).



Рис.32. Подтверждение готовности к созданию новой базы данных

Пояснение. Вы готовы к созданию базы данных с базовым файлом C:\DATABASE\DUBL_BIBLIA.DB. Вы можете осуществить подключение к базе данных после того как она будет создана.

Установленный флажок Connect to the database означает ваше согласие на подключение базой данных. Мы не будем подключаться сразу, сделаем это позже с клиентской ЭВМ.

Все ранее произведенные действия были подготовительными. Они были предназначены для задания значений параметров утилиты DBINIT (см. табл. - ). Теперь, когда все готово к ее запуску следует нажать на кнопку Готово для начала непосредственного создания новой базы данных. Протокол этого процесса отражается в окне очередном открывающемся окне мастера Create Database утилиты SQL Central (рис. 33).



Рис.33. Протокол процесса создания новой базы данных

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

Если создание базы данных осуществляется в среде утилиты ISQL, то тогда в ее окне Comman () следует выполнить следующий SQL-оператор:

//создание базы данных в утилите ISQL DBTOOL CREATE DATABASE 'c:\Database\Dubl_Biblia.db' /*Полное имя базового файла*/ TRANSACTION LOG //полное имя файла для TO // журнала изменений 'D:\Log_db\Dubl_Biblia.log' IGNORE CASE /* не делать разницы между строчными и прописными буквами */ //ENCRYPT /* признак шифрования, по необходимости */ PAGE SIZE 1024 /* размер страницы */ COLLATION '866rus' /*тип кодовой страницы */ TRAILING SPACES /* признак игнорирования конечных пробелов при сранениях строк */

Протокол процесса создания базы данных в случае применения утилиты ISQL выводится в ее окно Statistics.



ПРИМЕЧАНИЕ

При создании новой базы данных в ней всегда автоматически регистрируется всего один пользователь - DBA с паролем SQL. В дальнейшем пароль может быть изменен. Пользователь DBA имеет класс полномочий DBA (), т.е. пользуется всеми правами администратора базы данных.

В созданной базе данных теперь можно создавать ее объекты. Это станет предметом обсуждения в следующих главах.


Создание базы данных и определение ее объектов


Одним из важных этапов жизненного цикла любой базы данных является ее создание и определение ее объектов. Для решения этих задач пользователям SYBASE SQL Anywhere предоставляется удобное средство - утилита SQL Central. Вопросам ее применения и посвящается предлагаемая глава. Однако преимуществами данной утилиты могут воспользоваться не все пользователи. Такая возможность предоставляется только тем из них, кто использует SQL Anywhere в операционных системах Windows 3.x, Windows 95 или Windows NT. Однако некоторые пользователи применяют версии SQL Anywhere, разработанные под операционные системы OS\2, QNX, AIX, NetWare и другие. Для такой категории пользователей в данной и последующих главах показано как возможности утилиты SQL Central можно реализовать в доступной им утилите ISQL.

В данной и последующих главах, посвященных SYBASE SQL Anywhere, широко применяются SQL-операторы. В дальнейшем SQL-операторы часто будем называть просто операторами, если не требуется явного указания, что они имеют отношение к языку SQL. Все примеры операторов содержат комментарии, которые, согласно синтаксиса языка, начинаются с двух символов "//" для комментариев в одну строку или заключены в символы "/*" и "*/" для многострочных комментариев. Текст комментария может быть вставлен в тело оператора. Служебные слова операторов будут представляться только заглавными буквами, а остальные - прописными. Ниже приводится простой пример SQL-оператора:

//Пример SQL-оператора SELECT /* это служебное слово, обозна- чающее название оператора */ Code_book, .Author /* список полей оператора SELECT */ FROM Stepanov.Books /*данные выбираются из таблицы Books, владельцем которой является пользователь Stepanov */

Как видно из примера, элементы операторов представлены более крупным шрифтом по сравнением с комментариями, чтобы за деревьями не просмотреть леса. Это искусственный прием. В приложениях все будет представляться одним шрифтом. Правда в тестовых редакторах некоторых приложений, например SQL Central, служебные слова выделяются другим цветом.



Создание индексов


В базах данных для ускорения поиска информации в таблицах применяются специальные структуры - индексы. При отсутствии индексов сканирование записей таблицы осуществляется последовательно в порядке их физического размещения. Наличие индексов предполагает, что анализ записей производится в соответствие с возрастанием/убыванием значений полей, из которых сформирован индекс таблицы. Пользователи могут создать индексы, состоящие из любого числа полей таблицы в различных их сочетаниях. Формировать индексы таблицы имеют право:

владелец таблицы; пользователи, которые имеют привилегию REFERENCES () работы с таблицей; пользователи с классом полномочий DBA ().

Некоторые индексы создаются автоматически. Такие индексы формируются при определении первичных ключей и совокупностей полей с признаками уникальности.

Рассмотрим пример создания индексов. Одним из запросов администратора базы данных является выдача списка книг требуемого издательства, начиная с последних поступлений (). Для сокращения времени его выполнения необходимо создать в таблице Books индекс по возрастанию значений поля Publisher и убыванию значений поля Start_date. Назовем этот индекс Publ_Start_date. Формирование индекса следует начать с установления в утилите SQL Central соединение с базой данных Dubl_Biblia. Затем необходимо запустить мастер Add index, который вложен в папки Tables - Books - Indexes. Этот мастер предлагает выполнить ряд шагов. Каждый шаг представляется в виде отдельного окна. Работу мастера Add index рассмотрим по ранее применявшейся схеме () с разъяснением выполнения последовательности шагов, с анализом каждого шага.

Шаг 1. Начальная стадия создание индекса таблицы данных (рис. 58).

Рис. 58. Создание индекса таблицы данных

Пояснение. Добро пожаловать в Мастер создания индексов. Этот Мастер позволяет вам создать новый индекс таблицы данных.

Индексы, формируемые пользователями СУБД SQL Anywhere, предназначены для сокращения времени поиска данных.

Вопрос. Какое имя вы хотите дать новому индексу?

Ниже следует поле, в которое следует ввести имя создаваемого индекса. В нашем случае - это Publ_Start_date. После заполнения поля окна щелкните мышью по кнопке Далее для выполнения следующего шага.




Шаг 2. Определение условия формирования индекса (рис. 59).



Рис. 59. Определение условия формирования индекса

Вопрос. Какие поля будут использоваться при формирования индекса?

В приведенном ниже списке полей таблицы необходимо выделить одно из полей щелкнуть мышью по одной из кнопок.

Кнопка Add ASC позволяет включить в условие формирования индекса использование значений выделенного поля по возрастанию. Сделанный выбор отображается в окне Curent index. В случае необходимости использования значений выделенного поля по убыванию следует "нажать" на кнопку Add DESC. Кнопка Remove предназначена для исключения из индекса значений выделенного поля. Если требуется исключить из индекса все поля, воспользуйтесь кнопкой Remove All. Просмотреть свойства выделенного поля позволяет кнопка Details.

На рис. 59 представлен результат выделения поля Publisher с последующим использованием кнопки Add ASC и выбора поля Start_date "иажатия" кнопки Add DESC. В результате этого будет сформирован индекс по возрастанию названий издательств (поле Publisher). В пределах одного издательства даты поступления книг в библиотеку будут отсортированы по убыванию.

После задания условия формирования индекса переходим к следующему шагу при помощи кнопки Далее.

Шаг 3. Выбор области базы данных () для хранения индекса (рис. 60).



Рис. 60. Выбор области базы данных для хранения индекса

Пояснение 1. Вы можете сохранить индекс в области базы данных отличной от той, где размещена таблица данных.

Вопрос 1. В какой области базы данных следует сохранить индекс?

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

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

Вопрос 2. Вы хотите, чтобы индекс был уникальным?

Для ответа на этот вопрос предназначен флажок The index will be unique. В нашем случае это флажок должен находиться в сброшенном состоянии. Дело в том, что в один и тот же день в библиотеку могут поступить несколько книг одного издательства. По этой причине уникальность совокупности полей Publisher и Start_date не допустима.

Теперь следует "нажать" кнопку Далее для подтверждения готовности к созданию нового индекса.

Шаг 4. Подтверждение готовности к созданию нового индекса (рис. 61).





Рис. 61. Подтверждение готовности к созданию нового индекса

Пояснение 1. Вы можете включить комментарий для нового индекса.

Ниже располагается поле для ввода комментария для создаваемого индекса.

Пояснение 2. Новый индекс Publ_Start_date будет сформирован по возрастанию значений поля Publisher и убыванию значений поля Start_date. Щелкните по кнопке Готово для завершения формирования индекса.

Все действия, выполненные до сих пор в мастере Add index, были предназначены для определения параметров SQL-оператора CREATE INDEX. После щелчка мышью по кнопке Aioiai начнется выполнение этого оператора. Его результатом будет появление индекса Publ_Start_date. Данный факт выражается в появлении одноименного элемента в папке Indexes. (см. рис. 62).



Рис. 62. Обновленное содержание папки Indexes



ПРИМЕЧАНИЕ

Независимо от того, кто создал индекс, его владельцем всегда объявляется владелец таблицы, для которой он создан.

Для создания такого индекса Publ_Start_date в утилите ISQL требуется выполнить следующие SQL-операторы:

// Создание нового индекса CREATE INDEX Publ_Start_date ON Stepanov.Books ("Publisher" /* ASC */, Start_date DESC) // IN SYSTEM; // при необходимости указывается //область базы данных, где будет размещен индекс/ // Комментарий к индексу COMMENT ON INDEX Stepanov.Publ_Start_date is ' Составной индекс по полям Publisher и Start_date для ускорения выполнения запросов, использующих в качестве ключей поиска название издательства и дату поступления книг в библиотеку '

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

Для того, чтобы в ISQL убедиться в появлении нового индекса требуется проанализировать системное представление SYS.SYSINDEXES.

Индексы удаляются из базы данных только при явном указания об этом. В SQL Central для выполнения этого действия достаточно выделить требуемый индекс и нажать клавишу Del. В ISQL для удаления индекса необходимо выполнить оператор вида:

// Удаление индекса DROP INDEX Publ_Start_date

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

СУБД SYBASE SQL Anywhere позволяет формировать одиночные и составные индексы с указанием индивидуального порядка использования значений выбранных полей (по возрастанию/убыванию). Это позволяет создавать сложные индексы, способные удовлетворить в большинстве случаев требования пользователей.


Создание представлений


Представления (view) - это одно из мощных средств языка SQL, предназначенное для реализации механизм подсхем пользователей базы данных. Представления позволяют скрыть от пользователей схему базы данных. Они представляют собой хранимые в базе данных запросы, выраженные операторами SELECT. На базе одних представлений могут быть созданы новые представления, которые наследуют все свойства базовых представлений. Формировать представления могут пользователи с привилегиями SELECT для используемых в представлениях таблиц (базовых таблиц).

Для пользователя представления предстают как объекты очень похожие на таблицы данных. Это выражается тем, что:

обращение к представлениям осуществляется также как и к таблицам; ко всем представлениям применим оператор SELECT; для некоторых представлений могут применяться операторы INSERT, UPDATE и DELETE.

Однако в соответствие со стандартом ANSI SQL/89 в SYBASE SQL Anywhere таблицы данных и представления имеют некоторые различия:

запрос, именованный через представление выполняется только в момент обращения к представлению; для представления невозможно определить ограничения целостности и первичный ключ; в операторе SELECT, на базе которого создается представление, нельзя устанавливать сортировку его результатов; не ко всем представлениям могут применяться операторы INSERT, UPDATE и DELETE.

Представление может быть модифицировано (т.е. по отношении к нему можно использовать операторы INSERT, UPDATE и DELETE) в том, и только в том случае, если для оператора SELECT, на базе которого создано представление, выполняются каждое из следующих специфических условий:

не используется служебное слово DISTINCT; при выполнении запроса данные извлекаются только из таблицы; в списка полей этого оператора отсутствуют арифметические выражения. Элементами списка могут быть только поля базовой таблицы или базового представления. В свою очередь на поля этого представления накладывается такое же ограничение; в запросе не применяются подзапросы; для результирующих данных не определено группирование.




Создадим представление Code_books_1_3 для базы данных Dubl_Biblia, содержимое которого соответствует . Это представление базируется на операторе SELECT (базовый оператор представления) вида:

// оператор SELECT представления Code_bookы_1_3 SELECT //список полей оператора SELECT Books.Code_book, Books.Author, Books.Number FROM Stepanov.Books /*данные выбираются из таблицы Stepanov.Books */ WHERE Code_book>=1 AND //условие Code_book<=3 //выборки.данных

Читателям предлагается для проверки выполнить этот оператор в утилите ISQL.

В утилите SQL Central для определения новых представлений пользователю предлагается шаблон Add View(Template) и мастер Add View(Wizard). Оба они являются элементами папки Views (). Использование шаблона приводит к вызову текстового редактора утилиты. При этом в его окне будет представлена заготовка (шаблон) оператора CREATE VIEW - оператора, создающего представление (рис. 70).



Рис. 70. Окно текстового редактора утилиты SQL Central с заготовкой (шаблоном ) оператора CREATE VIEW

Для формирования заготовки в полноценный оператор необходимо в соответствии с подсказами добавить название представления, необязательные наименования полей и имя владельца представления, а также базовый оператор SELECT.

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

При выборе пункта Execute Script осуществляется синтаксическая проверка операторов, содержащихся в окне. Без ее положительных результатов содержимое окна невозможно записать в базу данных.

Использование пункта Save To File позволяет записать содержимое окна в файл. Считывание файла в окно редактора производится при помощи пункта Open From File.

Пункт Print предназначен для печати содержимого окна, а пункт Close - для выхода из редактора.

Кроме шаблона, в утилите SQL Central для создания представления может применяться еще и соответствующий мастер Add View(Wizard). Рассмотрим шаги, которые предлагает выполнить этот мастер.

Шаг 1. Начальная стадия создания представления (рис. 71).





Рис. 71. Создание представления

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

Вопрос 1. Какое наименование вы хотите определить для нового представления?

Ниже следует поле, в которое следует ввести имя создаваемого представления. В нашем случае - это Code_books_1_3.

Вопрос 2. Кто будет владельцем представления?

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

После заполнения полей окна "нажмите" на кнопку Далее для выполнения следующего шага.

Шаг 2. Выбор таблиц данных, используемых в представлении (рис. 72).



Рис. 72. Выбор таблиц данных, используемых в представлении

Вопрос. На базе каких таблиц будут формироваться данные представления?

Ниже приводится полный перечень таблиц базы данных. Их выбор определяется при помощи флажков. Кнопка All позволяет установить все флажки, т. е. осуществить выбор всех таблиц. Кнопка None предназначена для сброса всех установленных флажков, т. е. отмены ранее произведенного выбора.

В нашем случае база данных Dubl_Biblia содержит всего две таблицы данных. Для создаваемого представления требуется только таблица Stepanov.Books, выбор которой отмечен установленным флажком.

Произведя выбор таблицы, щелкните мышью по кнопке Далее для перехода к очередному шагу.

Шаг 3. Выбор полей таблиц данных, на базе которых формируется представление (рис. 73).



Рис. 73. Выбор полей таблиц данных, на базе которых формируется представление



Вопрос. Какие поля будут использоваться при формировании содержимого представления?

Для ответа на поставленный вопрос представляется полный перечень полей ранее выбранных таблиц базы данных. Указание полей осуществляется посредством флажков. Назначение кнопок All и None такое же как и при выполнении предыдущего шага.

В нашем случае для представления Code_books_1_3 требуется три поля, выбор которых отмечен флажками.

Теперь приступаем к следующему шагу.

Шаг 4. Подтверждение готовности к созданию нового представления (рис. 74).



Рис. 74. Подтверждение готовности к созданию нового представления

Пояснение 1. Вы можете включить комментарий для нового представления.

Ниже располагается поле для ввода комментария для создаваемого представления.

Пояснение 2. Мастер сгенерирует заготовку для следующего представления:

НазваниеCode_books_1_3

Владелец     Stepanov

Щелкните по кнопке Готово для завершения формирования текста представления в редакторе.

После "нажатия" на эту кнопку мастер сформирует заготовку оператора CREATE VIEW и отобразит ее в окне текстового редактора утилиты (рис. 75).



Рис. 75. Отображение заготовки CREATE VIEW в окне текстового редактора утилиты SQL Central

Откорректируем текст заготовки в части базового оператора. Тогда окончательный текст оператора CREATE VIEW примет следующий вид:

//Окончательный текст оператора CREATE VIEW CREATE VIEW Stepanov.Code_books_1_3 AS SELECT Books.Code_book, Books.Author, Books.Number FROM Stepanov.Books WHERE Code_book>=1 AND Code_book<=3

Проверим текст оператора на синтаксис при помощи команды меню File|Execute Script. После ее успешного окончания выходим из текстового редактора. В результате в базе данных появляется новое представление Code_books_1_3. Данный факт выражается в появлении одноименного элемента в папке Views. (см. рис. 76).



Рис. 76. Обновленное содержание папки Views

Для создания представления Code_books_1_3 в утилите ISQL необходимо выполнить оператор CREATE VIEW окончательного вида, приведенный выше. Убедиться в появление нового представления можно, просмотрев список имеющихся в базе данных таблиц и представлений. Он появляется на экране после нажатия на клавишу F7 (). Другим способом проверки наличия в базе данных нового представления является анализ содержимого системного представления SYS.SYSVIEWS. Текст оператора CREATE VIEW можно получить, выполнив следующие SQL-операторы:



// Получение текста представления SELECT Viewtext //поле Viewtext содержит текст представления FROM SYS.SYSVIEWS WHERE Viewname = 'Code_books_1_3' //названия представления /*AND Vcreator = 'Stepanov' ; */ /* если имя представления не уникально, то требуется указать имя его владельца */ //оператор экспорта результатов оператора SELECT OUTPUT TO d:\Log_db\viewtext.sql /* полное имя файла куда осуществляется экспорт текста представления */ FORMAT /* в формате */ ASCII



ПРИМЕЧАНИЕ

При выполнении оператора OUTPUT в формате ASCII все переводы на новую строку исходного текста в формируемый текстовый файл записываются в виде последовательности символов \X0D\X0A.

В SYBASE SQL Anywhere представления создаются оператором CREATE VIEW. Для последующей изменения текста представлений применяется оператор ALTER VIEW. Он заменяет в существующим представлении текст базового оператора. В утилите ISQL в операторе ALTER VIEW каждый раз приходится вводить текст базового оператора. В утилите SQL Central полный текст оператора ALTER VIEW выводится в окне текстового редактора утилиты после двойного щелчка мыши по пиктограмме представления (). В этом случае текст можно отредактировать, используя возможности текстового редактора.

Использовать представления имеют право:

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

Рассмотрим на примере как определяются привилегии для представлений. Для этого установим пользователю Popova привилегию SELECT для представления Code_books_1_3.

В SQL Central для этого следует выполнить следующую последовательность действий:

щелкнуть правой кнопкой мыши по пиктограмме представления Code_books_1_3 (); в появившемся контекстном меню выбрать пункт меню Properties; в открывшемся окне Code_books_1_3 Properties - окне свойств представления выбрать закладку Permissions: в закладке Permissions установить для пользователя Popova привилегию SELECT.



Внешний вид закладки Permissions очень похож на одноименную закладку окна свойств таблицы (). Работа с этими закладками осуществляется одним и тем же способом.

Для достижения того же результата в утилите ISQL требуется выполнить следующий SQL-оператор:

/* Установка привилегии SELECT для представления Code_books_1_3 пользователю Popova */ GRANT SELECT ON Stepanov.Code_books_1_3 TO Popova

Теперь пользователь Popova может использовать оператор SELECT для представления Stepanov.Code_books_1_3.

После применения к представлениям операторов INSERT и DELETE количество записей в них изменяется. Тоже самое может произойти при выполнении оператора UPDATE для представлений, использующих указание выборки данных WHERE в базовом операторе. Это может произойти в том случае, когда в результате модификации записей их содержимое перестанет удовлетворять условию WHERE - условию включения данных записей в представление.

Изменение числа записей после операторов INSERT и DELETE очевидно, а после WHERE нет. Пользователь может не иметь никакой информации об условии WHERE. Для контроля за такой ситуации в тексте оператора в конец текст оператора CREATE/ ALTER VIEW следует добавить фразу WITH CHECK OPTION. Тогда при попытке модификации записей представления, которые могут привести к их исключению из ее состава, выдается сообщение о возникновении исключительной ситуации. Покажем это на примере.

Проведем модификацию представления Code_books_1_3. Для этого выполним оператор:

// Модификация представления UPDATE Stepanov.Code_books_1_3 SET Code_book = 100 WHERE Code_book = 2

Исходное и модифицированное содержимое этого представления приведено в табл. 21, 22.


Привилегии, применимые к таблицам данных


Название привилегииОписание привилегии

ALTERПозволяет модифицировать структуру таблиц данных и создавать для этой таблицы триггеры
DELETEРазрешает удалять записи из таблиц и представлений
INSERTОпределяет правомочность добавление новых записей в таблицы и представления
REFERENCESМожно создавать индексы таблицы и внешние ключи, которые ссылаются на таблицу. Привилегия может быть назначена как на все, так и на совокупность полей таблицы
SELECTПредоставляет возможность проведения выборки данных из таблиц и представлений, а также создания представлений. Привилегия может быть назначена как на все, так и на совокупность полей таблицы
UPDATEПозволяет производить модификацию записей таблиц и представлений. Эта привилегия может быть установлена как для всех полей таблицы, так и их некоторого подмножества. Привилегия может быть назначена как на все, так и на совокупность полей таблицы
ALLУстанавливает все привилегии по манипулированию таблицей

Для хранимых процедур и функций определена только одна привилегия - EXECUTE. Она предоставляет пользователю возможность запускать хранимые процедуры или функции.

Для представлений могут быть установлены привилегии DELETE, INSERT, SELECT и UPDATE. Назначение этих такое же как и у одноименных привилегий таблиц данных, за исключением того, что привилегии SELECT и UPDATE не могут быть установлены для отдельных полей представлений.

Привилегии могут быть как индивидуальными, так и групповыми. Индивидуальные привилегии устанавливаются для отдельных пользователей, а групповые - для групп пользователей.

Рассмотрим процедуру регистрации индивидуальных пользователей и групп пользователей на примере ранее созданной базы данных Dubl_Biblia. Произведем регистрацию администратора базы данных и пользователей - библиотекарей. В качестве администратора назначим пользователя Степанова Ю.Л., а библиотекарями - пользователей Петрову Ю.П., Иванову С.В., Сидорову О.К. и Попову И.Н. Назначим им следующие пользовательские имена: Stepanov, Petrova, Ivanova, Sidorova и Popova, соответственно.





ПРИМЕЧАНИЕ
Регистрацию как отдельных пользователей, так и групп пользователей может производить только пользователь с правами администратора базы данных.
Сначала рассмотрим как эта процедура выполняется в утилите SQL Central. Для ее проведения необходимо произвести соединение с базой данных. Пока в базе данных Dubl_Biblia хранится информация только о пользователе DBA, имеющего пароль SQL. Под его именем и подключимся к базе данных.
Зарегистрируем сначала администратора базы данных Dubl_Biblia - пользователя под именем Stepanov. Для этого раскройте папку Users & Groups (рис. 34). В результате в левой панели будут отображены имена всех зарегистрированных индивидуальных пользователей и названий групп пользователей.

Рис.34. Содержимое раскрытой папки "User & Groups" в утилите SQL Central
Как видно из рис. 34, в новой базе данных зарегистрирован только пользователь DBA и имеется две группы пользователей PUBLIC и dbo. Имя последней задается при создании базы данных (). Папка содержит Users & Groups также мастера Add user и Add Group. Первый из них предназначен для регистрации новых пользователей, а второй - для создания групп пользователей. Воспользуемся мастером Add user, щелкнув по его пиктограмме мышью. Действия, проводимые в нем, будем описывать по схеме (см. рис. ) в виде последовательности шагов, принятой при создании базы данных.
Шаг 1. Начало регистрации нового пользователя базы данных (рис. 35).

Рис.35. Начало регистрации нового пользователя базы данных
Пояснение. Добро пожаловать в Мастер регистрации пользователей. Этот мастер позволяет вам осуществить регистрации нового пользователя базы данных.
Вопрос 1. Под каким именем вы хотите зарегистрировать нового пользователя?
Ниже следует поле, в которое следует ввести имя пользователя. В нашем случае это имя Stepanov.
Вопрос 2. Какой пароль вы хотите присвоить новому пользователю?
Текст пароля вводится в поле Passworsd. В поле Confirm необходимо подтвердить пароль. В рассматриваемом случае в качестве пароля используется символ s.
Флажок User/Group is allowed to connect определяет право соединения регистрируемого пользователя с базой данных. В рассматриваемой версии SYBASE SQL Anywhere регистрация пользователей, не имеющих такого права, не имеет смысла. Этой флажок остался от предыдущих версий.
После выполнения предлагаемых действий щелкните мышью по кнопке Далее для выполнения следующего шага.
Шаг 2. Выбор класса полномочий (рис. 36).



Рис.36. Выбор класса полномочий
Вопрос. Какими классами полномочий, которыми будет обладать новый пользователь?
Каждому классу полномочий соответствует одноименный флажок. По умолчанию для пользователя устанавливается флажок Remote DBA, соответствующий классу полномочий Remote DBA (см. ). В нашем случае для администратора базы данных Dubl_Biblia необходимо установить еще и флажок DBA, соответствующий классу полномочий DBA (см. ).
Выбрав классы полномочий, переходим к следующему шагу.
Шаг 3. Подтверждение регистрации нового пользователя (рис. 37).

Рис.37. Подтверждение регистрации нового пользователя
Пояснение. В используемой базе данных не зарегистрирован издатель. Вы можете зарегистрировать данного пользователя в качестве издателя или сделать это в любое другое время.
Флажок User is the publisher позволяет зарегистрировать пользователя как издателя в процессе репликации данных. В большом поле в центре окна вы можете записать соответствующий комментарий.
Все действия выполняемый в шагах 1- 3, являются подготовительными. Их цель состояла в формировании параметров для SQL-операторов, осуществляющих регистрацию пользователей. Для подтверждения правильности ранее введенных параметров нажмите кнопку Готово. После этого произойдет окончательное формирование соответствующих SQL-операторов, которые будут отправлены на сервер. В случае успешного их выполнения сервером, в базе данных будет зарегистрирован пользователь Stepanov. Таким образом в базе данных теперь имеется два пользователя с полномочиями администратора базы данных.
Теперь в базе данных Dubl_Biblia имеется информация о ее администраторе - пользователе Stepanov. Для регистрации в качестве пользователей библиотекарей (пользователей Petrova, Ivanova, Sidorova и Popova) проведем аналогичные действия. В качестве пароля для каждого из библиотекарей будем использовать первую букву в имени пользователя. Единственное отличие состоит только в том, для библиотекарей не будет определено никаких классов полномочий. В результате этого в базе данных будет зарегистрировано еще 4 пользователя (см. рис. 38).



Рис.38. Обновленный состав пользователей базы данных
Для библиотекарей не был установлен класс полномочий DBA. По этой причине при их подключении в утилите SQL Central к базе данных Dubl_Biblia будет выдаваться предупреждение. Оно гласит от том, что пользователь не является администратором базы данных, в связи с чем доступ его к отдельным папкам утилиты будет ограничен.
Регистрация пользователей в среде утилиты ISQL осуществляется выполнением SQL-операторов GRANT. Для того, чтобы зарегистрировать пользователя c именем Stepanov как администратора базы данных необходимо выполнить следующую последовательность SQL-операторов:
/* Регистрация пользователя "Stepanov" с паролем "s", с предоставлением ему права соединения с базой данных */ GRANT CONNECT TO Stepanov IDENTIFIED BY s; /* Установление пользователю "Stepanov" класса полномочий DBA */ GRANT DBA TO Stepanov; /* Установление пользователю "Stepanov" класса полномочий Remote dba */ GRANT Remote DBA TO Stepanov; /*Определение комментария для пользователя "Stepanov"*/ COMMENT ON USER Stepanov IS 'Пользователь Stepanov является администратором базы данных Dubl_Biblia'
Для регистрации библиотекарей в качестве пользователей требуется выполнить следующие SQL-операторы:
/* Регистрация пользователей - библиотекарей с предоставлением им права соединения с базой данных */ GRANT CONNECT TO Petrova IDENTIFIED BY p; GRANT CONNECT TO Ivanova IDENTIFIED BY i; GRANT CONNECT TO Sidorova IDENTIFIED BY s; GRANT CONNECT TO Popova IDENTIFIED BY p; /*Определение комментария для пользователей - библитотекарей */ COMMENT ON USER Petrova IS 'Библиотекарь Петрова Ю.П. '; COMMENT ON USER Ivanova IS 'Библиотекарь Иванова С.В.'; COMMENT ON USER Sidorova IS 'Библиотекарь Сидорова О.К.'; COMMENT ON USER Popova IS 'Библиотекарь Попова И.Н.'
Если вы не можете воспользоваться утилитой SQL Central, убедиться в том, регистрация пользователей была успешно осуществлена можно и в среде утилиты ISQL. Для этого следует считать информацию из системного представления SYS.SYSUSERLIST, что можно сделать путем выполнения следующего запроса:


/* Получение информации о зарегист- рированных пользователях в ISQL */ SELECT * FROM SYS.SYSUSERLIST
Пользователи базы данных могут быть объединены в группы. Необходимость создания групп обусловлена удобством управления привилегиями пользователей. Дело в том, что эта процедура, применяемая в отдельности к каждому из индивидуальных пользователей, является весьма утомительной. Особенно остро это ощущается при большом количестве пользователей и необходимости быстро изменить их права. Для решения этой задачи применяется объединение равноправных пользователей в группы. Точно также решаются данный вопрос и других системах, где защита от несанкционированного доступа имеет большое значение. Например, именно так обстоит дело в многопользовательских операционных системах, базах данных и вычислительных сетях. При этом на уровне группы легко меняются привилегии пользователей-членов групп. Такие пользователи имеют как индивидуальные, так и групповые привилегии. Индивидуальные привилегии устанавливаются для отдельных пользователей, а групповые - для групп пользователей. В отличие от привилегий, классы полномочий в SYBASE SQL Anywhere устанавливаются только индивидуально, для каждого пользователя в отдельности.
Для удобства управления привилегиями пользователей в базе данных Dubl_Biblia, объединим всех библиотекарей в группу пользователей LIBRARIANS (библиотекари).
Для образования новой группы пользователей в SQL Central необходимо использовать мастер Add Group (). Этот мастер выполняет ряд шагов, которые описаны ниже.
Шаг 1. Начало создания новой группы пользователей базы данных (рис. 39).

Рис.39. Начало создания новой группы пользователей базы данных
Пояснение. Этот мастер позволяет вам создать новую группу пользователей базы данных.
Вопрос 1. Под каким именем вы хотите создать новую группу пользователей?
Ниже следует поле, предназначенное для задания наименования группы пользователей. Для библиотекарей мы создаем группу LIBRARIANS.
Вопрос 2. Какой пароль вы хотите присвоить новой группе?
В рассматриваемой версии при создании группы пользователей поля Passworsd и Confirm, а также флажок User/Group is allowed to connect не имеют никакого значения. Их значения не считываются .Эти элементы являются наследством предыдущих версий. По этой причине оставляет вышеуказанные поля не заполненными и снимаем флажок User/Group is allowed to connect.
Шаг 2 и шаг 3 данного мастера точно такие же как и у мастера Add user. (см. рис. , ). Кроме комментария в шаге 3, остальные данные на этих шагах не имеют смысла. В связи с этим в шаге 2 сразу "нажмем" на копку Далее. Наличие данных бессмысленных шагов объясняется наследственностью предыдущих версий.
После завершения работы с мастером Add Group в базе данных появляется еще одна группа пользователей - группа LIBRARIANS. При этом в папку Users & Groups () будет добавлена пиктограмма группы пользователей - LIBRARIANS.
Для того, чтобы создать такую группу пользователей в утилите ISQL требуется выполнить следующие SQL-операторы:


/* Регистрация нового пользователя LIBRARIANS без определения пароля /* GRANT CONNECT TO LIBRARIANS; /* Установка класса полномочий Remote DBA, т. к. в шаге 2 сразу перешли к следующему шагу */ GRANT Remote DBA to LIBRARIANS; /* Предоставление пользователю возможности иметь подчиненных пользователей*/ GRANT GROUP TO LIBRARIANS; COMMENT ON USER LIBRARIANS IS 'Группа библиотекарей'
Для того, чтобы удостовериться в утилите ISQL в том, что группа LIBRARIANS была создана и она пока не объединяет ни одного пользователя необходимо считать информацию из системных представлений SYS.SYSUSERLIST и SYS.SYSGROUPS.
Как видно из вышерассмотренных SQL-операторов, группы пользователей фиксируются в базе данных таким же образом как и индивидуальные пользователи. Однако отсутствие пароля не дает возможность осуществить соединение с использованием в качестве имени пользователя наименования группы.
Только что созданная группа LIBRARIANS не объединяет пока ни одного пользователя. Включим в ее состав зарегистрированных библиотекарей.
В SQL Central для выполнения этой задачи следует выделить пиктограмму пользователя, включаемого в группу, и удерживая левую кнопку мыши перетащить ее к пиктограмме группы. Объединим таким образом всех библиотекарей в группу LIBRARIANS. После этого щелкнем мышью по пиктограмме LIBRARIANS. Тогда в правой панели утилиты будет показан состав группы пользователей LIBRARIANS (рис. 40). При этом в левой для дальнейших рассуждений раскрыта вся иерархия групп пользователей.

Рис.40. Состав группы пользователей LIBRARIANS
В утилите ISQL такого же эффекта позволяет достичь выполнение ниже приведенных SQL-операторов:
/*Включение пользователей - билиотекарей в группу LIBRARIANS */ GRANT MEMBERSHIP IN GROUP LIBRARIANS TO Ivanova; GRANT MEMBERSHIP IN GROUP LIBRARIANS TO Petrova; GRANT MEMBERSHIP IN GROUP LIBRARIANS TO Popova; GRANT MEMBERSHIP IN GROUP LIBRARIANS TO Sidorova
Проверить результаты включения библиотекарей в группу LIBRARIANS в среде ISQL можно, обратившись к системному представлению SYS.SYSGROUPS.
Теперь привилегии, устанавливаемые для группы LIBRARIANS, автоматически распространяются на всех пользователей - библиотекарей, входящих в группу.
Любой отдельный пользователь, также как и группа пользователей, может входить в состав нескольких групп. В свою очередь каждая группа может включать в качестве своих членов несколько пользователей и групп. Члены группы наследуют привилегии, установленные во всех группах, в которые они входят.
При создании базы данных в ней автоматически создаются три пользовательские группы: SYS, dbo и PUBLIC. О них коротко упоминалось при рассмотрении утилиты ISQL () и при обсуждении создания базы данных (). Группа SYS выступает как владелец всех системных таблиц и представлений. (Следует напомнить, что владельцами объектов являются пользователи их создавшие.) Группа dbo введена в состав баз данных СУБД SQL Anewhere для обеспечения совместимости с базами данных СУБД SYBASE SQL Server. Эта группа является владельцем представлений, созданных на основе системных таблиц и представлений. Представления группы dbo имеют такие же названия, содержат те же поля и хранят такую же информацию, что и одноименные системные таблицы и представления СУБД SYBASE SQL Server. В объектах, владельцами которых являются группы SYS и dbo, хранится вся служебная информация о базе данных.
В пользовательскую группу PUBLIC входят все регистрируемые в базе данных отдельные пользователи и группы пользователи. Пользователи включаемые затем в другие группы тем не менее остаются членами группы PUBLIC. В этой группе установлена привилегия SELECT () для некоторых системных таблиц и всех системных представлений. Поэтому любой пользователь имеет возможность считать некоторую информацию о базе данных.
В базах данных СУБД SQL Anywhere информация о вхождении отдельных пользователей и групп пользователей в состав других групп хранится в системном представлении SYS.SYSGROUP. На основании информации из этого представления составлена схема взаимосвязей групп пользователей для базы данных Dubl_Biblia (рис. 41).

Рис.41. Схема взаимосвязей групп пользователей базы данных Dubl_Biblia
Из рис. 41 видно, что пользователь DBA имет привилегии, определенные в группах SYS, dbo и PUBLIC. На пользователей Ivanova, Petrova, Popova и Sidorova распространяются привилегии, установленные в группах SYS, dbo , PUBLIC и LIBRARIANS.

Перечень символьных типов


Тип данныхНазначениеРазмер

CHARСтроковый типдо 32767 байт. по умолчанию 1 байт
CHARACTERТоже, что и CHAR
CHARACTER VARYINGТоже, что и CHAR 
VARCHARТоже, что и CHAR 
LONG VARCHARСимвольный тип произвольной длины. Аналог МЕМО-полям в dBase, FoxPro, AccessДлина произвольная. Ограничена максимальным размером файлов базы данных (2 гигобайта)
TEXTТоже, что и LONG VARCHAR 

Данные символьных типов представляются двоичными кодами. То, как они отображаются на экранах мониторов или распечатках принтера определяется так называемыми кодовыми таблицами. СУБД SYBASE SQL Anywhere поддерживает более 50 кодовых таблиц. Они позволяют отображать текстовую информацию символами различных алфавитов, начиная от английского, русского, греческого, испанского и кончая китайским и японским. Информация об имеющихся кодовых таблицах хранится в системной таблице SYS.SYSCOLLATION. Для извлечения из нее данных достаточно выполнить оператор

SELECT * FROM SYS.SYSCOLLATION

Для того, чтобы получить информацию о кодовой таблице используемой в базе данных необходимо воспользоваться утилитой DBINFO (см. табл. - ). Для этого в утилите ISQL следует запустить ее на выполнение следующим образом:

/*Получение информации о базе данных Dubl_Biblia*/ DBTOOL DBINFO DATABASE 'c:\database\dubl.db' //полное имя базового файла TO 'c:\database\dbinfo.txt' /*полное имя файла для записи результата */ USING 'UID=Stepanov; PWD=S' /*строка пара- метров соединения */

При использовании символьных данных нужно проверить как отображается символьная информация, хранимая в базе данных на вашей ЭВМ. На разных ЭВМ, в разных операционных системах и даже в разных приложениях она может визуально представляться по - разному. Например, автор при создании базы данных Biblia столкнулись со следующим фактом. При использовании кодовой странице 866RUS текстовые данные, хранимые в этой базе данных, нормально отображались символами русского алфавита в утилите ISQL. При считывании этих же данных через интерфейс ODBC в системах Access и Borland Delphi на экране появлялась непонятная абракадабра. Только после настройки параметров источника данных (было заполнено поле Translator Name - ) проблема была решена.

5.3.2. Числовые типы

Числовые типы предназначены для обозначения целых, вещественных и денежных типов. Представители числовых типов приведены в табл. 9.



Перечень числовых типов


Тип данныхДиапазон значенийТочность - число знаков после запятойРазмер

INTEGERот -2 147 483 648 до +2 147 483 64704 байта
INTТоже, что и INTEGER  
SMALLINTот -32 768 до +32 76702 байта
REALот -3.4 e-38 до 3.4 e+38до 64 байта
FLOATТоже, что и REAL  
DOUBLEот -1.797 e-308 до +1.797 e+308до 158 байт
TINYINTот 1 до 25501 байт
DECIMALчисла состоящие из N цифр c M цифрами в дробной части. По умолчанию N=30, M=6Mсколько требуется
NUMERICТоже, что и DECIMAL  
MONEYДля хранения денежных величин. Допустимо значение NULL. Числа из 20 цифр, с 4 цифрами после запятой4 
SMALLMONEYДля хранения денежных величин. Допустимо значение NULL.. Числа из 10 цифр, с 4 цифрами после запятой4 

5.3.3. Типы дата/время

Типы дата/время предназначены для хранения времени, дат и дат совместно с временем. Такие типы, поддерживаемые СУБД SQL Anywhere, перечислены в табл. 10.



Перечень типов дата/время


Тип данныхНазначениеРазмер

DATE Тип для представления даты в виде совокупности года, месяца и числа. Значение года может изменяться в диапазоне от 0001 до 9999 года 4 байта
TIME Тип для представления времени в виде совокупности часа, минут, секунд и долей секунд. Доли секунд хранятся с точностью до 6 знаков. 8 байт
TIMESTAMPТип для представления момента времени конкретной даты. Данные хранятся в виде совокупности года, месяца, числа, часа, минут, секунд и долей секунд. Доли секунд хранятся с точностью до 6 знаков. 8 байт
DATETIMEТоже, что и TIMESTAMP
SMALLDATETIMEТоже, что и TIMESTAMP 

Обмен данными типа дата/время с базами данных производится:

в формате структуры TIMESTAMP при использовании интерфейса ODBC; в формате структуры SQLDATETIME, если взаимодействие приложений с СУБД осуществляется через интерфейс Embedded SQL (); через строку символов в других случаях.

В первых двух случаях все компоненты данных типа дата/время записываются в свои поля. В результате этого достигается однозначное представление информации. При использовании строки формат данных типа дата/время определяется такими параметрами баз данных как DATA_FORMAT, DATA_ORDER, TIME_FORMAT и TIMESTAMP_FORMAT. Различные сочетания этих параметров порождают большое число вариантов форматов. Однако это не должно вызывать особого беспокойства. Параметры базы данных устанавливаются для всей базы данных и действуют на все приложения и всех пользователей. Форматы данных типа дата/время, определяемые вышеуказанными параметрами баз данных по умолчанию, представлены в табл. 11.



Форматы представления данных типа дата/время, определяемые по умолчанию


Тип данныхФормат, используемый по умолчанию

DATE'YYYY-MM-DD'
TIME'HH:NN:ss.SSS'
TIMESTAMP'YYYY-MM-DD HH:NN:ss.SSS'
DATETIME'YYYY-MM-DD HH:NN:ss.SSS'
SMALLDATETIME'YYYY-MM-DD HH:NN:ss.SSS'

В табл. 11 используются следующие сокращения:

YYYY - четыре цифры , обозначающие год: MM - две цифры , обозначающие месяц: DD - две цифры , обозначающие день: HH - две цифры , обозначающие часы: NN - две цифры , обозначающие минуты: ss - две цифры , обозначающие секунды: SSS - три цифры , обозначающие доли секунд.

По умолчанию составляющие времени HH, NN, ss, SSS принимаются равными нулю, а DD - единице. Содержимое строк, представляющие данные типа дата/время , конвертируются автоматически. Некоторые примеры такого преобразования приведены в табл. 12.



Примеры преобразования типов дата/время


Тип данныхСодержимое строкиРезультат преобразования

DATE'1994-06-08'
'1994-06'
'1994-'
'1994'
'1994-06-08'
'1994-06-01'
Ошибка преобразования
Ошибка преобразования
TIME'19:50:25.136777'
'19:50:25'
'19:50'
'19:'
'19'
'19:50:25.136'
'19:50:25.000'
'19:50:00.000'
'19:50:00.000'
Ошибка преобразования
TIMESTAMP'1994-06-08 19:50:25.136777'
'1994-06 19:50'
'1994-06'
'1994-06-08 19:50:25.000'
'1994-06-01 19:50:00.000'
'1994-06-01 00:00:00.000'

К сказанному следует добавить, что к данным типа дата/время применимы арифметические операции, перечень которых представлен в табл. 13.



Арифметические операции, применимые к данным типов дата/время


Тип первого операндаОперацияТип второго операндаТип результатаПримечание

DATE+ (-)INTEGERDATEУвеличивает (Уменьшает) значение даты на целое количество дней
TIMESTAMP+ (-)INTEGERTIMESTAMPУвеличивает (Уменьшает) значение даты на целое количество дней
DATE+TIMETIMESTAMPФормирует из исходных операндов значение типа TIMESTAMP
DATE-DATEINTEGERОпределяет разницу в днях между значения дат исходных операндов
DATE-TIMESTAMPINTEGERОпределяет разницу в днях между значения дат исходных операндов
TIMESTAMP-DATEINTEGERОпределяет разницу в днях между значения дат исходных операндов
TIMESTAMP-TIMESTAMPINTEGERОпределяет разницу в днях между значения дат исходных операндов

5.3.4. Двоичные типы

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



Двоичные типы SQL Anywhere


Тип данныхНазначениеsРазмер

BITТип для представления значений 0 и 1. Аналог полей типа Logical в dBase, FoxPro1 байт
BINARYТоже, что и CHAR, за исключением операций сравнения. В отличии от CHAR, данные этогопо умолчанию 1 байт типа сравниваются на полное совпадение двоичных кодов байтовдо 32767 байт
LONG BINARYТип для представления двоичных данных произвольной длиныДлина произвольная. Ограничена максимальным размером файлов базы данных (2 гиго- байта)
IMAGEТоже, что и LONG BINARY 

5.3.5. Пользовательские типы данных

В СУБД SYBASE SQL Anywhere пользователям предоставлена возможность создавать свои типы данных. Они создаются на базе существующих типов

путем запрета/разрешения записи значений NULL, определения значений по умолчанию (установки DEFAULT); задания условий на записываемые значения (установки CHECK).

Пользовательские типы можно создать и в утилите ISQL, и утилите SQL Central. В среде ISQL для решения этой задачи необходимо выполнить SQL-оператор CREATE DATATYPE. В SQL Central расширить состав имеющихся типов данных можно при помощи мастера Add User-defined Data Type, являющегося элементом папки User-defined Data Types (). Право создания пользовательских типов данных имеют только пользователи, имеющие право создавать объекты базы данных (класс полномочий Resource) или обладающие правами администратора (класс полномочий DBA). Пользователь, создавший новый тип данных, становится его владельцем. Сразу после появления этого типа данных доступ к нему получают все пользователи, зарегистрированные в базе данных.

Новый тип данных может применяться при определении типов полей и при описании переменных в хранимых процедурах и триггеров. Удалить новый тип может его владелец или пользователь с классом полномочий DBA. Удаление этого типа данных возможно только в том случае, если он нигде не используется.

В завершении анализа типов данных, поддерживаемых SQL Anywhere, необходимо сказать следующее. Большое количество "собственных" типов данных и возможность создания пользовательских типов данных должны удовлетворить запросы самого взыскательного пользователя.



Фрагмент исходной таблицы Books


Code_bookAuthor.......Number

1Коршунов Ю.М........49
2Лавров И.А........2
3Трауб Дж.......38
........................



Фрагмент исходной таблицы Copies


N_ booksCode_bookPresent

.....................
4911
5021
5121
5231
.....................

Поля таблицы Books, представленные в табл. 15, служат для хранения уникального кода книги, фамилии ее автора, еще ряда характеристик и количества ее экземпляров соответственно. В таблице Copies для каждой книги (поле Code_book) представлены номера ее экземпляров (поле N_ book) и признак наличия данного экземпляра в библиотеке, т.е. признак того, его еще не потеряли или не списали (поле Present).

Примеры будем выполнять в утилите ISQL. Перед их выполнением убедимся в том, что в данной утилите установлен режим завершения транзакции при окончании работы с утилитой (). Это позволит проводить все действия с базой данных в виртуальной памяти сервера , не изменяя содержимого базы данных на внешнем носителе. При этом имеется возможность отменить все изменения, проводимые в виртуальной памяти.

Проведем модификацию значения поля Code_book - ключевого поля таблицы Books. Для этого выполним следующий SQL-оператор:

//Изменение значения поля UPDATE Stepanov.Books SET Code_book = 60 WHERE Code_book = 2

Измененное содержимое таблиц Copies и Books представлено в табл. 17, 18.



Фрагмент таблицы Books после после выполнения оператора UPDATE


Code_bookAuthor.......Number

1Коршунов Ю.М........49
60Лавров И.А........2
3Трауб Дж.......38
............................



Фрагмент таблицы Copies выполнения оператора UPDATE


N_ booksCode_bookPresent

.....................
4911
50601
51601
5231
.....................

Как видно из табл. 17, 18, изменение адресуемого поля родительской таблицы автоматически влечет изменение значение полей, входящих в состав внешнего ключа дочерней таблицы. При модификации неключевых полей родительской таблицы, дочерняя таблица останется неизменной.

Для отмены результатов произведенной модификации таблиц выполним оператор ROLLBACK - оператор отката к началу транзакции. При этом содержимое виртуальной памяти обнуляется, а на внешнем носителе база данных остается неизменной.

Теперь попробуем удалить запись родительской таблицы, на которую имеются ссылки из дочерней таблицы - запись, у которой поле Code_book=2. Для этого выполним оператор вида:

// Удаление записи таблицы DELETE FROM Stepanov.Books WHERE Code_book=2

Поскольку для внешнего ключа Code_book такие действия запрещены, пользователю будет выдано сообщение "primary key for row in table 'Copies' is referenced in another table". Оно является сообщением об аварийном завершении оператора и означает, что на первичный ключ текущей таблицы (в нашем случае таблица Stepanov.Books) имеется ссылка из таблицы Copies.

Проверим действие внешнего ключа для таких ограничений ссылочной целостности как Update Action/Restrict Update и Delete Action/ Cascade (). Установить эти ограничения можно следующим образом. Щелкните правой кнопки мыши по пиктограмме внешнего ключа Code_book (). В появившемся в результате этого контекстном меню выберите пункт Properties. В открывшемся окне свойств внешнего ключа выберите закладку Integrity. Она в имеет такой же вид как и окно шага 5 мастера Add Foreign Key (). Манипулирование переключателями Update Action и Delete Action данной закладки позволяют решить поставленную задачу.

Для достижения того же эффекта в ISQL необходимо выполнить следующую последовательность SQL-оператор:

/* Удаление существующего внешнего ключа таблицы данных*/ ALTER TABLE Stepanov.Copies DELETE FOREIGN KEY Books_Copies; /* Формирование нового внешнего ключа таблицы данных*/ ALTER TABLE Stepanov.Copies ADD Books_Copies NOT NULL FOREIGN KEY(Code_book) // в состав // ключа входит только поле Code_book REFERENCES // ключ ссылается на поле Stepanov.Books(Code_book) //Code_book //таблицы Stepanov.Books */ ON UPDATE RESTRICT /* запрещение модификации адресуемых полей родительской таблицы */ ON DELETE CASCADE; /* каскадное удаление записей таблицы дочерней таблицы, ссылающихся на удаляемую запись родительской таблицы */

Выполним те же SQL-операторы UPDATE и DELETE уже при этих ограничениях целостности. При этом выполнение оператора UPDATE будет запрещено. Результатом работы оператора DELETE будет изменение таблиц Books и Copies, представленное в табл. 19, 20.

Таблица 19. Фрагмент таблицы Books после выполнения оператора DELETE

Code_bookAuthor.......Number

1Коршунов Ю.М........49
3Трауб Дж.......38
............................



Фрагмент таблицы Copies после выполнения оператора DELETE


N_ booksCode_bookPresent

.....................
4911
5231
.....................

Анализ табл. 19, 20 показал, что синхронное удаление записей обеих таблиц происходит таким образом, чтобы не было "висячих" ссылок. Теперь вернем внешний ключ в предыдущее состояние.

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



Исходное содержимое представления Stepanov.Code_books_1_3


Code_bookAuthorNumber
1Коршунов Ю.М.49
2Лавров И.А.2
3Трауб Дж38

в исходное состояние. После этого


Code_bookAuthorNumber
1Коршунов Ю.М.49
3Трауб Дж.38
Выполните теперь оператор ROLLBACK для возврата базы данных в исходное состояние. После этого отредактируем текст представления путем введения нее фразы WITH CHECK OPTION:

//Изменение текста представления ALTER VIEW Stepanov.Code_books_1_3 AS SELECT Books.Code_book, Books.Author, Books.Number FROM Stepanov.Books WHERE Code_book>=1 AND Code_book<=3 WITH CHECK OPTION

Теперь выполним тот же оператор UPDATE. При этом оператор завершится аварийно с выдачей сообщения "WITH CHECK OPTIPN violated for view 'Books'". Оно информирует пользователя о нарушения условия WITH CHECK OPTION для представления, созданного на базе таблицы Books.

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

//представление на базе таблицы и представления CREATE VIEW Stepanov.Table_View AS SELECT Code_books_1_3.Code_book //для этого поля AS b_code, //вводися псевдоним b_code Copies.N_books FROM Stepanov.Copies NATURAL JOIN Stepanov.Code_books_1_3 WHERE b_code=2

Следующим является представление на базе двух таблиц с использованием арифметической функции Count (подсчет числа записей):

//представление на базе двух таблиц CREATE VIEW Stepanov.Table_table AS SELECT Books.Code_book, "COUNT"(Copies.Code_book) FROM Stepanov.Books NATURAL JOIN Stepanov.Copies GROUP BY Books.Code_book

Это представление выбирает данные о количестве экземпляров каждой книги. Тот же результат можно получить, если при помощи оператора ALTER VIEW заменить в представление Table_table базовый оператор на следующий:

/* Новый базовый оператор представления Table_table */ SELECT Code_book, Number FROM Stepanov.Books

Читателям предлагается проверить работу приведенных выше представлений.

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


Вы подготовили данные для создания внешнего ключа


:

Books_Copies

на базе поля:

    Code_book.

Пояснение 2. Информация о родительской таблице.

Родительская таблица:

    Books

адресуемым поле:

   Code_book.

Щелкните мышью по кнопке Готово для создания внешнего ключа.

Целью шагов 1-6 мастера Add Foreign Key является подготовка к выполнению операторов ALTER TABLE. После щелчка мышью по кнопке Aioiai (шаг 6) начнется выполнение этого оператора. Его результатом будет появление нового внешнего ключа Books_Copies. Данный факт выражается в появлении одноименного элемента в папке Foreign Keys таблицы Copies (см. рис. 69).

Рис. 69. Обновленное содержание папки Foreign Keys

Кроме того в папке Referenced By таблицы Books отображается наличие через внешний ключ ссылку на эту таблицу из таблицы Copies.

Для создания в утилите ISQL внешнего ключа Books_Copies требуется выполнить следующие SQL-операторы:

//Создание внешнего ключа ALTER TABLE Stepanov.Copies ADD "Books_Copies " NOT NULL FOREIGN KEY(Code_book) //внешний ключ //состоит из поля Code_book REFERENCES /* он ссылается на поле Code_book таблицы Stepanov.Books */ Stepanov.Books(Code_book) ON UPDATE CASCADE /* каскадное обновление полей внешнего ключа дочерней таблицы при изменение адресуемых полей родительской таблицы */ ON DELETE RESTRICT /* запрещение удаления записей родительской таблицы, на которую имеются ссылки из дочерей таблицы */ // CHECK ON COMMIT /* признак проверки целостности только при выполнении оператора COMMIT */ COMMENT // комментарий к внешнему ключу ON FOREIGN KEY Stepanov.Copies.Books_Copies IS 'Внешний ключ для поддержания ограничений ссылочной целостности между таблицами Copies и Books'

Для того, чтобы убедиться в утилите ISQL, в том что внешний ключ Books_Copies действительно был создан необходимо при помощи оператора SELECT проанализировать системное представление SYS.SYSFOREIGNKEYS.

Рассмотрим на примерах действие внешнего ключа Books_Copies по обеспечению ссылочной целостности. Для этого приведем по одному фрагменту из таблиц Copies и Books (табл. 15, 16).