Информационная схема в стандарте SQL2
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

В стандарте SQL2 не определена форма системного каталога, которую должны поддерживать реляционные СУБД. Поскольку в то время, когда принимался стандарт SQL2, уже существовал широкий разброс характеристик коммерческих СУБД различных типов и огромные различия в их системных каталогах, было невозможно достичь согласия по вопросу стандартной спецификации системного каталога. Вместо этого авторы стандарта дали определение "идеализированного" системного каталога, который поставщики СУБД могли бы применять при разработке "с нуля" СУБД, соответствующих стандарту SQL2. Таблицы этого идеализированного системного каталога (который в стандарте называется схема определений) приведены в табл. 11.1.

табл. 11.1 Идеализированный системный каталог, описанный в стандарте SQL2

 

Системная таблица Содержимое
USERS Одна строка для каждого идентификатора пользователя в каталоге
SCHEMATA Одна строка для каждой информационной схемы в каталоге
DATA_TYPE_DESCRIPTOR Одна строка для каждого домена или столбца, имеющего какой-то тип данных
DOMAINS Одна строка для каждого домена
DOMAIN_CONSTRAINTS Одна строка для каждого ограничительного условия, наложенного на домен
TABLES Одна строка для каждой таблицы или представления
VIEWS Одна строка для каждого представления
COLUMNS Одна строка для каждого столбца в каждом определении таблицы или представления
VIEW_TABLE_USAGE Одна строка для каждой таблицы, на которую имеется ссылка в каком-либо определении представления (если определением представления является многотабличный запрос, каждая таблица будет представлена отдельной строкой)
VIEW_COLUMN_USAGE Одна строка для каждого столбца, на который имеется ссылка в каком-либо представлении
TABLE_CONSTRAINTS Одна строка для каждого ограничительного условия, заданного в каком-либо определении таблицы
KEY_COLUMN_USAGE Одна строка для каждого столбца, на который наложено условие уникальности и который присутствует в определении первичного или внешнего ключа (если в определении ключа или условия уникальности указано несколько столбцов, то это определение будет представлено несколькими строками)
REFERENTIAL_CONSTRAINTS Одна строка для каждого определения внешнего ключа, присутствующего в определении таблицы
CHECK_CONSTRAINTS Одна строка для каждого условия проверки, заданного в определении таблицы
CHECK_TABLE_USAGE Одна строка для каждой таблицы, на которую имеется ссылка в условии проверки, ограничительном условии для домена или утверждении
CHECK_COLUMN_USAGE Одна строка для каждого столбца, на который имеется ссылка в условии проверки, ограничительном условии для домена или утверждении
ASSERTIONS Одна строка для каждого заданного утверждения
TABLE_PRIVILEGES Одна строка для каждой привилегии, предоставленной на какую-либо таблицу
COLUMN_PRIVILEGES Одна строка для каждой привилегии, предоставленной на какой-либо столбец
USAGE_PRIVILEGES Одна строка для каждой привилегии, предоставленной на какой-либо домен, набор символов и т.п.
CHARACTER_SETS Одна строка для каждого заданного набора символов
COLLATIONS Одна строка для каждой заданной последовательности сравнения
TRANSLATIONS Одна строка для каждого заданного преобразования
SQL_LANGUAGES Одна строка для каждого языка (например, COBOL, С и т.д.), поддерживаемого СУБД данного типа

 

Стандарт SQL2 не требует, чтобы СУБД поддерживали таблицы системного каталога, приведенные в табл. 11.1 или какие-либо иные. Вместо этого в стандарте SQL2 определен ряд представлений, основанных на этих системных таблицах. Данные представления содержат те объекты базы данных, которые должны быть доступны для рядового пользователя. (Эти представления системного каталога называются в стандарте информационной схемой). Для того чтобы СУБД соответствовала стандарту SQL2, она должна поддерживать эти представления. Такой подход дает пользователю стандартный способ получения информации о доступных ему объектах базы данных с помощью стандартных запросов к представлениям системного каталога.

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

Представления системного каталога, требуемые стандартом SQL2, приведены в табл. 11.2. В ней дается краткое описание информации, которая содержится в каждом представлении. В стандарте определены также три домена, которые .используются представлениями системного каталога и являются доступными для пользователей. Эти домены приведены в табл. 11.3.

табл. 11.2 Представления системного каталога, установленные стандартом SQL2

Представление в системном каталоге Содержимое
INFORMATION_SСНЕМА_CATALOG_NAME Одна строка с именем базы данных для каждого пользователя ("каталога" по терминологии стандарта SQL2), описываемого данной информационной схемой
SCHEMATA Одна строка для каждой информационной схемы в базе данных, принадлежащей текущему пользователю; содержит имя схемы, набор символов по умолчанию и т.д.
DOMAINS Одна строка для каждого домена, доступного текущему пользователю; содержит имя домена, базовый тип данных, набор символов, максимальную длину, степень, точность и т.д.
DOMAIN_CONSTRAINTS Одна строка для каждого ограничительного условия домена; содержит имя условия и его характеристики
TABLES Одна строка для каждой таблицы или представления, доступных пользователю; содержит имя и признак того, идет ли речь о таблице или представлении
VIEWS Одна строка для каждого представления, доступного пользователю; содержит имя, информацию о режиме контроля и возможности обновления.
COLUMNS Одна строка для каждого столбца, доступного пользователю; содержит имя столбца, имя таблицы или представления, которые содержат данный столбец, тип содержащихся в нем данных, степень, точность, набор символов и т.д.
TABLE_PRIVILEGES Одна строка для .каждой привилегии на таблицу, предоставленной пользователю или предоставленной им другому пользователю; содержит имя таблицы, тип привилегии, указание на то, кто предоставил привилегию, кому она предоставлена и имеет ли пользователь право предоставления этой привилегии
COLUMN_PRIVILEGES Одна строка для каждой привилегии на столбец, предоставленной пользователю или предоставленной им другому пользователю; содержит имя таблицы и столбца, тип привилегии, указание на то, кто предоставил привилегию, кому она предоставлена и имеет ли пользователь право предоставления этой привилегии
USAGE_PRIVILEGES Одна строка для каждой привилегии, предоставленной пользователю или пользователем на какой-либо домен, набор символов и т.п.
TABLE_CONSTRAINTS Одна строка на каждое ограничительное условие (первичный ключ, внешний ключ, условие уникальности или условие проверки), заданное для таблицы, которой владеет пользователь; содержит имя условия и таблицы, тип условия и его характеристики
REFERENTIAL_CONSTRAINTS Одна строка для каждого ссылочного ограничения (определения внешнего ключа) на таблицу, которой владеет пользователь; содержит имя ограничения, имя таблицы-потомка и имя таблицы-предка
CHECK__CONSTRAINTS Одна строка на каждое условие проверки для таблицы, которой владеет пользователь
KEY_COLUMN_USAGE Одна строка для каждого столбца первичного или внешнего ключа, на который (столбец) наложено ), условие уникальности и который входит в таблицу, принадлежащую пользователю; строка содержит имя таблицы, имя столбца и позицию столбца в ключе
ASSERTIONS Одна строка для каждого утверждения, которым владеет пользователь; содержит имя утверждения и его характеристики
CHARACTER_SETS Одна строка для каждого определения набора символов, доступного пользователю
COLLATIONS Одна строка для каждого определения последовательности сравнения, доступного пользователю
TRANSLATIONS Одна строка для каждого определения преобразования, доступного пользователю
VIEW_TABLE_USAGE Одна строка для каждой таблицы, на которую имеется ссылка в определениях представлений, принадлежащих пользователю; строка содержит имя таблицы
VIEW_COLUMN_USAGE Одна строка для каждого столбца, на который имеется ссылка в представлениях, принадлежащих пользователю; строка содержит имя столбца и таблицы, в которую входит столбец
CONSTRAINT_TABLE_ USAGE Одна строка для каждой таблицы, на которую имеется ссылка в условии проверки, условии уникальности, утверждении и определении внешнего ключа, принадлежащих пользователю
CONSTRAINT_COLUMN_ USAGE Одна строка для каждого столбца, на который имеется ссылка в условии проверки, условии уникальности, утверждении и определении внешнего ключа, принадлежащих пользователю
SQL_LANGUAGES Одна строка для каждого языка (например, COBOL, С и т.д.), поддерживаемого СУБД данного типа; в строке указывается уровень соответствия языка стандарту SQL2, тип поддерживаемого диалекта SQL и т.д.

 

табл. 11.3 Домены, определенные в стандарте SQL2

 

Системный домен Область значений домена
SQL_IDENTIFIER   Домен всех символьных строк переменной длины, которые являются допустимыми идентификаторами SQL согласно стандарту SQL2. Любое значение, взятое из этого (домена, является допустимым именем таблицы, именем столбца и т.д.
CHARACTER_DATA   Домен всех символьных строк переменной длины, имеющих длину от нуля до максимального значения, поддерживаемого данной СУБД. Значение, взятое из этого домена, является допустимой символьной строкой.
CARDINAL_NUMBER Домен всех неотрицательных чисел от нуля до максимального целого числа, с которым может работать данная СУБД. Значение, взятое из этого домена, является нулем или допустимым положительным числом.

 

Вот примеры нескольких запросов, используемых для извлечения информации о структуре базы данных из представлений системного каталога, определенных в стандарте SQL2:

1. Вывести имена всех таблиц и представлений пользователя, работающего в настоящий момент с базой данных.

SELECT TABLE_NAME

FROM TABLES

2. Вывести имя, позицию и тип данных для каждого столбца во всех представлениях.

SELECT TABLE_NAME, С.COLUMN_NAME, ORDINAL_POSITION, DATAJTYPE

FROM COLUMNS

WHERE (COLUMNS.TABLE_NAME IN (SELECT TABLE_NAME FROM VIEWS))

3. Определить, сколько столбцов имеется в таблице STUDENTS.

SELECT COUNT(*)

FROM COLUMNS

WHERE (TABLE_NAME = 'STUDENTS')

 

Литература:

 

1. Джеймс Р. Грофф, Пол Н. Вайнберг. SQL: полное руководство: пер.с англ. –К.: Издательская группа BHV, 2000.–608с. Стр. 295–346.

Дата: 2019-07-30, просмотров: 207.