|
Программирование >> Sql: полное руководство
Имена столбцов внешнего ключа и соответствующих им столбцов первичного ключа перечислены в текстовом виде в столбцах fk colnames и pk colnames таблицы syscat.references Более полезная информация содержится в другой системной таблице - syscat.keycoluse (табл 16 9) Для каждого столбца каждого внешнего ключа, первичного ключа и условия уникальности в этой системной таблице отводится одна строка Специальная последовательность чисел определяет порядок следования столбцов в составном внешнем ключе. С помошью запроса к этой таблице, подобного приведенному ниже, можно узнать имена столбцов, связывающих некоторую таблицу с ее предком Вывести список столбцов, связываюш,их таблицу orders с таблицей products отношением, имеющим имя isfor. select colname, colseq from syscat.keycoldse where constname = isfor
Информация о первичных ключах и отношениях предок/потомок, в которых они участвуют, содержится также в системных таблицах syscat.tables и syscat.columns, описанных ранее в табл. 16 2 и 16.4. Если таблица имеет первичный ключ, то ее строка в таблице syscat . tables имеет в столбце keycolumns значение, отличное от нуля и равное числу столбцов первичного ключа (1 для простого ключа, 2 или более для составного ключа). В таблице syscat . columns строки столбцов, входящих в состав первичных ключей, имеют в столбце keyseq значение, не равное нулю. Оно указывает позицию (1, 2 и т.д.), занимаемую столбцом в первичном ключе. Чтобы найти первичный ключ какой-либо таблицы, вы можете сделать запрос к таблице syscat.columns. Вывести список столбцов, образующих первичный ключ таблицы products. SELECT COLNAME, KEYSEQ, TYPENAME, REMARKS FROM SYSCAT. COLUMNS WHERE TABNAME = PRODUCTS AND KEYSEQ > 0 ORDER BY KEYSEQ В системных каталогах других СУБД поддержка первичных и внешних ключей осуществляется схожим образом Например, в Oracle имеется системное представление user c0nstraints, аналогичное таблице syscat.references. Информация о столбцах внешних и первичных ключей содержится в представлении USER C0NS C0LUMNS, которое аналогично таблице syscat. keyc0luse. В SQL Server структура системного каталога подобна описанной выше, а информация о внешних ключах распределена между таблицами sysforeignkeys и sysreferences. В Informix Universal Server применяется подход, близкий используемому в DB2, но с теми же отличиями, которые уже были описаны при рассмотрении того, как в системном каталоге представлена информация о столбцах Для каждого офаничения, определенного в базе данных, создается сфока в системной таблице syscon-straints, где записано имя ограничения и его тип (условие на значения, первичный ключ, внешний ключ и т д ). В этой таблице офаничению назначается также внутренний идентификатор, используемый при ссылке на данное офаничение в других таблицах системного каталога. Таблица, к которой применяется офаничение, тоже идентифицируется внуфенним номером (он служит в качестве внешнего ключа к таблице systables). Более подробная информация о внешних ключах содержится в таблице sysreferences. В ней Офаничение, первичный ключ и родительская таблица определяются внуфенними идентификаторами, указывающими на таблицы SYSCONSTRAINTS И systables. В таблице sysreferences описаны правила удаления и обновления для отношения, создаваемого внешним ключом, и другие необходимые данные Информация о пользователях в большинстве случаев системный каталог содержит таблицу, в которой перечислены все пользователи, имеющие санкционированный доступ к базе дагщых. СУБД Может использовать эту системную таблицу для проверки имени и пароля пользователя, когда он первый раз устанавливает соединение с базой данных. В таблице может также храниться и другая информация о пользователях. в SQL Server информация о пользователях хранится в системной таблице sys-users (табл. 16.10). Каждая строка этой таблицы описывает одного пользователя или Фуппу пользователей, входящих в схему защиты базы данных В Informix применяется схожий подход, и даже соответствующая системная таблица тоже называется sysusers. в Oracle эта таблица называется all users. Вот два эквивалентных запроса для SQL Server и Oracle, посредством которых на экран выводится список зарегистрированных пользователей: Вывести все идентификаторы пользователей, зарегистрированных в SQL Sener. SELECT NAME FROM SYSaSERS WHERE DID <> GID Вывести все идентификаторы пользователей, зарегистрированных вХ)гас1е. SELECT USERNAME FROM ALL USERS Таблица 16.10. Некоторые столбцы таблицы SYSUSERS (СУБД SQL Server) Имя столбца Тип данных Информация uid SMALLINT Внутренний идентификатор пользователя в базе данных gid SMALLINT Внутренний идентификатор группы пользователей в базе данных name SYSNAME Имя пользователя или группы В DB2 таблица dbauth, содержащая имена пользователей, также хранит информацию о ролях и привилегиях пользователей в базе данных (т.е. являются ли они администраторами базы данных, могут ли создавать таблицы, могут ли создавать профаммные модули для доступа к базе данных и т.д.). Вот запрос к СУБД DB2, эквивалентный показанным выше: Вывести все идентификаторы пользователей, зарегистрированных в DB2. SELECT DISTINCT GRANTEE FROM SYSCAT.DBAUTH WHERE GRANTEETYPE = U Информация о привилегиях Помимо информации о структуре базы данных, системный каталог хранит, как правило, информацию, которая необходима СУБД для обеспечения безопасности базы данных. Как уже говорилось в главе 15, в разных СУБД применяются различные варианты базовой схемы выдачи привилегий, существующей в SQL. Это находит свое отражение в структуре системных каталогов различных СУБД. DB2 имеет одну из наиболее сложных схем пользовательских привилегий, которая охватывает даже отдельные столбцы таблиц. В табл. 16.11 приведены названия таблиц системного каталога DB2, которые хранят информацию о привилегиях, и кратко описана роль каждой из них.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |