Материал: Graber_Martin_-_SQL_dlya_prostykh_smertnykh_-_2014

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

24

li1 [1] (U []J ЕЕ (] ~

Как поддерJ1Сuвается

порядок в базе данныхSQL

Глава 24. Как поддерживается порядок в базе данных SQL

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

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

Системный катш~ог

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

процедуры, что и процедуры для организации и манипулирования самими данными.

Все это относится к уровню реализации программной системы и не является ча­

стью стандарта ANSI, но в большинстве систем управления базами данных использу­ ется множество SQL-таблиц для представления внутренней информации. Это множество таблиц называется по-разному: системный каталог (systeт catalog), сло­ варь данных (data dictionary) или просто системные таблицы (systeт taЫes). (Термин словарь данных относится к более широкому понятию, включающему информацию о физических параметрах базы данных, но эти вопросы выходят за рамки рассмотрения SQL. Следовательно, имеется ряд систем управления базами данных, имеющих сис­

темный каталог и словарь данных.)

Таблицы системного каталога сходны с другими таблицами SQL: содержат Строки и

столбцы данных. Например, одна таблица каталога обычно содержит информацию о таб­ лицах в базе данных, причем каждой таблице базы данных соответствует одна строка этой таблицы; другая таблица содержит информацию о столбцах таблиц, причем один столбец таблиц базы данных описывается одной строкой этой таблицы. Таблицы каталога создаются и принадлежат самой базе данных, которая имеет специальное имя SYSTEM. Система управления базами данных создает эти таблицы и обновляет их автоматически по мере использования; таблицы каталога нельзя применять непосредственно в командах обновления. Если отказаться от этого ограничения, то действия системы могут привести к непредсказуемым результатам и к получению совершенно неуправляемой базы данных.

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

Поскольку владельцем каталога является сама система, не существует неоднознач­

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

262

Системный каталог

министратору с паролем входа в систему SYSTEM или DBA. Некоторые привилегии

передаются пользователям автоматически.

Типичный системный каталог

Таблицы, включенные в любой системный каталог:

Таблица

Содержащаяся в таблице информация

SYSTEMCATALOG

Таблицы (базовые и представления)

SYSTEMCOLUМNS

Столбцы таблиц

SYSTEMTABLES

Каталог представлений для SYSTEMCATALOG

SYSTEMINDEXES

Индексы для таблиц

SYSTEMUSERAUTH

Пользователи базы данных

SYSTEMTABAUTH

Объектные привилегии для пользователей

SYSTEMCOLAUTH

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

SYSTEMSYNONS

Синонимы таблиц

Если DBA передает привилегию на просмотр SYSTEMCATALOG пользователю Stephen с помощью команды:

GRANT SELECT ON SYSTEMCATALOG ТО Stephen;

то Stephen может увидеть некоторую информацию обо всех таблицах в базе данных (предположим, администратор базы данных Chris является владельцем трех таблиц, рассматриваемых в качестве примера, а пользователь Adrian владеет представлением

Londoncust).

SELECT tname, owner, numcolumns, type, СО

FROM SYSTEMCATALOG;

Выходные данные для этого запроса представлены на рис. 24. l.

Здесь каждая строка представляет таблицу. Первый столбец содержит имя таблицы, второй столбец содержит имя пользователя - владельца этой таблицы, третий столбец определяет количество столбцов в таблице; четвертый столбец содержит однобуквен­ ный код: либо В (для базовой таблицы), либо V (для представления). Последний стол­ бец содержит NULL-значение для случаев, когда в предыдущем столбце указан тип, отличный от V. Этот столбец определяет, следует ли указать возможность контроля.

SYSTEMCATALOG включена в приведенный каталог в качестве одной из таблиц. Для краткости остальная часть системного каталога исключена из выходных данных этой команды. Сами же таблицы, входящие в системный каталог, обычно представ­

лены в SYSTEMCATALOG.

263

Глава 24. Как поддерживается порядок в базе данных SQL

Рис. 24.1. Содержимое таблицы SYSTEMCATALOG

Использование представлений для таблиц катшшга

Поскольку системный каталог SYSTEMCATALOG является таблицей, для него можно

использовать представления. Предположим, имеется одно такое представление с названи­

ем SYSTEMTAВLES. Это представление таблицы SYSTEMCATALOG включает только те таблицы, которые относятся к системному каталогу; обычные таблицы (таблицы базы данных), подобные Sa\espeop\e, представлены в SYSTEMCATALOG, а не в SYSTEMTABLES. Предположим, только таблицы каталога принадлежат владельцу с именем SYSTEM. При желании можно определить другое представление, которое исклю­ чает все таблицы каталога:

CREATE VIEW DatataЫes

AS SELECT *

FROM SYSTEMCATALOG

WHERE owner <> .SYSТEM';

Разрешение пользователям (только) просматривать их собственные объек­ ты. Существуют другие варианты использования представлений каталога. Предпо­ ложим, каждый пользователь может запрашивать информацию из каталога, относя­ щуюся к тем таблицам, владельцем которых он является. Поскольку значение USER в командах SQL всегда определяет идентификатор конкретного по.1ьзователя, от которо­

го получена команда, это значение можно применить для предоставления пользовате­

лю доступа к его собственным таблицам (владельцем которых он является). Можно

создать следующее представление:

264

Системный каталог

CREATE VIEW OwntaЫes

AS SELECT •

FROM SYSTEMCATALOG

WHERE Owner = USER;

Теперь можно передать привилегию доступа к этому представлению всем пользо­

вателям:

GRANT SELECT ON OwntaЫes ТО PUBLIC;

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

является.

Просмотр SYSTEMCOLUMNS. Можно разрешить каждому пользователю про­ сматривать таблицу SYSTEMCOLUМNS для получения информации о столбцах тех таблиц, владельцем которых он является. Рассмотрим сначала ту часть SYSTEMCOLUМNS, в которой содержатся простые таблицы данного примера (т.е.

исключим сам каталог):

tпame

cname

datatype

cnumber

tabowner

Salespeople

sпum

integer

 

Diane

Salespeople

sname

char

2

Diane

Salespeople

city

char

3

Diane

Salespeople

comm

decimal

4

Diane

Customers

cnum

integer

1

Claire

Customers

cname

char

2

Claire

Customers

city

char

3

Claire

Customers

rating

integer

4

Claire

Customers

snum

integer

5

Claire

Orders

onum

integer

 

Diane

Orders

odate

date

2

Diane

Orders

amt

decimal

3

Diane

Orders

cnum

integer

4

Diane

Orders

snum

integer

5

Diane

Каждая строка этой таблицы представляет один столбец таблицы базы данных. По­ скольку каждый столбец данной таблицы должен иметь уникальное имя, подобно каждой таблице данного пользователя, комбинации из имени пользователя, имени таблицы и име­ ни столбца являются уникальными. Следовательно, столбцы tname (имя таблицы), tabowner (имя владе.1ьца таблицы) и cname (имя столбца) вместе образуют первичный ключ (primary key) этой таблицы. Имя столбца datatype (тип данных) говорит о его содер-

265

Источник: https://studfile.net/preview/16418473/