Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OBDZ3_Lect_5-7_Arcitecture.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
406.43 Кб
Скачать

3.4.7. Об'єктні розширення реляційних субд. Мова Sql-3.

Спроби сумістити засоби маніпулювання даними реляційної моделі і способи опису зовнішнього світу об'єктно-орієнтованої моделі отримали розвиток в мові Sql-3

Розглянемо способи визначення даних.

Розробники Sql-3 вважають, що характеристики об'єкту визначається описом рядка таблиці. Тому, вводиться спеціальна можливість опису нового типу даних:

Create type Address as object( id number , street char (30), aptno integer, city char (30), state char (2), zip integer ) ;

На основі нового типу можуть бути визначені таблиці, наприклад:

Create table Addresses of Address;

Нові типи допускається використовувати і для визначення стовпців (тобто ігнорується вимога атомарності атрибутів реляційної моделі):

Create table People ( id number, name char (30), paddress Address, birthdate date );

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

Create OR REPLACE type Employee as object( empno number, id ref Address );

Тут атрибут id є посиланням на об'єкт, що зберігається в таблиці Address. Тобто в поняттях реляційної моделі в цьому стовпці повинен бути записаний зовнішній ключ, що вказує на один з рядків таблиці Address. Насправді, в Sql-3 передбачається, що кожен об'єкт має унікальний ідентифікатор - OID, саме він використовується при створенні посилань на об'єкти.

create or replace type address_type

as object

(city varchar2(30),

street varchar2(30),

state varchar2(2),

zip number)

/

Type created.

create or replace type person_type

as object

(name varchar2 (30) ,

dob date,

home_address address_type,

work_address address_type)

/

Type created.

create table people of person_type

/

Table created.

Name Type

NAME VARCHAR2 (30)

DOB DATE

HOME_ADDRESS ADDRESS TYPE

WORK ADDRESS ADDRESS TYPE

Використовуємо створений тип

create table people

(name varchar2(10),

home_address address_type,

work_address address_type

)

/

Таblе created.

Declare

l_home_address address_type;

l_work_address address_type;

Begin

l_home_address := Address_Type('123 Main S t r e e t ' , null,

'Reston', 'VA', 45678);

l_work_address :=Address_Type('l OracleWay', null,

'Redwood', 'CA', 23456);

insert into people

(name, home_address, work_address)

Values

('TomKyte', l_home_address, l_work_address);

end;

/

CREATE OR REPLACE TYPE Point AS OBJECT (

- Точка определяется своими координатами в декартовой системе координат.

х NUMBER,

у NUMBER,

- Возвращает строку символов '(х, у)'.

MEMBER FUNCTION ToString RETURN VARCHAR2,

PRAGMA RESTRICT_REFERENCES(ToString, RNDS, WNDS, RNPS, WNPS),

- Возвращает расстояние между р и текущей Point (SELF).

- Если р не определена, то по умолчанию используется (О, О).

MEMBER FUNCTION Distance(p IN Point DEFAULT Point(0, 0)) RETURN NUMBER,

PRAGMA RESTRICT_REFERENCES( Distance, RNDS, WNDS, RNPS, WNPS),

- Возвращает сумму р и текущей Point.

MEMBER FUNCTION Plus(p IN Point) RETURN Point;

PRAGMA RESTRICT_REFERENCES(Plus, RNDS, WNDS, RNPS, WNPS),

- Возвращает текущую Point * n

MEMBER FUNCTION Times(n IN NUMBER) RETURN Point,

PRAGMA RESTRICT_REFERENCES(Times, RNDS, WNDS, RNPS, WNPS)

)

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