InterBase: тормозология и глюконавтика
Страница 31. Системные таблицы. Часть 3


  RDB$GENERATORS - генераторы.
RDB$GENERATOR_NAME - имя генератора.
RDB$GENERATOR_ID - внутренний номер генератора в базе.
RDB$SYSTEM_FLAG - признак системности. По документации - значение 0=пользовательский, больше 0 - системный. Реально системные имеют знаение 1, а пользовательские - null.
RDB$INDICES - индексы. Фактически служит отправной точкой для описания ключевых и ограничений любого рода.
RDB$INDEX_NAME - имя индекса (чаще всего RDB$PRIMARY... - для первичного ключа, RDB$FOREIGN... - для внешнего)
RDB$RELATION_NAME - имя таблицы
RDB$UNIQUE_FLAG - 1, если индекс уникальный, 0 или null, если нет.
RDB$FOREIGN_KEY - имя другого индекса, который определяет поля таблицы, на которую идёт ссылка из полей этого индекса.
RDB$INDEX_ID - какой-то непонятный код, зависящий от структуры индекса. Явно не уникальный. Сказано, что всегда формируется автоматически и "руками не трогать".
RDB$DESCRIPTION - описание индекса. Поскльку операторы не предусматривают ввода описаний, то обычно здесь хранится null.
RDB$SEGMENT_COUNT - количество полей в индексе и соответствующих записей RDB$INDEX_SEGMENTS
RDB$INDEX_INACTIVE - признак неактивности индекса. 1 означает неактивный, 0 или null - активный.
RDB$INDEX_TYPE - что-то зарезервированное. В моей тестовой базе всё время null.
RDB$SYSTEM_FLAG - признак системности. Как обычно, 1=да, 0 или null = нет.
RDB$EXPRESSION_BLR - это и следующее поле видимо предназначены для обработки индексов по сложным выражениям (а не по полям). Как ими можно реально воспользоваться я не представляю. Данное поле должно представлять собой откомпилированное во внутренний код выражение, по результатам которого строится индекс. В реальных индексах обычно null.
RDB$EXPRESSION_SOURCE - исходный текст выражения, по которому строится индекс (если кто-то найдёт способ его создать). В обычных индексах всегда null.
RDB$STATISTICS - так называемая "селективность" индекса. Представляет собой вещественное число, показывающее долю значений, с которыми в таблице есть несколько записей. Подсчитывается соотношение именно значений, а не записей. То есть если из трёх значений одно представлено в нескльких экземплярах, то селективность будет 0.3333... независимо от того, сколько раз оно там продублировано. По крайней мере так показывают мои эксперименты.
По понятным причинам селективность уникальных индексов всегда должна быть равна 1. Фактически это число показывает, какова вероятность того, что при поиске записей по заданному значению мы найдём не более одной записи. Естественно, чем эта вероятность выше, тем лучше, поскольку поиск по такому индексу позволяет максимально сократить количество обрабатываемых записей.
Однако здесь таится одна важная опасность - статистика обновляется только при физическом (пере)создании индекса (alter inactive/active или backup-restore) или по оператору set statistics index имя_индекса.
RDB$INDEX_SEGMENTS - поля, входящие в индекс.
RDB$INDEX_NAME - имя индекса (фактически - ссылка на RDB$INDICES)
RDB$FIELD_NAME - имя поля
RDB$FIELD_POSITION - порядковый номер поля в пределах индекса
RDB$LOG_FILES - файлы журнала упреждающей записи (WAL), которые одно время (в эпоху версии interbase 4.X) применялись для ускорения обновлений БД под NetWare. Теперь они ушли в прошлое и данная таблица обычно пуста. Хотя для совместимости её пока поддерживают.

RDB$PAGES - представление, дающее информацию о страницах БД. Вопреки документации реально здесь отображены далеко не все страницы, а только приписанные к таблицам. Блобовые, генераторные, системные и прочие сюда не входят. Та же документация не советует обновлять это представление, поскольку можно легко запороть базу. Однако зачем тогда вообще оно сделано обновляемым?...


RDB$PAGE_NUMBER - физический номер страницы в базе.
RDB$RELATION_ID - номер таблицы, ссылка на одноимённое поле в RDB$RELATIONS.
RDB$PAGE_SEQUENCE - номер страницы в последовательности страниц данной таблицы.
RDB$PAGE_TYPE - тип страницы. Кодировку типов пока не знаю.

RDB$PROCEDURES - хранимые процедуры. Параметры описываются отдельной таблицей (ниже).

RDB$PROCEDURE_NAME - имя процедуры.
RDB$PROCEDURE_ID - внутренний номер процедуры в базе.
RDB$PROCEDURE_INPUTS - количество входных параметров процедуры.
RDB$PROCEDURE_OUTPUTS - количество выходных параметров.
RDB$DESCRIPTION - описание (как обычно, null).
RDB$PROCEDURE_SOURCE - исходный текст процедуры, начиная после слова "as".
RDB$PROCEDURE_BLR - откомпилированный внутренний код InterBase.
RDB$SECURITY_CLASS - имя класса безопасности согласно RDB$SECURITY_CLASSES.
RDB$OWNER_NAME - владелец процедуры (пользователь, который её создал).
RDB$RUNTIME - какая-та дополнительная информация, используемая для ускорения выполнения (я так думаю - компиляции или запуска) процедуры.
RDB$SYSTEM_FLAG - признак системности. Обычно 0 потому что системных процедур interbase не создаёт.
RDB$PROCEDURE_PARAMETERS - параметры хранимых процедур.

RDB$PARAMETER_NAME - имя параметра.
RDB$PROCEDURE_NAME - имя процедуры, к которой относится параметр. Фактически ссылка на предыдующую таблицу.
RDB$PARAMETER_NUMBER - номер параметра. Нумерация идёт с нуля отдельно для входных и выходных параметров в пределах процедуры.
RDB$PARAMETER_TYPE - 0=входной, 1=выходной.
RDB$FIELD_SOURCE - ссылка на RDB$FIELDS, где описывается тип данных и прочие подобные вещи.
RDB$DESCRIPTION - описание, обычно null.
RDB$SYSTEM_FLAG - признак системности. Непонятно, зачем он у отдельного параметра, как может часть параметров процедуры быть системными, а часть не быть? В действительности обычно устанавливается в null.
RDB$REF_CONSTRAINTS - дополнительная информация по ссылочным ограничениям
RDB$CONSTRAINT_NAME - имя самого ограничения
RDB$CONST_NAME_UQ - имя ограничения того ключа, на который идёт ссылка
RDB$MATCH_OPTION - тип совпадения. В 4.Х всегда 'FULL'. В пятёрке видимо должно работать 'PARTIAL'.
RDB$UPDATE_RULE - правило обновления. В 4.Х всегда 'RESTRICT'. В пятёрке возможно заработает 'CASCADE', 'SET NULL', 'SET DEFAULT''.
RDB$DELETE_RULE - правило удаления (аналогично правилу обновления)
 
« Предыдущая статья