Файл: Лабораторная работа 1 Архитектура реляционных баз данных.doc
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 11.01.2024
Просмотров: 121
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
После заголовка страницы следуют 4-байтные идентификаторы элементов данных (ItemIdData). Идентификатор элемента содержит байт-смещение начала элемента, его длину в байтах и несколько бит атрибутов, которые влияют на его интерпретацию. Новые идентификаторы выделяются по мере необходимости с начала свободного пространства. Поскольку идентификатор элемента никогда не смещается пока он не будет освобожден, его индекс может быть использован на долгосрочной основе для ссылки на элемент, даже если сам предмет перемещается по странице с целью сделать свободное пространство более компактным. Фактически, каждый указатель на элемент данных (ItemPointer, также известный как CTID), созданный PostgreSQL, состоит из номера страницы и индекса идентификатора элемента.
Сами элемнты данных хранятся в пространстве, выделяемов в обратном порядке от конца свободного пространства. Точная структура хранения меняется в зависимости от того, что таблица будет содержать. Все строки таблиц и курсоров используют структуру под названием HeapTupleHeaderData, в которой выделяется заголовок фиксированного размера (занимает 23 байтов на большинстве машин), в котором содержатся физические праметры храенния строк, далее следуют необязательные битовый массив NULL-значений, ID объекта и пользовательские данные (т.е. собственно записи). Информация о наличии битового массива NULL-значений и ID объекта также указывается в заголовке.
Если битовый массив NULL-значений присутствует, он начинается сразу после фиксированнго заголовка и занимает столько байт, сколько необходимо из расчета один бит на столбец данных. В этом массиве бит 1 указывает на не NULL-значение, бит 0 на NULL-значение. Если битовый массив NULL-значений отсутствует, то предполагается, что ни один из столбцов не имеет NULL-значения.
Если ID объекта присутствует, то он размещается между битовым массивом NULL-значений и началом фактических данных с учетом того, что последние выравниваются по границе, определяемой параметром MAXALIGN для данной платформы, т.е. значение, соотвтетствующее ID объекта может быть дополнено нулевыми битами (padding value).
Чтобы прочитать данные, соответствующие каждому атрибуту по очереди, сначала проверяется, имеет ли поле NULL-значение в соответствии с битовым массивом NULL-значений. Если это так, переходим к следующему полю. Если поле фиксированной длины, то все байты просто считываются с учетом выравнивания. Если поле переменной длины, то оно имеет заголовок varlena, который включает в себя общую длину сохраненного в этом поле значения, и некоторые флаговые биты. В зависимости от флагов, этот элемент данных может быть размещен в основной таблице либо в TOAST-таблице, он также может быть сжат.
1.1.2. Логическая архитектура баз данных PostgreSQL
К особенностям логической архитектуры PostgreSQL, кроме упоминавшихся выше табличных пространств, можно отнести следующие моменты:
Схемы
PostgreQL поддерживает схемы. Схемы являются как бы дополнительными областями видимости внутри базы данных.Также схему можно сравнить и c дополнительным путем (название схемы должно отмечаться перед названием таблицы) и с каталогом, внутри которого можно разместить таблицы. В любой базе данных за умалчиванием существует схема public, в которой по умалчиванию создаются все таблицы и которую не нужно указывать специально, но администратор БД может создавать другие схемы (и разграничивать доступ к ним), что обеспечивает еще один уровень распределения прав доступа для пользователей, позволяет выделить каждому пользователю как бы персональный раздел внутри БД с теми же названиями таблиц, что и у других пользователей.
Индексы
POSTGRESQL предлагает 4 типа индексов: B-tree, Hash, GiST(Generalized Search Tree) и GIN(Generalized Inverted Index). Каждый тип индекса имеет свой алгоритм реализации, что позволяет существенно увеличить быстродействие, если для определенного вида данных выбирать определенный тип индекса.
POSTGRESQL позволяет также создавать индексы с использованием выражений и частичные (partial) индексы (с использованием служебного слова WHERE).
Роли и привилегии
PostgreSQL управляет привилегиями в БД, используя концепцию ролей. Ролью может быть как отдельный пользователь БД, так и группа пользователей. Роли могут быть владельцами объектов в БД (например таблиц), а также могут назначать привилегии доступа к этим объектам для других ролей. Возможно предоставить одной роли членство в другой роли и соответственно передать этой роли права той роли, членом которой она будет. Концепция ролей заменила старую концепцию пользователей и групп, предоставив ту же функциональность. Начиная с версиии 9.0 в PostgreSQL поддерживаются права на схемы b права по умолчанию.
Правила
Механизм правил (rules ) представляет собой механизм создания пользовательских обработчиков не только операцій манипулирования, но и операции выборки данных. Основное отличие от механизма триггеров заключается в том, что правила срабатывают на этапе разбора запроса, до выбора оптимального плана выполнения и самого процесса выполнения. Правила позволяют переопределять поведение системы при выполнении SQL-операций к таблице. Например, при создании представления (views ) создается правило, которое определяет, что вместо выполнения операции выборки к представлению система должна выполнять операцию выборки к базовой таблице/таблицам с учетом условий выборки, которые лежат в основе определения представления. Для создания представлений, которые поддерживают операции обновления, правила для операций вставки,
изменения и удаления строк, должны быть определены пользователем.
Система правил (более правильно говорить: система правил изменения запросов) позволяет изменять запрос согласно заданным правилам и потом передает измененный запрос планировщику запросов для планирования и выполнения. Система правил является очень мощным инструментом и может быть использована во многих случаях, таких как хранимые процедуры и представления.
Хранимые процедуры и триггеры
Хранимые процедуры в PostgreSQL могут быть написаны на любом из поддерживаемых встроенных языков. Хранимые процедуры могут быть использованы в триггерах и могут возвращать любой из поддерживаемых типов данных, а также массивы и списки. Начиная с версии 9.0, вызывать хранимые процедуры можно с указанием именуемых параметров.
Триггеры определяются как функции, которые инициируются операциями манипулирования. Триггеры могут быть назначены до или после операций INSERT, UPDATE или DELETE. Если произошло событие, на которое был назначен триггер, то вызывается закрепленная за этим триггером процедура. Например, операция INSERT может запускать триггер, проверяющий прибавленную запись на соответствии определенным условиям. При написании функций для триггеров могут использоваться разные языки программирования. Триггеры ассоциируются с таблицами и выполняются в алфавитном порядке.
В версии 9.0 введены триггеры на столбцы и, кроме того, при объявлении триггера можно использовать ключевое слово WHEN, которое добавляет дополнительное условие для срабатывания триггера.
Функции
Функции являются блоками кода, выполняемыми на сервере, а не на стороне клиента БД. Иногда функции отождествляются с хранимыми процедурами, однако между этими понятиями есть разница. Хотя они могут создаваться на чистом SQL, реализация дополнительной логики, например, условных переходов и циклов, выходит за рамки собственно SQL и требует использования некоторых языковых расширений. Функции могут писаться на одном из таких языков:
-
Встроенный процедурный язык PL/pgSQL, во многом аналогичный языку PL/SQL, что используется в СУБД Oracle; -
Скриптовые языки PL/Lua, PL/LOLCODE, PL/Perl, PL/PHP, PL/Python, PL/Ruby, PL/sh, PL/Tcl и PL/Scheme ; -
Классические языки C, C + +, Java (через модуль PL/Java ); -
Статистический язык R (через модуль PL/R ).
PostgreSQL допускает использование функций, которые возвращают набор записей, который дальше можно использовать так же, как и результат выполнения обычного запроса (курсор). Функции могут выполняться как с правами их создателя, так и с правами текущего пользователя.
Начиная с 9.0, можно создавать функции без объявления имени (анонимные блоки) для выполнения блока операторов на любом встроенном языке, который поддерживает PostgreSQL, прямо в командной строке.
Типы данных
PostgreSQL поддерживает большой набор встроенных типов данных:
-
Численные типы-
Целые -
С фиксированной точкой -
С плавающей точкой -
Денежный (отличается специальным форматом вывода, а в остальном аналогичен числам с фиксированной точкой и двумя знаками после запятой)
-
-
Символьные типы произвольной длины -
Двоичные типы (включая большой двоичный объект BLOB Binary Large Object) -
Типы «дата/время» (полностью поддерживают разные форматы, точность, форматы вывода, включая последние изменения в часовых поясах) -
Логический тип -
Перечислимый тип -
Геометрические примитивы -
Сетевые типы-
IP і IPv6 -адреса -
CIDR –формат
-
CIDR (Classless Inter-Domain Routing) бесклассовая адресация метод IP-адресации, позволяющий гибко управлять пространством IP-адресов, не используя жёстких рамок IP-адресации на основе классов сетей.
-
МАС –адреса
Уникальный идентификатор, присваиваемый каждой единице сетевого оборудован.
-
UUID тип
UUID (Universally Unique Identifier) — это стандарт идентификации, используемый при создании программного обеспечения. Наиболее распространённым использованием данного стандарта является Globally Unique Identifier (GUID) фирмы Microsoft.
-
XML тип
XML (XtensibleMarkupLanguage) текстовый формат, предназначенный для хранения структурированных данных (взамен существующих файлов баз данных), для обмена информацией между программами, а также для создания на его основе более специализированных языков разметки.
-
Массивы -
OID –типы
OID (Object identifiers) представляют идентификаторы различных объектов и используются обычно в PostgreSQL как первичные ключи для различных системных таблиц. Эти типы представляются как 4-байтовое целые числа без знака, т.е. имеют достаточно ограниченный диапазон значений, поэтому не могут использоваться в больших базах данных.
-
Композитные типы
Композитный (составной) тип (composite type) представляет структуру ряда или записи, т.е. по существу список имен полей и их типов данных.
-
Псевдотипы
Псевдотипы (pseudo-types) не могут использоваться в качестве типа данных столбца таблицы или представления, но могутт использоваться для объявления аргументов функции или типа результата.
С любым объектом данных, представленным в PostgreSQL, связывается определенный тип, даже если на первый взгляд это и не очевидно. Тип данных одновременно определяет и ограничивает разновидности операций, которые могут выполняться с этими данными.
Хотя большинство типов данных PostgreSQL взято непосредственно из стандартов SQL, существуют и другие, нестандартные типы данных (например, геометрические и сетевые типы). В табл. 1 перечислены основные базовые типы данных PostgreSQL, а также их синонимы (альтернативные имена).
Таблица 1. Типы данных PostgreSQL
Тип данных | Описание | Стандарт |
Логические и двоичные типы данных | ||
boolean, bool | Отдельная логическая величина (true или false) | SQL99 |
bit(n) | Битовая последовательность фиксированной длины (ровно nбит) | SQL92 |
bit varying(n),varbit(n) | Битовая последовательность переменной длины (до n бит) | SQL92 |
Символьные типы | ||
character(n), char(n) | Символьная строка фиксированной длины (ровно n символов) | SQL89 |
character varying(n), varchar(n) | Символьная строка переменной длины (до n символов) | SQL92 |
text | Символьная строка переменной или неограниченной длины | PostgreSQL |
Числовые типы | ||
small int, int2 | 2-байтовое целое со знаком | SQL89 |
integer, int, int4 | 4-байтовое целое со знаком | SQL92 |
bigint, int8 | 8-байтовое целое со знаком, до 18 цифр | PostgreSQL |
real, float4 | 4-байтовое вещественное число | SQL89 |
double precision, floats, float | 8-байтовое вещественное число | SQL89 |
numeric(p.s), decimal (p.s) | Число из р цифр, содержащее 5 цифр в дробной части | SQL99 |
money | Фиксированная точность, представление денежных величин | PostgreSQL, считается устаревшим |
serial | 4-байтовое целое с автоматическим приращением | PostgreSQL |
Время и дата | ||
date | Календарная дата (день, месяц и год) | SQL92 |
time | Время суток | SQL92 |
time with time zone | Время суток с информацией о часовом поясе | SQL92 |
timestamp | Дата и время | SQL92 |
interval | Произвольный интервал времени | SQL92 |
Геометрические типы | ||
box | Прямоугольник на плоскости | PostgreSQL |
line | Бесконечная линия на плоскости | PostgreSQL |
Iseg | Отрезок на плоскости | PostgreSQL |
circle | Круг с заданным центром и радиусом | PostgreSQL |
path | Замкнутая или разомкнутая геометрическая фигура на плоскости | PostgreSQL |
point | Точка на плоскости | PostgreSQL |
polygon | Замкнутый многоугольник на плоскости | PostgreSQL |
Сетевые типы | ||
cidr | Спецификация сети IP | PostgreSQL |
inet | Сетевой IP-адрес с необязательными битами подсети | PostgreSQL |
macaddr | МАС-адрес (например, аппаратный адрес адаптера Ethernet) | PostgreSQL |
Системные типы | ||
oid | Идентификатор объекта (записи) | PostgreSQL |
xid | Идентификатор транзакции | PostgreSQL |