Структуровані типи

Перейдемо до вивчення структурованих типів Нижче наведено ряд прикладів

CREATE TYPE POINT AS ( X FLOAT, Y FLOAT ) NOT FINAL

CREATE TYPE LINESEG AS ( BEGIN POINT, END POINT ) NOT FINAL }_

15 Крім того, для методів, на відміну від функцій і процедур, передбачається певне звязування під час прогону (див главу 20)

Примітка Термін метод і трохи дивний сенс, який повинен бути наказаний йому в контекстах, подібних розглянутому в даному розділі, відбуваються з області обєктно-орієнтованих засобів (див главу 25)

(В дійсності спроба виконати другий оператор закінчиться невдачею, оскільки BEGIN і END в мові SQL є зарезервованими словами, але автор ввів ці ідентифікатори просто для зручності) Тому у своїй простій формі (тобто якщо не розглядаються різні необовязкові специфікації) оператор створення структурованого типу має наступний синтаксис

CREATE TYPE &lttype name&gt AS &ltrepresentation&gt NOT FINAL

Нижче наведені додаткові пояснення

1 Обовязкова специфікація NOT FINAL розглядається в розділі 20

Примітка Передбачається, що у версії SQL: 2003 замість неї буде дозволено здавати альтернативну конструкцію FINAL

2 Параметр &ltrepresentation&gt представляє за своєю структурою розділений за пятими список визначень атрибутів &ltat tribute defini tion commalist&gt, взятий у круглі дужки в цьому списку параметр &ltattribute&gt складається з імені атрибута &ltattribute name&gt, за яким слідує імя типу < type name&gt. Але зверніть особливу увагу на те, що ці так звані атрибути не є ються атрибутами в реляційному сенсі, почасти тому, що структуровані типи не є реляційними типами (див розділ 6) Більш того, застосовуваний тут параметр подання &ltrepresentation&gt позначає фактичне фі зіческое уявлення, а не просто деякий можливе подання рас розглянутого структурованого типу

Примітка Але проектувальник типу має можливість ефективно приховати цей факт (тобто дійсно приховати, що подання є фізичною) завдяки продуманому вибору і ретельному проектуванню операторів Наприклад, якщо мати на увазі наведене вище визначення типу POINT, TO система автоматично надає оператори для отримання доступу до поданням точки у вигляді декартових координат (див пункти 3 і 6), але проектувальник типу може вручну надати оператори для отримання доступу також і до подання у вигляді полярних координат

3 Кожне визначення атрибута викликає автоматичне визначення двох відпо ствующих операторів (по суті аналогічних методам), причому один з них яв ляется спостерігачем (Observer) і один – модифікатором (Mutator), які пре доставляють функціональні можливості, аналогічние16 операторам ТНЕ_ мови Tutorial D Наприклад, якщо змінні LS, Р і z, відповідно, відносяться до ти пам LINESEG, POINT і FLOAT, то наступні оператори присвоювання є допустимими

16 Заради досягнення максимальної точності слід зазначити, що в мові SQL модифікатори не є насправді модифікаторами у звичайному розумінні цього терміна (тобто вони не є операторами оновлення), але можуть використовуватися таким чином, щоб з їх допомогою надавалися звичайні функціональні засоби модифікаторів Наприклад, оператор SET Р Х = Z (Який фактично не містить явного виклику модифікатора) визначений як скорочений варіант оператора SET P = P X (Z) (Який містить такий виклик)

/ * Діє як спостерігач стосовно до атрибуту X змінної Р

*/

SET Z = РХ

/ * Діє як модифікатор стосовно до атрибуту X

змінної Р * /

SET РХ = Z

/ * Діє як спостерігач стосовно до атрибуту BEGIN

змінної LS * /

SET X = LSBEGINX

SET LSBEGINX = Z

4 У розглянутому операторі не передбачена яка-небудь конструкція, анало гічних специфікації CONSTRAINT мови Tutorial D

5 Оператори порівняння, які можуть застосовуватися до обумовлених структурованих ванним типам, задаються за допомогою окремого оператора CREATE ORDERING Нижче наведені два приклади

CREATE ORDERING FOR POINT EQUALS ONLY BY STATE

; CREATE ORDERING FOR LINESEG EQUALS ONLY BY

STATE

Ключові слова EQUALS ONLY означають, що для значень розглянутого типу єдиними допустимими операторами порівняння є = і / = (Або, швидше, о, оскільки в мові SQL для позначення операції порівняння на нерівність використовується саме такий знак операції) Ключові слова BY STATE вказують, що два значення аналізованого типу є рівними, якщо і тільки якщо їх ie атрибути рівні при всіх значеннях i Опис інших можливих специфікацій CREATE ORDERING виходить за рамки даної книги досить сказати, що, наприклад, при бажанні для структурованого типу може бути також визначена семантика оператора >. Але слід зазначити, що якщо даний структурований тип не має повязаного з ним упорядкування, то зі значеннями цього типу не можуть виконуватися ніякі операції порівняння, навіть порівняння на рівність цілком очевидно, що такий стан справ має далекосяжні наслідки

6 Жоден з селектор не надається автоматично, але ефект, аналогічний дії цих операторів, може бути досягнутий такий спосіб Насамперед, мова SQL автоматично надає те, що іменується в ньому функціяміконструкторамі (Constructor function), але такі функції при кожному виклику повертають одне і те ж значення, а саме те значення розглянутого типу, всі атрибути якого мають застосовне задане за замовчуванням значеніе17 Наприклад, при наступному виклику функції-конструктора

POINT   ()

17 Застосовується за замовчуванням значення для певного атрибута можна вказати у складі відповідної ухвали атрибута Якщо жодне подібне значення не вказано явно, то застосовується за умовчанням значення (свого роду значення, задане за замовчуванням для використання за замовчуванням) буде порожнім

ПриміткаЗ причин, які не розглядаються в цій книзі, що застосовується за умовчанням значення обовязково має бути порожнім, якщо типом атрибута є або тип рядка таблиці, або визначається користувачем тип (такий як POINT), і він обовязково повинен бути заданий або за допомогою порожнього значення, або порожнього масиву (позначеного як ARRAY []), якщо це тип масиву Тому, наприклад, виклик функцііконструктора LINESEG () повинен обовязково повернути відрізок прямої, обидва компоненти якого, BEGIN і END, ПОВИННІ бути порожніми

повертається точка із заданими за замовчуванням значеннями у і X Але після цього відразу ж зявляється можливість викликати модифікатори X і Y (див пункт 3) для отримання будь-якої такої точки, яка має бути визначена за допомогою результатів цього виклику функції-конструктора Більше того, існує можливість звязати первісну операцію конструювання і наступну операцію модифікації в один вираз, як показано в наступному прикладі

POINT () Х (50) Y (25)

Нижче наведено більш складний приклад

LINESEG () BEGIN ( POINT ()

.X(50 )Y(2 5))   END   ( POINT () X(73)Y(08))

Примітка При бажанні перед викликами функції-конструктора можна ставити необовязкове ключове слово NEW без зміни їх семантики, наприклад, наступним чином

NEW LINESEG () BEGIN ( NEW POINT

()X (5 0) Y( 25) ) END   ( NEW POINT ()X( 7 3) Y(0 8))

7 До структурованим типам застосовуються правила суворої типізації, за винятком, можливо, тих випадків, які описані в главі 6, розділ 66 (підрозділ )

8 Крім уже згаданих операторів, у разі необхідності можуть бути определе ни (а в подальшому можуть бути видалені) додаткові оператори

9 Передбачена можливість видалення структурованих типів і упорядкувань ORDERING Крім того, передбачена можливість змінювати визначення та ких типів за допомогою оператора ALTER TYPE, наприклад, можна додавати нові атрибути або видаляти існуючі (іншими словами, змінювати подання типу)

Додаткова інформація про структурованих типах SQL наведена в наступному розділі (розділ 66), а також в главах 20 і 26

Джерело: Дейт К Дж, Введення в системи баз даних, 8-е видання: Пер з англ – М: Видавничий дім «Вільямс», 2005 – 1328 с: Ил – Парал тит англ

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*