ПРЕДСТАВЛЕНИЕ SYSTEMCOLUMNS
Одно небольшое добавление к этому, позволит каждому пользователю просматривать таблицу
SYSTEMCOLUMNS для столбцов из его собственных таблиц. Сначала, давайте рассмотрим ту часть
таблицы
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 ( номер столбца )
указывает на местоположении этого
столбца внутри таблицы. Для упрощения, мы опустили параметры длины столбца, точности, и
масштаба. Для справки,
показана строка из SYSTFMCATALOG которая ссылается к этой таблице:
tname |
owner |
numcolumns |
type |
CO |
SYSTEMCOLUMNS |
System |
8 |
B |
|
Некоторые SQL
реализации, будут обеспечивать вас большим количеством данных чем показано в этих столбцах,
но показанное являются
основой для любый реализаций. Для иллюстрации процедуры предложенной в начале этого раздела,
имеется способ,
позволяющий каждому пользователю видеть информацию SYSTEMCOLUMNS только для принадлежащих ему
таблиц:
CREATE VIEW Owncolumns AS SELECT * FROM SYSTEMCOLUMNS WHERE tabowner = USER; GRANT SELECT ON
Owncolumns TO PUBLIC;