SYSTEMSYNONS — СИНОНИМЫ ДЛЯ ТАБЛИЦ В БАЗЕ ДАННЫХ

Это — имена столбцов в таблице SYSTEMSYNONS и их описание:

СТОЛБЕЦОПИСАНИЕ

synonym Имя синонима

synowner Пользователь, который является владельцем синонима (может быть PUBLIC (ОБЩИЙ))

tname Имя таблицы используемой владельцем

tabowner Имя пользователя который является владельцем таблицы

ТИПОВОЙ ЗАПРОС Предположим, что Adrian имеет синоним Clients для таблицы Заказчиков, принадлежащей Diane, и что имеется общий синоним Customers для этой же таблицы. Вы делаете запрос таблицы для всех синонимов в таблице Заказчиков (вывод показывается в Рисунке 24.8):

SELECT *
FROM SYSTEMSYNONS
WHERE tname = 'Customers'

=============== 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.

=============== 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);

Для простоты, мы не будем показывать вывод этой команды, которая состоит из одного входа для каждого столбца каждой таблицы каталога. Вы могли бы поместить этот запрос в представление, назвав его, например, SYSTEMTABCOLS, для представления SYSTEMTABLES.

Резюме

Итак, система SQL использует набор таблиц, называемый системным каталогом в структуре базы данных. Эти таблицы могут запрашиваться и модифицироваться. Кроме того, вы можете добавлять комментарии столбцов в (и удалять их из) таблицы SYSTEMCATALOG и SYSTEMCOLUMNS. Создание представлений в этих таблицах — превосходный способ точно определить, какая пользовательская информация может быть доступной.

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

РАБОТА С SQL

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

· Сделайте запрос каталога, чтобы выяснить, сколько синонимов существует для каждой таблицы в базе данных. Не забудьте, что один и тот же синоним, принадлежащий двум различным пользователям — это фактически два разных синонима.

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

(См. Приложение A для ответов.)