Библиотека сайта rus-linux.net
Глава 24
КАК ДАННЫЕ SQL СОДЕРЖАТСЯ
В УПОРЯДОЧЕННОМ ВИДЕ
314 ПОНИМАНИЕ SQL
______________________________________________________________________
ГЛ. 24
В ЭТОЙ ГЛАВЕ, ВЫ УЗНАЕТЕ КАК ТИПОВАЯ
SQL БАЗА
данных сохраняет самоорганизованность.
Не удивительно, что самоорганизованность
обеспечивается реляционной
базой данных, создаваемой и поддерживаемой
с помощью программы.
Вы можете обращаться к этим таблицам
самостоятельно для получения
информации о привилегиях, таблицах,
индексах, и так далее. Эта глава
покажет вам некоторые типы содержащиеся
в такой базе данных.
КАТАЛОГ СИСТЕМЫ
Чтобы функционировать как SQL база
данных, ваша компьютерная система
должна следить за многими различными
вещями: таблицами, представлени-
ями, индексами, синонимами, привилегиями,
пользователями, и так далее.
Имеются различные способы делать это,
но ясно, что наиболее логичный,
эффективный, и согласованный способ
делать это в реляционной среде
состоит в том, чтобы сохранять эту
информацию в таблицах. Это дает воз-
можность компьютеру размещать и управлять
информацией в которой он
нуждается, используя те же самые процедуры
которые он использует чтобы
размещать и управлять данными которые
он хранит для вас.
Хотя это - вопрос конкретной программы,
а не часть стандарта ANSI, боль-
шинство SQL баз данных, используют
набор SQL таблиц хранящих служеб-
ную информацию для своих внутренних
потребностей. Этот набор называ-
ется в различных публикациях как -
системный каталог, словарь данных,
или просто системные таблицы
( Термин "словарь данных" может также
относится к общему архиву данных, включая
информацию о физических
параметрах базы данных которые хранятся
вне SQL.
Следовательно, имеются программы баз
данных, которые имеют и систем-
ный каталог и словарь данных. )
Таблицы системного каталога
- напоминают обычные SQL таблицы: те же
строки и столбцы данных. Например,
одна таблица каталога обычно содер-
жит информацию о таблицах существующих
в базе данных, по одной стро-
ке на каждую таблицу базы данных; другая
содержит информацию о раз-
личных столбцах таблиц, по одной строке
на столбец, и так далее.
Таблицы каталога создаются и присваиваются
с помощью самой базы дан-
ных, и идентифицируются с помощью специальных
имен, таких например
как SYSTEM. База данных создает
эти таблицы и модифицирует их авто-
матически; таблицы каталога не могут
быть непосредственно подвергнуты
действию команды модификации.
КАК SQL ДАННЫЕ СОХРАНЯЮТСЯ УПОРЯДОЧЕННЫМИ
315
______________________________________________________________________
Если это случится, это значительно
запутает всю систему и сделает ее не-
работоспособной. Однако, в большинстве
систем, каталог может быть за-
прошен пользователем. Это очень полезно,
потому что это дает вам воз-
можность узнать кое-что о базе данных,
которую вы используете. Конечно,
вся информация не всегда доступна всем
пользователям. Подобно другим
таблицам, доступ к каталогу ограничен
для пользователей без соответству-
ющих привилегий.
Так как каталог принадлежит самой системе,
имеется некоторая неясность
относительно того, кто имеет привилегии
и кто может предоставить приви-
легии в этом каталоге. Обычно, привилегии
каталога предоставляет супер-
пользователь, например, администратор
системы, зарегистрированый как
SYSTEM или DBA. Кроме
того, некоторые привилегии могут предостав-
ляться пользователям автоматически.
ТИПИЧНЫЙ СИСТЕМНЫЙ КАТАЛОГ
Давайте рассмотрим некоторые таблицы
которые мы могли бы найти в
типовом каталоге системы:
Таблицы Содержание
------------- -------------------------------------------
SYSTEMCATALOG Таблицы (базовые
и представления)
SYSTEMCOLUMNS Столбцы таблицы
SYSTEMTABLES Каталог Представления
в SYSTEMCATALOG
SYSTEMINDEXES Индексы в таблице
SYSTEMUSERAUTH Пользователи
базы данных
SYSTEMTABAUTH Объектные привилегии
пользователей
SYSTEMCOLAUTH Столбцовые привилегии
пользователей
SYSTEMSYNONS Синонимы для таблиц
Теперь, если наш DBA предоставит пользователю
Stephen право просмат-
ривать SYSTEMCATALOG такой командой,
GRANT SELECT ON SYSTEMCATALOG TO
Stephen;
316 ПОНИМАНИЕ SQL
______________________________________________________________________
ГЛ. 24
то Stephen сможет увидеть некоторую
информацию обо всех таблицах
в базе данных ( мы имеем здесь пользователя
DBA, пользователя Chris,
владельца трех наших типовых таблиц,
а также Adrian владельца пред-
ставления Londoncust ).
SELECT tname, owner, numcolumns,
type, CO
FROM SYSTEMCATALOG;
=============== SQL Execution Log ===============
| |
| SELECT tname, owner, numcolumns,
type, CO |
| FROM SYSTEMCATALOG; |
| |
| ================================================
|
| tname owner numcolumns type CO |
| ------------- ------- ----------
---- --- |
| SYSTEMCATALOG SYSTEM 4 B |
| Salespeople Chris 4 B |
| Customers Chris 5 B |
| Londoncust Adrian 5 V Y |
| Orders Chris 5 B |
| |
==================================================
Рисунок 24.1: Содержание таблицы SYSTEMCATALOG
Как вы можете видеть, каждая строка
описывает свою таблицу.
Первый столбец - имя; второй - имя
пользователя который владеет ею;
третий - число столбцов которые содержит
таблица; и четвертый - код
из одного символа, это или B ( для
базовой таблицы ) или V ( для пред-
ставления ). Последний столбец имеет
пустые(NULL) значения, если его
тип не равен V; и этот столбец указывает,
определена или нет возмож-
ность проверки.
Обратите внимание что SYSTEMCATALOG(СЧИСТЕМНЫЙ
КА-
ТАЛОГ) представлен как одна
из таблиц в вышеуказаном списке. Для
простоты, мы исключили остальные каталоги
системы из вывода. Табли-
цы системного каталога обычно показываются
в SYSTEMCATALOG.
КАК SQL ДАННЫЕ СОХРАНЯЮТСЯ УПОРЯДОЧЕННЫМИ
317
______________________________________________________________________
ИСПОЛЬЗОВАНИЕ ПРЕДСТАВЛЕНИЙ
В ТАБЛИЦАХ КАТАЛОГА
Поскольку SYSTEMCATALOG - это
таблица, вы можете использовать
ее в представлении. Фактически можно
считать, что имеется такое представ-
ление с именем SYSTEMTABLES.
Это представление SYSTEMCATALOG содержит
только те таблицы, кото-
рые входят в системный каталог; это
обычно таблицы базы данных, типа
таблицы Продавцов, которые показаны
в SYSTEMCATALOG, но не в SYS-
TEMTABLES.
Давайте предположим, что только таблицы
каталога являются собственнос-
тью пользователя SYSTEM. Если вы захотите,
вы можете определить другое
представление, которое бы специально
исключало таблицы каталога из вы-
вода:
CREATE VIEW Datatables
AS SELECT *
FROM SYSTEMCATALOG
WHERE owner < > 'SYSTEM';
РАЗРЕШИТЬ ПОЛЬЗОВАТЕЛЯМ ВИДЕТЬ(ТОЛЬКО)
ИХ СОБСТВЕННЫЕ ОБЪЕКТЫ
Кроме того, имеются другое использование
представлений каталога.
Предположим вам нужно чтобы каждый
пользователь был способен сде-
лать запрос каталога, для получения
информации только из таблиц кото-
рыми он владеет. Пока значение USER,
в команде SQL постоянно для ID
доступа пользователя выдающего команду,
оно может всегда быть испо-
льзоваться, чтобы давать доступ пользователям
только к их собственным
таблицам.
Вы можете, для начала создать следующее
представление:
CREATE VIEW Owntables
AS SELECT *
FROM SYSTEMCATALOG
WHERE Owner = USER;
Теперь вы можете предоставить всем
пользователям доступ к этому
представлению:
GRANT SELECT ON Owntables TO PUBLIC;
Каждый пользователь теперь, способен
выбирать (SELECT) только те
строки из SYSTEMCATALOG, владельцем
которых он сам является.
318 ПОНИМАНИЕ SQL
______________________________________________________________________
ГЛ. 24
ПРЕДСТАВЛЕНИЕ SYSTEMCOLUMNS Одно
небольшое добав-
ление к этому, позволит каждому пользователю
просматривать таблицу SYS-
TEMCOLUMNS для столбцов из его собственных
таблиц.
Сначала, давайте рассмотрим ту часть
таблицы SYSTEMCOLUMNS, которая
описывает наши типовые таблицы( другими
словами, исключим сам каталог):
tname cname datatype cnumber tabowner
----------- ----- -------- -------
--------
Salespeople snum integer 1 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 1 Diane
Orders odate date 2 Diane
Orders amt decimal 3 Diane
Orders cnum integer 4 Diane
Orders snum integer 5 Diane
Как вы можете видеть, каждая строка
этой таблицы показывает стол-
бец таблицы в базе данных. Все столбцы
данной таблицы должны име-
ть разные имена, также как каждая таблица
должна иметь данного по-
льзователя, и наконец все комбинации
пользователей, таблиц, и имен
столбцов должны различаться между собой.
Следовательно табличные столбцы: tname
( имя таблицы ), tabowner
( владелец таблицы ), и cname ( имя
столбца ), вместе составляют пер-
вичный ключ этой таблицы. Столбец datatype(
тип данных ) говорит
сам за себя. Столбец cnumber ( номер
столбца ) указывает на место-
положении этого столбца внутри таблицы.
Для упрощения, мы опусти-
ли параметры длины столбца, точности,
и масштаба.
КАК SQL ДАННЫЕ СОХРАНЯЮТСЯ УПОРЯДОЧЕННЫМИ
319
______________________________________________________________________
Для справки, показана строка из SYSTFMCATALOG
которая ссылается
к этой таблице:
tname owner numcolumns type CO
------------- ------ ----------- -----
---
SYSTEMCOLUMNS System 8 B
Некоторые SQL реализации, будут обеспечивать
вас большим количеством
данных чем показано в этих столбцах,
но показанное являются основой для
любый реализаций.
Для иллюстрации процедуры предложенной
в начале этого раздела, имеет-
ся способ, позволяющий каждому пользователю
видеть информацию SYS-
TEMCOLUMNS только для принадлежащих
ему таблиц:
CREATE VIEW Owncolumns
AS SELECT *
FROM SYSTEMCOLUMNS
WHERE tabowner = USER;
GRANT SELECT ON Owncolumns TO PUBLIC;
КОММЕНТАРИЙ В
========== СОДЕРЖАНИИ КАТАЛОГА ============
Большинство версий SQL, позволяют вам
помещать комментарии(ремарки)
в специальные столбцы пояснений таблиц
каталогов SYSTEMCATALOG
и SYSTEMCOLUMNS, что удобно,
так как эти таблицы не всегда могут
объяснить свое содержание. Для простоты,
мы пока исключали этот столб-
ец из наших иллюстраций.
Можно использовать команду COMMENT
ON со строкой текста, чтобы
пояснить любую строку в одной из этих
таблиц. Состояние - TABLE, для ко-
мментирования в SYSTEMCATALOG, и текст
- COLUMN, для SYSTEM-
COLUMNS. Например:
COMMENT ON TABLE Chris.Orders
IS 'Current Customer Orders';
Текст будет помещен в столбец пояснений
SYSTEMCATALOG. Обычно,
максимальная длина таких пояснений
- 254 символов.
320 ПОНИМАНИЕ SQL
______________________________________________________________________
ГЛ. 24
Сам комментарий, указывается для конкретной
строки, одна с tname=Orders,
а другая owner=Chris. Мы увидим этот
комментарий в строке для таблицы
Порядков в SYSTEMCATALOG:
SELECT tname, remarks
FROM SYSTEMCATALOG
WHERE tname = 'Orders'
AND owner = 'Chris';
Вывод для этого запроса показывается
в Рисунке 24.2.
SYSTEMCOLUMNS работает точно так же.
Сначала, мы создаем комментарий
COMMENT ON COLUMN Orders.onum
IS 'Order #';
затем выбираем эту строку из SYSTEMCOLUMNS:
SELECT cnumber, datatype, cname,
remarks
FROM SYSTEMCOLUMNS
WHERE tname = 'Orders'
AND tabowner = 'Chris'
AND cname = onum;
Вывод для этого запроса показывается
в Рисунке 24.3.
Чтобы изменить комментарий, вы можете
просто ввести новую команду
COMMENT ON для той же строки.
Новый комментарий будет записан
поверх старого. Если вы хотите удалить
комментарий, напишите поверх
него пустой комментарий, подобно следующему:
COMMENT ON COLUMN Orders.onum
IS ";
и этот пустой комментарий затрет предыдущий.
КАК SQL ДАННЫЕ СОХРАНЯЮТСЯ УПОРЯДОЧЕННЫМИ
321
______________________________________________________________________
=============== SQL Execution Log ===============
| |
| SELECT tname, remarks |
| FROM SYSTEMCATALOG |
| WHERE tname = 'Orders' |
| AND owner = 'Chris' |
| ; |
| ================================================
|
| tname remarks |
| ------------- -----------------------
|
| Orders Current Customers Orders |
| |
==================================================
Рисунок 24.2: Коментарий в SYSTEMCATALOG
=============== SQL Execution Log ===============
| |
| SELECT cnumber, datatype, cname,
remarks |
| FROM SYSTEMCOLUMNS |
| WHERE tname = 'Orders' |
| AND tabowner = 'Chris' |
| AND cname = 'onum' |
| ; |
| ================================================
|
| cnumber datatype cname remarks |
| ---------- --------- ------ ------------
|
| 1 integer onum Orders # |
| |
==================================================
Рисунок 24.3: Коментарий в SYSTEMCOLUMNS
322 ПОНИМАНИЕ SQL
______________________________________________________________________
ГЛ. 24
=========== ОСТАЛЬНОЕ ИЗ КАТАЛОГА===========
Здесь показаны оставшиеся из ващих
системных таблиц определения, с
типовым запросом для каждого:
SYSTEMINDEXES - ИНДЕКСАЦИЯ В
БАЗЕ ДАННЫХ
Имена столбцов в таблице SYSTEMINDEXES
и их описания - следующие:
СТОЛБЦЫ ОПИСАНИЕ
------------- -----------------------------------------------
iname Имя индекса ( используемого
для его исключения )
iowner Имя пользователя который
создал индекс
tname Имя таблицы которая содержит
индекс
cnumber Номер столбца в таблице
tabowner Пользователь который
владеет таблицей содержащей
индекс
numcolumns Число столбцов в
индексе
cposition Позиция текущего столбца
среди набора индексов
isunique Уникален ли индекс
( Y или N )
ТИПОВОЙ ЗАПРОС Индекс
считается неуникальным, если он
вызывает продавца, в snum столбце таблицы
Заказчиков:
SELECT iname, iowner, tname, cnumber,
isunique
FROM SYSTEMINDEXES
WHERE iname = 'salesperson';
Вывод для этого запроса показывается
в Рисунке 24.4.
КАК SQL ДАННЫЕ СОХРАНЯЮТСЯ УПОРЯДОЧЕННЫМИ
323
______________________________________________________________________
=============== SQL Execution Log ================
| |
| SELECT iname, iowner, tname, cnumber,
isunique |
| FROM SYSTEMINDEXES |
| WHERE iname = 'salespeople' |
| ; |
| =================================================
|
| iname iowner tname cnumber isunique
|
| ----------- ------ ---------- -------
-------- |
| salesperson Stephan Customers 5 N
|
| |
===================================================
Рисунок 24.4: Строка из таблицы SYSTEMINDEXES
SYSTEMUSERAUTH - ПОЛЬЗОВАТЕЛЬСКИЕ
И СИСТЕМНЫЕ
ПРИВИЛЕГИИ В БАЗЕ ДАННЫХ
Имена столбцов для SYSTEMUSERAUTH и
их описание, следующее:
СТОЛБЦЫ ОПИСАНИЕ
-------------- -----------------------------------------------
username Идентификатор ( ID
) доступа пользователя
password Пароль пользователя
вводимый при регистрации
resource Где пользователь имеет
права RESOURCE
dba Где пользователь имеет права
DBA
Мы будем использовать простую схему
системных привилегий, которая
представлена в Главе 22, где были представлены
три системных приви-
легии - CONNECT( ПОДКЛЮЧИТЬ
), RESOURCE( РЕСУРСЫ )
и DBA.
Все пользователи получают CONNECT по
умолчанию при регистрации,
поэтому он не описан в таблице выше.
Возможные состояния столбцов
resource и dba могут
быть - Y ( Да, пользователь имеет привилегии)
или - No (Нет, пользователь
не имеет привилегий).
324 ПОНИМАНИЕ SQL
______________________________________________________________________
ГЛ. 24
Пароли (password) доступны
только высоко привилегированным
пользователям, если они существуют.
Следовательно запрос этой
таблицы можно вообще делать только
для информации относительно
привилегий системы и пользователей.
ТИПОВОЙ ЗАПРОС Чтобы
найти всех пользователей которые
имеют привилегию RESOURCE, и увидеть
какие из них - DBA, вы
можете ввести следующее условие:
SELECT username, dba
FROM SYSTEMUSERAUTH
WHERE resource = 'Y';
Вывод для этого запроса показывается
в Рисунке 24.5.
SYSTEMTABAUTH - ПРИВИЛЕГИИ ОБЪЕКТА
КОТОРЫЕ НЕ ОПРЕДЕЛЯЮТ СТОЛБЦЫ
Здесь показаны имена столбцов в таблице
SYSTEMTABAUTH
и их описание:
COLUMN ОПИСАНИЕ
------------ ---------------------------------------------
username Пользователь который
имеет привилегии
grantor Пользователь который
передает привилегии
по имени пользователя
tname Имя таблицы в которой
существуют привилегии
owner Владелец tname
selauth Имеет ли пользователь
привилегию SELECT
insauth Имеет ли пользователь
привилегию INSERT
delauth Имеет ли пользователь
привилегию DELETE
Возможные значения для каждой из перечисленных
привилегий объекта
( имена столбцов которых окончиваются
на auth ) - Y, N, и G.
G указывает что пользователь имеет
привилегию с возможностью
КАК SQL ДАННЫЕ СОХРАНЯЮТСЯ УПОРЯДОЧЕННЫМИ
325
______________________________________________________________________
передачи привилегий. В каждой строке,
по крайней мере один из этих
столбцов должен иметь состояние отличное
от N (другими словами,
иметь хоть какую-то привилегию ).
=============== SQL Execution Log ================
| |
| SELECT username, dba |
| FROM SYSTEMUSERAUTH |
| WHERE resource = 'Y' |
| ; |
| =================================================
|
| username dba |
| ----------- ------ |
| Diane N |
| Adrian Y |
| |
===================================================
Рисунок 24 .5: Пользователи которые
имеют привилегию RESOURCE
Первые четыре столбца этой таблицы
составляют первичный ключ. Это
означает что каждая комбинация из tname,
владелец-пользователь ( не
забудьте, что две различные таблицы
с различными владельцами могут
иметь одно и тоже имя ), пользователь
и пользователь передающий пра-
ва( гарантор ), должна быть
уникальной. Каждая строка этой таблицы
содержит все привилегии ( которые не
являются определенным столб-
цом ), предоставляются одним определенным
пользователем другому
определенному пользователю в конкретном
объекте.
UPDATE и REFERENCES,
являются привилегиями, которые могут
быть определенными столбцами, и находиться
в различных таблицах ката-
лога. Если пользователь получает привилегии
в таблице от более чем од-
ного пользователя, такие привилегии
могут быть отдельными строками со-
зданными в этой таблице. Это необходимо
для каскадного отслеживания
при вызове привилегий.
ТИПОВОЙ ЗАПРОС Чтобы
найти все привелегии SELECT, INSERT,
и DELETE, которые Adrian предоставляет
пользователям в таблице Заказчи-
ков, вы можете ввести следующее ( вывод
показан в Рисунке 24.6 ):
SELECT username, selauth, insauth,
delauth
FROM SYSTEMTABAUTH
WHERE grantor = 'Adrian'
ANDtname = 'Customers';
326 ПОНИМАНИЕ SQL
______________________________________________________________________
ГЛ. 24
=============== SQL Execution Log ================
| |
| SELECT username, selauth, insauth,
delauth |
| FROM SYSTEMTABAUTH |
| WHERE grantor = 'Adrian' |
| AND tname = 'Customers' |
| ; |
| =================================================
|
| username selauth insauth delauth
|
| ----------- ------- -------- --------
|
| Claire G Y N |
| Norman Y Y Y |
| |
===================================================
Рисунок 24. 6: Пользователи получившие
привилегии от Adrian
Выше показано, что Adrian предоставил
Claire привилегии INSERT и SELECT
в таблице Заказчиков, позднее предоставив
ей права на передачу привилегий.
Пользователю Norman, он предоставил
привелегии SELECT, INSERT, и DELETE,
но не дал возможность передачи привилегий
ни в одной из них. Если Claire
имела привилегию DELETE в таблице Заказчиков
от какого-то другого ис-
точника, в этом запросе это показано
не будет.
SYSTEMCOLAUTH
СТОЛБЦЫ ОПИСАНИЕ
------------- -------------------------------------------
username Пользователь который
имеет привилегии
grantor Пользователь который
предоставляет привилегии
другому пользователю
tname Имя таблицы в которой
существуют привилегии
cname Имя столбца в котором
существуют привилегии
owner Владелец tname
updauth Имеет ли пользователь
привилегию UPDATE в этом
столбце
refauth Имеет ли пользователь
привилегию REFERENCES в
этом столбце
КАК SQL ДАННЫЕ СОХРАНЯЮТСЯ УПОРЯДОЧЕННЫМИ
327
______________________________________________________________________
Столбцы updauth и refauth могут быть
в состоянии Y, N, или G; но не могут
быть одновременно в состоянии N для
одной и той же строки.
Это - первые пять столбцов таблицы,
которы не составляют первичный ключ.
Он отличается от первичного ключа SYSTEMTABAUTH
в котором содер-
жится поле cname, указывающее на определенный
столбец обсуждаемой табли-
цы для которой применяются одна или
обе привилегии. Отдельная строка в эт-
ой таблице может существовать для каждого
столбца в любой данной таблицы
в которой одному пользователю передаются
превилегии определенного столбца
с помощью другого пользователя.
Как и в случае с SYSTEMTABAUTH та же
привилегия может быть описана
в более чем одной строке этой таблицы
если она была передана более чем од-
ним пользователем.
ТИПОВОЙ ЗАПРОС Чтобы
выяснить, в каких столбцах какой таблицы
вы имеете привилегию REFERENCES, вы
можете ввести следующий запрос
( вывод показывается в Рисунке 24.7
)
SELECT owner, tname, cname
FROM SYSTEMCOLAUTH
WHERE refauth IN ('Y', 'G')
AND username = USER
ORDER BY 1, 2;
который показывает, что эти две таблицы,
которые имеют различных владель-
цев, но одинаковые имя, в действительности,
совершенно разные таблицы
( т.е. это не как два синонима для
одной таблицы ).
328 ПОНИМАНИЕ SQL
______________________________________________________________________
ГЛ. 24
=============== SQL Execution Log ================
| |
| SELECT OWNER, TNAME, CNAME |
| FROM SYSTEMCOLAUTH |
| WHERE refaulth IN ('Y' , 'G' ) |
| AND username = USER |
| ORDER BY 1, 2 |
| ; |
| =================================================
|
| owner tname cname |
| ----------- ----------- ------- |
| Diane Customers cnum |
| Diane Salespeople sname |
| Diane Salespeople sname |
| Gillan Customers cnum |
===================================================
Рисунок 24. 7: Столбцы в пользователь
имеет привилегию INSERT
SYSTEMSYNONS - СИНОНИМЫ ДЛЯ ТАБЛИЦ
В БАЗЕ ДАННЫХ
Это - имена столбцов в таблице SYSTEMSYNONS
и их описание:
СТОЛБЕЦ ОПИСАНИЕ
------------- --------------------------------------------
synonym Имя синонима
synowner Пользователь, который
является владельцем
синонима ( может быть PUBLIC (ОБЩИЙ))
tname Имя таблицы используемой
владельцем
tabowner Имя пользователя который
является владельцем
таблицы
ТИПОВОЙ ЗАПРОС Предположим,
что Adrian имеет синоним
Clients для таблицы Заказчиков принадлежащей
Diane, и что имеется
общий синоним Customers для этой же
таблицы. Вы делаете запрос
таблицы для всех синонимов в таблице
Заказчиков ( вывод показыва-
ется в Рисунке 24.8 ):
SELECT *
FROM SYSTEMSYNONS
WHERE tname = 'Customers'
КАК SQL ДАННЫЕ СОХРАНЯЮТСЯ УПОРЯДОЧЕННЫМИ
329
______________________________________________________________________
=============== SQL Execution Log ================
| |
| SELECT * |
| FROM SYSTEMSYNONS |
| WHERE tname = 'Customers' |
| ; |
| =================================================
|
| synonym synowner tname tabowner |
| ----------- ----------- ----------
---------- |
| Clients Adrian Customers Diane |
| Customers PUBLIC Customers Diane
|
| |
===================================================
Рисунок 24.8: Синонимы для таблицы
Заказчиков
====== ДРУГОЕ ИСПОЛЬЗОВАНИЕ КАТАЛОГА
=======
Конечно, вы можете выполнять более
сложные запросы в системном каталоге.
Обьединения, например, могут быть очень
удобны. Эта команда позволит вам
увидеть столбцы таблиц и базовые индексы
установленые для каждого,
( вывод показывается в Рисунке 24.9
):
SELECT a.tname, a.cname, iname,
cposition
FROM SYSTEMCOLUMNS a, SYSTEMINDEXES
b
WHERE a.tabowner = b. tabowner
AND a.tname = b.tname
AND a.cnumber = b.cnumber
ORDER BY 3 DESC, 2;
Она показывает два индекса, один для
таблицы Заказчиков и один для таб-
лицы Продавцов.
Последний из них - это одностолбцовый
индекс с именем salesno в поле
snum; он был помещен первым из-за сортировки
по убыванию ( в обратном
алфавитном порядке ) в столбце iname.
Другой индекс, custsale, использует-
ся продавцами чтобы отыскивать своих
заказчиков. Он основывается на ко-
мбинации полей snum и cnum внутри таблицы
Заказчиков, с полем snum
приходящим в индексе первым, как это
и показано с помощью поля cposition.
330 ПОНИМАНИЕ SQL
______________________________________________________________________
ГЛ. 24
=============== SQL Execution Log ================
| |
| SELECT a.tname, a.cname, iname, cposition
|
| FROM SYSTEMCOLUMNS a, SYSTEMINDEXES
b |
| WHERE a.tabowner = b.tabowner |
| AND a.tname = b.tname |
| AND a.cnumber = b.cnumber |
| ORDER BY 3 DESC, 2; |
| |
| =================================================
|
| tname cname iname cposition |
| ----------- ------- -------- ------------
|
| Salespeople sname salesno 1 |
| Customers cnum custsale 2 |
| Customers snum custsale 1 |
| |
===================================================
Рисунок 24.9 Столбцы и их индексы
Подзапросы также могут быть использованы.
Имеется способ увидеть дан-
ные столбца только для столбцов из
таблиц каталога:
SELECT *
FROM SYSTEMCOLUMNS
WHERE tname IN
( SELECT tname
FROM SYSTEMCATALOG);
Для простоты, мы не будем показывать
вывод этой команды, которая состоит
из одного входа для каждого столбца
каждой таблицы каталога. Вы могли бы
поместить этот запрос в представление,
назвав его, например, SYSTEMTAB-
COLS, для представления SYSTEMTABLES.
================ РЕЗЮМЕ =================
Итак, система SQL использует набор
таблиц, называемый ситемным катало-
гом в структуре базы данных. Эти таблицы
могут запрашиваться но моди-
фицироваться. Кроме того, вы можете
добавлять комментарии столбцов в
КАК SQL ДАННЫЕ СОХРАНЯЮТСЯ УПОРЯДОЧЕННЫМИ
331
______________________________________________________________________
( и удалять их из) таблицы SYSTEMCATALOG
и SYSTEMCOLUMNS.
Создание представлений в этих таблицах
- превосходный способ точно оп-
ределить, какая пользовательская информация
может быть доступной.
Теперь, когда вы узнали о каталоге,
вы завершили ваше обучение SQL
в диалоговом режиме. Следующая глава
этой книги расскажет вам как
SQL используется в программах которые
написаны прежде всего на
других языках но которые способны извлечь
пользу из возможностей SQL,
взаимодействуя с его таблицами базы
данных.
322 ПОНИМАНИЕ SQL
______________________________________________________________________
ГЛ. 24
************** РАБОТА С SQL **************
1. Сделайте запрос каталога чтобы вывести,
для каждой таблицы имеющей
более чем четыре столбца, имя таблицы,
имя владелеца, а также
имя столбцов и тип данных этих столбцов.
2. Сделайте запрос каталога чтобы выяснить,
сколько синонимов существу-
ет для каждой таблицы в базе данных.
Не забудьте, что один и тот же
синоним принадлежащий двум различным
пользователям - это фактически
два разных синонима.
3. Выясните сколько таблиц имеют индексы
в более чем пятьдесяти процен-
тов их столбцов.
( См. Приложение A для ответов. )