Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Konspekt_lektsiy_BD_amp_amp_SD

.pdf
Скачиваний:
28
Добавлен:
10.02.2016
Размер:
1.41 Mб
Скачать

 

М. Г. Глава. Технологія проектування і адміністрування баз даних та сховищ даних

41

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Викладач

1

Читання

 

1

Дисципліна

 

 

 

ПІП викладача

ПІП викладача

 

Назва дисципліни

 

 

 

 

 

 

 

 

 

 

посада

 

Назва дисципліни

 

 

кількість семестрів

 

 

 

 

 

 

вч. звання

 

Назва спеціальності

 

кількість годин

 

 

 

 

 

 

 

 

 

вч. ступінь

 

 

вч. ступінь

 

 

наявність КП

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Спеціальність

 

 

 

 

 

 

 

 

 

Назва спеціальності

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

шифр спеціальності

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

напрям

 

 

 

 

 

 

 

 

 

галузь знань

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 48 Представлення n-арного зв’язку в нотації MS Access

На цьому етапі ми завершуємо розгляд теоретичних аспектів проектування БД і перейдемо до питань практичної реалізації.

Демонстраційний приклад

Завдання.

П.1. Необхідно розробити інформаційну систему для реєстрації авіаквитків пасажирів аеропорту, база даних якої повинна містити таку інформацію:

інформацію про всі зареєстровані рейси: номер рейсу, пункт призначення, дата та час вильоту та прибуття, кількість місць, тип літака, авіакомпанія;

інформацію про пасажирів аеропорту: прізвище, ім’я та по-батькові пасажира, його паспортні дані;

інформацію про співробітників (касирів) аеропорту: прізвище, ім’я та по-батькові, контактна інформація, паспортні дані, посада;

інформацію про класи салонів певного рейсу: назва класу, вартість, кількість місць;

інформацію про квитки: номер квитка, рейс, клас, пасажир, місце, вартість, операція (бронювання, покупка).

Цю інформацію первісно розташовано у таких таблицях:

Рейс (номер рейсу, пункт призначення, дата, час вильоту та прибуття, тип літака, авіакомпанія);

Клас (назва, рейс, до якого відноситься клас, вартість, кількість місць);

Пасажир (прізвище, ім’я, по-батькові, паспортні дані, стать);

Авіакомпанія (назва, країна);

Операція (купівля, бронювання);

Співробітник (прізвище, ім’я, по-батькові, посада, дата народження, паспортні дані, адреса, телефон, ідентифікаційний код);

Квиток (номер квитка, пасажир, який купив даний квиток, клас, операція, співробітник, який видав квиток, дата продажу, місце);

інші таблиці за пропозицією студента.

П.2. Задайте зв’язки між відношеннями та формалізуйте їх.

Кафедра економічної кібернетики та інформаційних технологій. Одеський національний політехнічний університет

42

М. Г. Глава. Технологія проектування і адміністрування баз даних та сховищ даних

 

 

П.3. Приведіть відношення у відповідність нормальній формі Бойса-Кодда.

П.4. Накресліть схему даних в нотації MS Access, інформаційну модель або ER-діаграму.

Розв’язання.

Визначимо відношення, які будуть складати базу даних інформаційної системи. Кожне відношення складається з об’єктів (рядків), які мають однакові властивості (атрибути). Розглянемо, наприклад, відношення Рейс. Кожен рейс, без виключення, здійснює певна авіакомпанія, має свій пункт призначення, дату, час вильоту и прибуття, заздалегідь відомо тип літака та номер рейсу. Кожен пасажир повинен повідомити свої паспортні дані, прізвище, ім’я, по-батькові та стать. Отже, дані про всіх пасажирів можна об’єднати у відношення з назвою Пасажир. Аналогічно розглядаємо інші об’єкти заданої предметної області і визначаємо на-

ступні сутності: Співробітник, Квиток, Клас, Авіакомпанія.

Для створення бази даних необхідно визначити зв’язки між отриманими відношеннями. Наприклад, кожна авіакомпанія обслуговує один або декілька рейсів, але один і той же рейс не можуть обслуговувати декілька авіакомпаній. Між відношеннями Авіакомпанія та Рейс існує зв’язок один до багатьох. Кожен пасажир може купувати безліч квитків на різні рейси, але один і той же квиток може купити тільки один пасажир. Теж маємо зв’язок один до багатьох між відношеннями Пасажир та Квиток.

Формалізуємо дані зв’язки. У першому випадку за правилом формалізації необхідно первинний ключ відношення Авіакомпанія додати до відношення Рейс як зовнішній ключ. Це дасть змогу визначити яка авіакомпанія обслуговує певний рейс. У другому випадку аналогічно, первинний ключ відношення Пасажир додаємо у відношення Квиток.

Представимо схему даних на рис. 49.

Рис. 49. Cхема даних в нотації MS Access

Перевіримо схему даних на відповідність НФБК, згідно якої кожен атрибут відношення повинен залежати від потенційного ключа.

Розглянемо на прикладі відношення Рейс. Покажемо послідовний перехід від одної нормальної форми до іншої.

Дане відношення знаходиться в першій нормальній формі, так як значення кожного атрибуту не розділяється на декілька значень.

Дане відношення знаходиться у другій нормальній формі, так як кожен неключовий атрибут функціонально повно залежить від первинного ключа — id_рейсу.

Дане відношення знаходиться у третій нормальній формі, так як кожен неключовий ат-

Кафедра економічної кібернетики та інформаційних технологій. Одеський національний політехнічний університет

М. Г. Глава. Технологія проектування і адміністрування баз даних та сховищ даних

43

 

 

рибут залежить тільки від первинного ключа id_рейсу та не виникає інформаційної надмірності та аномалій.

Дане відношення знаходиться в нормальній формі Бойса-Кодда, так як в ньому відсутні функціональні залежності атрибутів складеного ключа від неключових атрибутів. Ця умова виконується за замовчуванням, так як в даному відношенні ключ не являється складеним.

Аналогічним чином перевіряються інші відношення.

Кафедра економічної кібернетики та інформаційних технологій. Одеський національний політехнічний університет

44

М. Г. Глава. Технологія проектування і адміністрування баз даних та сховищ даних

 

 

SQL

Засоби розробки

Сьогодні існує велике число програмних систем, що дозволяють безпосередньо вводити і генерувати запити мовою SQL, а також відображати результати виконання запитів. Це такі продукти, як Windows Interactive SQL (WISQL) фірми Borland, що поставляється в пакеті

Delphi; FirstSQL фірми IBM; Visual Data Manager (VDA), що входять у пакет Visual Basic

(VB) фірми Microsoft і ряд інших. Однак, такі системи не застосовні для створення ефективних додатків, у першу чергу, з таких причин: по-перше, вони відображають результати тільки у вигляді стандартної двовимірної таблиці з іменами атрибутів у її заголовку; але більш істотним недоліком є те, що користувач повинен знати саму мову даних для побудови запитів. Проте вони незамінні для розроблювачів при налагодженні коректних і ефективних SQL- інструкцій.

Ряд сучасних систем, призначених для побудови додатків з використанням мов високого рівня, підтримують SQL як підмову даних або дозволяють інтегрувати в себе продукти, що підтримують SQL. До них відносяться: Delphi, з мовою Object Pascal в основі, Visual Basic

(VB), Oracle Developer/2000 і Designer/2000, Informix NewEra, що працює в комплексі з Visual C++, і сам пакет Visual C++.

І нарешті, вельми поширеним є сьогодні Web-інтерфейс інформаційних систем та їхніх підсистем. Його використання в значній мірі сприяє уніфікації додатків та полегшує масштабування інформаційних систем як в структурному, так і в територіальному аспектах.

Побудова цього типу інтерфейсів вимагає знань і навичок використання мов PHP та JavaScript, які також мають в своєму арсеналі елементи доступу до серверів БД та генерування SQL-запитів.

Ми не будемо розглядати який-небудь конкретний продукт (CASE-систему) тому що усі вони, окрім CASE-додатків систем Oracle і Informix, підтримують один чи близькі стандарти SQL.

Так наприклад, VB5 містить низку об’єктів, що дозволяють працювати з БД. Зокрема, об’єкти rdoQuery і rdoConnection, що своїми методами Execute генерують запит або виконують SQL-вирази. Причому, якщо в Connection.Execute SQL-інструкція записується як параметр, то Query.Execute параметрів не має, а інструкція задається у властивості „SQL“ цього об’єкта.

Для виконання прикладів SQL-запитів, які надано у наступних розділах, та налагодження запитів з контрольних завдань рекомендується, перш за все, додаток Interactive SQL з системи PgAdmin, якою комплектується СУБД PostgreSQL, чи система Windows Interactive SQL з комплекту СУБД Borland Interbase або Firebird.

Всі ці системи працюють з будь-яким сервером БД, проте далі будуть наведені приклади, які налагоджувались з локальною версією СУБД Firebird 2.0 або специфічні для СУБД PostgreSQL і налагоджувались з версією 9 цієї СУБД.

Зауваження щодо прикладів.

! Предметною областю для демонстрації команд та операторів SQL обрано навчальний процес в Одеському національному політехнічному університеті. Зокрема, номер студе-

нтської групи є літеро-цифровим: ФС-РРП, де ФС — літерний шифр спеціальності, РР — рік формування групи (вступу до університету), П чи ПП — порядковий номер групи (наприклад, АМ-823 — третя група спеціальності „Обчислювальні машини“ 1982 року вступу). Повний номер студентського квитка складається з номеру групи та порядкового номеру студента в групі (АМ-823/12). Значеннями оцінок є бали рейтингової системи: 100-95 балів (або ‘A’ в європейській системі ECTS) — „відмінно“, 94-85 (або ‘B’) — „дуже добре“, 84-75 (або

‘C’) — „добре“, 74-65 (або ‘D’) — „задовільно“, 64-60 (або ‘E’) — „достатньо“, менше 60 — „незадовільно“: 30-59 (або ‘FX’) — повинен прослухати курс повторно, менше 30 (або ‘F’) — має пройти повторне навчання; 60-89 балів — студент зобов’язаний складати іспит, більше

Кафедра економічної кібернетики та інформаційних технологій. Одеський національний політехнічний університет

М. Г. Глава. Технологія проектування і адміністрування баз даних та сховищ даних

45

 

 

90 — студент може не складати іспит..

Отже, Додаток А містить інформаційну модель (в об’єктній нотації та нотації UML) навчального прикладу бази даних, яка створюватиметься у наступних розділах.

У Додатку Б наведено сценарій команд створення таблиць навчальної бази даних. Це повний варіант команд, які будуть поступово сформовані протягом розділу „Мова визначення даних (МВД, DDL) SQL. Частина 1“.

Додаток В містить навчальний приклад таблиць з даними, до яких будуть надсилатися запити щодо маніпулювання цією інформацією.

Де-не-де будуть зустрічатися додаткові приклади, відмінні від описаних вище. На них буде звертатись увага окремо.

Кафедра економічної кібернетики та інформаційних технологій. Одеський національний політехнічний університет

DATE
TIME

46

М. Г. Глава. Технологія проектування і адміністрування баз даних та сховищ даних

 

 

Мова визначення даних (МВД, DDL) SQL. Частина 1

МВД SQL складається з операторів і команд, орієнтованих на роботу з такими об’єктами БД, як поля, домени, таблиці, індекси та представлення.

Для відображення атрибутів відношення БД необхідно визначити типи їхніх значень і привести їх відповідно до типів, припустимих конкретною СУБД.

Типи даних

У мові SQL підтримуються такі типи даних:

CHAR[ACTER](n) — текстовий рядок фіксованої довжини в n символів. Максимальне значення n — 254 символи. Константа такого типу задається в апострофах (‘). Причому значення ‘‘ дозволяє включити в структуру і сам апостроф (‘).

VARCHAR — текст структури змінної довжини. Її максимальний розмір залежить від СУБД — 256 - 8000 символів.

Аналогічний йому тип LONG[VARCHAR] — розміром до 16K або 2G, залежно від реалізації. Різні СУБД організують збереження даних цих двох типів або в самій таблиці, або, найчастіше, в окремому файлі. А в таблиці зберігаються тільки посилання на зсув конкретного значення.

BIT(n) — бітовий рядок n-ї довжини. Призначена для збереження двійкових значень як єдиного цілого (коди програм, зображення і т.д.).

Сьогодні більшість СУБД замість цього типу даних використовують тип BLOB Binary Large OBject, який зберігається аналогічно типу VARCHAR.

DEC[IMAL](n,m) — десяткове число в дійсному виді, тобто з явною десятковою крапкою. n — загальна кількість розрядів числа, m — кількість розрядів після крапки. Причому m n . Максимальна кількість розрядів p залежить від СУБД, але p повинно бути не менше n.

NUMERIC(n,m) — аналогічно DEC, крім того, що p може бути не більше n. INT[EGER] — десяткове ціле. Його максимальний розмір і, відповідно, значення зале-

жать від СУБД.

SMALLINT — підтримується не всіма СУБД. Аналогічний INT, але в два рази менше. FLOAT(n) — десяткове число з плаваючою крапкою, представлене в експонентній формі x ×10y , де n — кількість розрядів числа x, максимальне значення якого, як і максимальне

значення числа y, залежить від конкретної реалізації.

REAL — збігається з FLOAT, за винятком того, що значення n дорівнює максимальному і встановлюється залежно від реалізації.

DOUBLE — у 2 рази більше REAL.

— назви говорять самі за себе. Характерним є те, що практично всі СУБД дозволяють установлювати формат введення і відображення даних цих типів, хоча кожна СУБД зберігає такі дані у своєму внутрішньому специфіч-

ному форматі, незалежному від формату відображення.

Ми перерахували найпростіші стандартні типи даних, які підтримуються всіма без винятку СУБД. Проте майже в кожному діалекті SQL є 15-20 типів даних, специфічних саме для відповідної СУБД.

Отже, завдяки механізму користувальницьких типів даних, які будуть розглянутий нижче, до СУБД PostgreSQL включені додаткові типи даних, які за своєю більшістю є неоднорідними структурами або складеними типами (див. розділ „Структури даних“).

Домени

Домени в SQL призначені для визначення елементарної специфікації користуваль-

ницького типу даних з можливістю її одночасного використання в декількох таблицях. Од-

нак домен у SQL не відповідає повною мірою реляційним доменам, у першу чергу тому, що це

Кафедра економічної кібернетики та інформаційних технологій. Одеський національний політехнічний університет

М. Г. Глава. Технологія проектування і адміністрування баз даних та сховищ даних

47

 

 

не більш ніж синтаксичне спрощення: значення, які входять у домен повинні базуватися на вказаних раніше типах, і, у результаті, не є справжніми типами, обумовленими користувачем.

Для створення домену використовуються такі команди:

CREATE DOMAIN

ім’я_домену тип_поля

[DEFAULT значення]

 

[список обмежень];

 

Приклад

 

 

CREATE DOMAIN

Color

CHAR(8)

DEFAULT ‘???’

 

 

[CONSTRAINT Valid_Colors]

CHECK(VALUE IN(‘червоний’, ‘жовтий’, ‘зелений’, ‘синій’, ‘???’));

Тоді тип_поля при визначенні аргументу буде вказуватися як Color, а значення аргументу має бути включене в перелічену множину.

Змінити або видалити значення за замовчуванням і список обмежень даного домену можна командою, аналогічною наведеній, ALTER DOMAIN.

Знищити існуючий домен можна командою

DROP DOMAIN домен

опція;

де опція може приймати значення:

RESTRICT — домен не буде знищений, якщо на нього є хоча б одне посилання в табли-

цях;

CASCADE — команда буде виконана не тільки для самого домена, але й для таблиць з атрибутами, визначеними на його основі: тип таких полів буде перепризначений на базовий тип домену.

Підтримка користувальницьких типів даних в СУБД PostgreSQL

Створення нових типів

В розділі „Структури даних“ (див. стор. 4) згадані такі найпростіші типи даних, як перелічувані. В СУБД PostgreSQL, окрім доменів, реалізовано можливість створення істинно користувальницьких типів даних (User Defined Type UDT) з визначенням їхніх справжніх реляційних доменів шляхом перелічення всіх можливих значень типу даних, що створюється:

CREATE TYPE Користувальницький_тип AS ENUM (значення_1, значення_2, …);

де ENUM — означає перелічення якихось констант без вказівки їхнього будь-якого базового типу. Наприклад:

CREATE TYPE color AS ENUM ('червоний', 'померанчевий', 'жовтий', 'зелений', 'синій', 'фіолетовий');

Перелічуваний тип даних — це множина впорядкованих елементів, тому для роботи з ним призначені оператори порядку або порівняння (>, <, >=, <=) та спеціальні функції:

 

 

Таблиця 1 – Функції роботи з перелічуваним типом

 

Функція

Опис

Приклад

 

enum_first

Повертає перший елемент

enum_first(null::rainbow) = red

 

(anyenum)

множини

 

 

 

enum_last

Повертає останній елемент

enum_last(null::rainbow) = purple

 

(anyenum)

множини

 

 

 

enum_range

Повертає діапазон елементів,

enum_range('orange'::rainbow,

 

(anyenum,

які розташована між вказа-

'green'::rainbow) = {orange,yellow,green}

 

 

 

 

 

 

 

 

Кафедра економічної кібернетики та інформаційних технологій. Одеський національний політехнічний університет

48

М. Г. Глава. Технологія проектування і адміністрування баз даних та сховищ даних

 

 

Функція

Опис

Приклад

anyenum)

ними двома елементами мно-

enum_range(NULL, 'green'::rainbow) =

 

жини

{red,orange,yellow,green}

 

 

enum_range('orange'::rainbow, NULL) =

 

 

{orange,yellow,green,blue,purple}

Проте для визначення значень користувальницького типу замість ENUM може бути вказано будь-який базовий тип даних або їхня комбінація, як вказано нижче.

Складені типи даних

Складні типи визначаються командою:

CREATE TYPE Назва_типуAS ( Назва_атрибуту Тип_атрибуту [, ... ] )

Наприклад, для створення типу Address, який включає дані про місто, вулицю, будинок та квартиру, можна виконати команду:

CREATE TYPE Address AS

( City VARCHAR, Street VARCHAR, House SMALLINT, Flat SMALLINT);

Тепер до таблиці Student можна додати новий атрибут Address відповідного типу: ALTER TABLE Student ADD COLUMN Address ADDRESS;

Для внесення даних до атрибуту складного типу використовується два варіанти: '( значення_1 , значення_2 , … )'

або

ROW(значення_1 ,значення_2 , …),

де значення_1, значення_2, … — значення атрибуту_1, атрибуту_2 і т.д. опису складеного типу.

В запитах на отримання даних для доступу до атрибутів складного типу використовуються дужки, наприклад:

SELECT (Address).City FROM Student;

ВСУБД PostgreSQL створено багато складних типів:

типи, які автоматично встановлюються в процесі інсталяції, наприклад, геометричні, мережеві та бітові;

типи, підтримку яких необхідно встановлювати окремо, наприклад, багатомірні куби та дерева.

Зберігання в БД атрибутів складних типів даних ефективне лише при наявності спеціа-

льних алгоритмів їх обробки. Отже, для всіх складених типів створено відповідні функції, які дозволяють значно поширити можливості маніпулювання даними цих типів.

В наступних таблицях представлено приклади складних типів даних, а також операторів та функцій, які можна використовувати з ними.

 

 

 

 

Таблиця 2 – Геометричні типи даних

 

Тип

Розмірність

Опис

 

Форма

 

 

 

представлення

 

 

 

 

 

 

 

 

point

16 байт

Крапка на площині

 

(x,y)

 

 

line

32 байти

Нескінчена лінія

 

((x1,y1),(x2,y2))

 

 

(не повністю реалізована)

 

 

 

 

 

 

 

lseg

32 байти

Обмежений лінійний

 

((x1,y1),(x2,y2))

 

 

сегмент (відрізок)

 

 

 

 

 

 

 

 

 

box

32 байти

Прямокутник

 

((x1,y1),(x2,y2))

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Кафедра економічної кібернетики та інформаційних технологій. Одеський національний політехнічний університет

 

 

М. Г. Глава. Технологія проектування і адміністрування баз даних та сховищ даних

49

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Тип

 

 

Розмірність

Опис

 

 

Форма

 

 

 

 

 

 

 

представлення

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Замкнутий шлях (теж саме, що й

((x1,y1),...)

 

 

 

path

 

 

16+16n байт

багатокутник)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Відкритий шлях

 

 

[(x1,y1),...]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(ламана лінія)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

polygon

 

 

40+16n байт

Багатокутник (теж саме, що й за-

((x1,y1),...)

 

 

 

 

 

мкнутий шлях)

 

 

 

 

 

circle

 

 

24 байти

Коло

 

 

<(x,y), r>

 

 

 

 

 

 

 

(центр і радіус)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Таблиця 3 – Оператори, які можна використовувати

 

 

 

 

 

 

 

 

 

з геометричними типами даних

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Оператор

 

 

 

 

Опис

 

 

Приклад

 

 

+ , -

 

 

Перетворення

 

 

 

box '((0,0),(1,1))' + point

 

 

 

 

 

 

 

'(2.0,0)'

 

 

 

 

 

 

 

 

 

 

 

 

 

* , /

 

 

Масштабування / поворот

 

box '((0,0),(1,1))' * point

 

 

 

 

 

'(2.0,0)'

 

 

 

 

 

 

 

 

 

 

 

 

 

#

 

 

Перетин прямокутників

 

'((1,-1),(-1,1))' # '((1,1),(-1,-1))'

 

#

 

 

Кількість точок на шляху або в багатокутни-

 

# '((1,0),(0,1),(-1,0))'

 

 

 

 

 

 

ку

 

 

 

 

 

 

 

 

@-@

 

 

Довжина кола

 

 

 

@-@ path '((0,0),(1,0))'

 

 

@@

 

 

Центр

 

 

 

 

@@ circle '((0,0),10)'

 

 

##

 

 

Найближча точка до першого та другого

 

point '(0,0)' ## lseg '((2,0),(0,2))'

 

 

операнду

 

 

 

 

 

 

 

 

 

 

 

 

 

 

<->

 

 

відстань між

 

 

 

circle '((0,0),1)' <->

 

 

 

 

 

 

 

circle '((5,0),1)'

 

 

 

 

 

 

 

 

 

 

 

 

 

&&

 

 

Перекриття ?

 

 

 

box '((0,0),(1,1))' &&

 

 

 

 

 

 

 

box '((0,0),(2,2))'

 

 

 

 

 

 

 

 

 

 

 

 

 

<< , >>

 

 

Розміщено строго зліва або з права?

 

circle '((0,0),1)' << circle

 

 

 

 

 

'((5,0),1)'

 

 

 

 

 

 

 

 

 

 

 

 

 

<<| , |>>

 

 

Розміщено строго знизу або зверху?

 

box '((0,0),(3,3))' <<|

 

 

 

 

 

box '((3,4),(5,5))'

 

 

 

 

 

 

 

 

 

 

 

 

 

<^ , >^

 

 

Розміщено знизу або зверху з можливим то-

 

circle '((0,0),1)' <^

 

 

 

 

рканням?

 

 

 

circle '((0,5),1)'

 

 

 

 

 

 

 

 

 

 

 

?#

 

 

Перетинаються ?

 

lseg '((-1,0),(1,0))' ?#

 

 

 

 

 

box '((-2,-2),(2,2))'

 

 

 

 

 

 

 

 

 

 

 

 

 

?- , ?|

 

 

Лінія є горизонтальною або вертикальною ?

 

?- lseg '((-1,0),(1,0))'

 

 

?-| , ?||

 

 

Лінії перпендикулярні або паралельні ?

 

lseg '((0,0),(0,1))' ?-|

 

 

 

 

 

lseg '((0,0),(1,0))'

 

 

 

 

 

 

 

 

 

 

 

 

 

@>

 

 

Коло включає точку ?

 

circle '((0,0),2)' @> point '(1,1)'

 

 

 

 

 

 

Таблиця 4 – Функції обробки геометричних типів даних

 

 

 

 

 

 

 

 

 

 

 

Функція

 

Опис

 

 

 

Приклад

 

 

 

area(object)

Регіон

 

 

area(box '((0,0),(1,1))')

 

 

 

center(object)

Центр

 

 

center(box '((0,0),(1,2))')

 

 

 

diameter(circle),

Діаметр та радіус кола

 

diameter(circle '((0,0),2.0)')

 

 

 

radius(circle)

 

 

 

 

 

 

 

 

 

height(box),

Вертикальний, горизонтальний

 

height(box '((0,0),(1,1))')

 

 

 

width(box)

розмір прямокутнику

 

 

 

 

 

 

 

 

 

 

 

isclosed(path)

Шлях замкнутий?

 

isclosed(path '((0,0),(1,1),(2,0))')

 

 

 

length(object)

Довжина

 

length(path '((-1,0),(1,0))')

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Кафедра економічної кібернетики та інформаційних технологій. Одеський національний політехнічний університет

50

М. Г. Глава. Технологія проектування і адміністрування баз даних та сховищ даних

 

 

 

 

 

 

 

 

 

 

 

Функція

Опис

 

Приклад

 

npoints(path)

Кількість точок шляху

 

npoints(path '[(0,0),(1,1),(2,0)]')

 

npoints(polygon)

Кількість точок полігону

 

npoints(polygon '((1,1),(0,0))')

 

pclose(path),

Замкнути шлях /

 

pclose(path '[(0,0),(1,1),(2,0)]')

 

popen(path)

Розімкнути шлях

 

 

 

 

 

Також існує багато функцій перетворення одних геометричних типів в інші, декілька з

яких представлено нижче.

 

 

 

 

Таблиця 5 – Функції перетворення геометричних типів

 

 

 

 

 

 

Функція

Опис

 

Приклад

 

box(circle)

Коло в прямокутник

box(circle '((0,0),2.0)')

 

box(point, point)

Точки в прямокутник

box(point '(0,0)',

 

point '(1,1)')

 

 

 

 

box(polygon)

Полігон в прямокутник

box(polygon '((0,0),(1,1),(2,0))')

 

circle(box)

Прямокутник в коло

circle(box '((0,0),(1,1))')

 

circle(polygon)

Полігон в коло

circle(polygon '((0,0),(1,1),(2,0))')

 

point(box),

 

 

 

 

point(circle),

Центр прямокутника, кола,

point(box '((-1,0),(1,0))')

 

point(lseg),

лінії, полігону в точку

 

 

 

 

point(polygon)

 

 

 

Для роботи з даними, які описують елементи обчислювальних мереж, зокрема мережевих адрес, в діалекті PostgreSQL було створено відповідні складені типи:

 

 

Таблиця 6 – Типи даних мережевих адрес

Тип

Розмірність

Опис

Приклад

 

cidr

7 або 19 байт

IPv4 та IPv6 мережі

192.168.100.128/25

 

10.1.2.3/32

 

 

 

 

 

inet

7 або 19 байт

IPv4 та IPv6 host-вузли та ме-

 

 

режі

 

 

macaddr

6 байт

MAC адреси

'08002b:010203'

 

'08:00:2b:01:02:03'

 

 

 

 

 

До стандартного бітового типу BIT(n) для зберігання бітової строки довжиною точно в n біт в PostgreSQL додано тип BITVARYING(n) для зберігання бітової строки змінного максимального розміру в n біт та створено оператори роботи з бітовим типом даних:

Таблиця 7 – Оператори обробки бітового типу даних

Оператор

Опис

Приклад

||

Конкатенація

'10001' || '011' = 10001011

&

AND

'10001' & '01101' = 00001

|

OR

'10001' | '01101' = 11101

#

XOR

'10001' # '01101' = 11100

~

NOT

~ '10001' = 01110

<< , >>

Здвиг вліво, право

'10001' << 3 = 01000

Додаткові структурні елементи

В СУБД PostgreSQL існує низка додаткових елементів БД, які поширюють ефективність інформаційних систем і можливості для розробників.

До таких елементів відносяться багатовимірні масиви (array), які є і додатковим елементом, і додатковим типом даних.

Загальний синтаксис опису масиву визначається двома варіантами:

Кафедра економічної кібернетики та інформаційних технологій. Одеський національний політехнічний університет

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]