4.6.2.DDL: Операторы создания схемы базы данных.

При описании команд предполагается, что:
Операторы базы данных
Команда Описание
CREATE DATABASE <имя_базы_данных> Создание базы данных.
DROP DATABASE <имя_базы_данных> Удаление базы данных.
Создание и удаление таблиц

Создание таблицы:
 
   CREATE TABLE <имя_таблицы>
        (<имя_столбца> <тип_столбца>
                          [NOT NULL]
                          [UNIQUE | PRIMARY KEY]
                          [REFERENCES <имя_мастер_таблицы> [<имя_столбца>]]
          , ...)

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

Контроль за выполнением указанных условий осуществляет СУБД.

Пример: создание базы данных publications:

   CREATE DATABASE publications;

   CREATE TABLE authors (au_id INT PRIMARY KEY,
                         author VARCHAR(25) NOT NULL);
   CREATE TABLE publishers (pub_id INT PRIMARY KEY,
                            publisher VARCHAR(255) NOT NULL,url VARCHAR(255));
   CREATE TABLE titles (title_id INT PRIMARY KEY,
                        title VARCHAR(255) NOT NULL,
                        yearpub INT,
                        pub_id INT REFERENCES publishers(pub_id));
   CREATE TABLE titleautors (au_id INT REFERENCES authors(au_id),
                             title_id INT REFERENCES titles(title_id));
   CREATE TABLE wwwsites (site_id INT PRIMARY KEY,
                          site VARCHAR(255) NOT NULL,
                          url VARCHAR(255));
   CREATE TABLE wwwsiteauthors (au_id INT REFERENCES authors(au_id),
                                site_id INT REFERENCES wwwsites(site_id));

Удаление таблицы:
            DROP TABLE <имя_таблицы>

Модификация таблицы:


4.6.3.DDL: Операторы создания индексов.

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

   CREATE [UNIQUE] INDEX <имя_индекса> ON <имя_таблицы> (<имя_столбца>,...)

Эта команда создает индекс с заданным именем для таблицы <имя_таблицы> по столбцам, входящим в список, указанный в скобках. Индекс часто представляет из себя структуру типа B-дерева (см. параграф 1.2), но могут использоваться и другие структуры. Создание индексов значительно ускоряет работу с таблицами. В случае указания необязательного параметра UNIQUE СУБД будет проверять каждое значение индекса на уникальность.

Очень часто встает вопрос, какие поля необходимо индексировать. Обязательно надо строить индексы для первичных ключей, поскольку по их значениям осуществляется доступ к данным при операциях соединения двух и более таблиц. Также в ответе на этот вопрос поможет анализ наиболее частых запросов к базе данных. Например, для БД publications можно ожидать, что одним из наиболее частых запросов будет выборка всех публикаций данного автора. Для минимизации времени этого запроса необходимо посроить индекс для таблицы authors по именам авторов:

     CREATE INDEX au_names ON authors (author);

Создание индексов для первичных ключей:

     CREATE INDEX au_index ON authors (au_id);
     CREATE INDEX title_index ON titles (title_id);
     CREATE INDEX pub_index ON publishers (pub_id);
     CREATE INDEX site_index ON wwwsites (site_id);

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

Удаление индекса:

       DROP INDEX <имя_индекса>


4.6.4.DDL: Операторы управления правами доступа.

По соображениям безопасности не каждому пользователю прикладной системы может быть разрешено получать информацию из какой-либо таблицы, а тем более изменять в ней данные. Для определения прав пользователей относительно объектов базы данных (таблицы, представления, индексы) в SQL определена пара команд GRANT и REVOKE. Синтаксис операции передачи прав на таблицу:


    GRANT <тип_права_на_таблицу>
      ON  <имя_таблицы> [<список_столбцов>]
      TO  <имя_пользователя>
Права пользователя на уровне таблицы определяются следующими ключевыми словами (как мы увидим чуть позже эти ключевые слова совпадают с командами выборки и изменения данных): В поле <тип_права_на_таблицу> может быть указано либо ключевое слово ALL или любая комбинация других ключевых слов. Например, предоставим все права на таблицу publishers пользователю andy:
   GRANT ALL ON publishers TO andy;
Пользователю peter предоставим права на извлечение и дбавление записей на эту же таблицу:
   GRANT SELECT INSERT ON publishers TO peter;
В том случае, когда одинаковые права надо предоставить сразу всем пользователям, вместо выполнения команды GRANT для каждого из них, можно вместо имени пользователя указать ключевое слово PUBLIC:
   GRANT SELECT ON publishers TO PUBLIC;
Отмена прав осуществляется командой REVOKE:

   REVOKE <тип_права_на_таблицу>
      ON  <имя_таблицы> [<список_столбцов>]
      FROM  <имя_пользователя>
Все ключевые слова данной команды эквивалентны оператору GRANT.

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


    GRANT <тип_права_на_базу_данных>
      ON  <имя_базы данных>
      TO  <имя_пользователя>
К сожалению, способы задания прав на базу данных различны для разных СУБД, и точную их формулировку нужно уточнять в документации. В качестве примера приведем список прав на базу данных, поддерживаемых СУБД Informix: Отмена прав на базу данных осуществляется командой:

   REVOKE <тип_права_на_базу_данных> FROM  <имя_пользователя>


Введение в базы данных. (c) Зеленков Ю.А. (yz@yars.free.net) 1997 г.
(c) Центр Интернет ЯрГУ