Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Ссылки на объект




Объекты, хранимые в объектных таблицах, имеют одно преимущество перед объектами, хранимыми как атрибут строки: на них можно ссылаться. Ссылка есть уникальный внутренний идентификатор объекта (адрес объекта в базе данных), и получить его можно с помощью функции REF:

 

SELECT REF(a) FROM Addresses a;

 

Перед тем как подробно рассматривать такое понятие как ссылка на объект, стоит несколько слов сказать об организации ссылочной целостности при объектном подходе по сравнению с подходом реляционным. В реляционном подходе ссылочную целостность контролирует сама СУБД при помощи создаваемых пользователем внешних ключей. Причем, для того чтобы указать реальную связь объекта из одной реляционной таблицы с объектом из другой реляционной таблицы прописывается атомарное значение (значение первичного ключа главной таблицы, чаще всего являющееся целым числом).

В случае объектного подхода, задача контроля ссылочной целостности полностью лежит на программисте. Несмотря на то, что в одной таблице можно сослаться на другую таблицу при помощи ссылки на объект, вопрос сохранности объектов, на которые указывают ссылки, самой СУБД не регулируется.

 

Примечание: ссылка представляет собой уникальный идентификатор таблицы, в которой содержится объект плюс уникальный идентификатор супертипа, от которого унаследован объект и, наконец, уникальный идентификатор строки таблицы (ROWID), на который ссылается объект. В итоге получается длинное число, которое можно использовать при сравнении с другими ссылками (например, для определения, ссылаются ли ссылки на объекты на объекты одного и тоже супертипа).

 

Для демонстрации работы со ссылками на объект несколько изменим структуру таблицы DEPARTMENTS:

 

ALTER TABLE DEPARTMENTS DROP (Addr);

ALTER TABLE DEPARTMENTS ADD (Addr REF address_typ SCOPE IS Addresses);

 

Фраза SCOPE IS при определении типа как ссылки на существующий объект необязательна, но позволяет фактически ссылаться только на объекты какой-то определенной объектной таблицы. Если параметр SCOPE IS не указан, то подразумевается, что поле Addr в таблице Departments может ссылаться на объекты типа address_typ, которые могут находиться в какой угодно таблице. Другими словами, разные записи одного поля таблицы могут ссылаться на объекты, физически расположенные в разных таблицах.

 

UPDATE Departments d

SET d.Addr=

(SELECT REF(a) FROM Addresses a

WHERE VALUE(a)= address_typ('141980', 'Дубна', 'Университетская, 19'));

 

Ссылочный тип отличается от реляционного FOREIGN KEY ограничения тем, что он обеспечивает выборку данных по значению, на которое указывает ссылка (не нужно внутреннее объединение таблиц внутри одного запроса):

 

Select d.Caption, DEREF(d.Addr).ZIP, DEREF(d.Addr).City, DEREF(d.Addr).Location From Departments d;

 

Примечание: функция DEREF применяется для явного раскрытия ссылки, то есть для получения объекта, который находится по указанному адресу. При этом СУБД самостоятельно определяет таблицу, из которой необходимо достать объект.

 

В отличие от внешнего ключа, поле-ссылка может указывать на несуществующий объект. Другими словами возникает понятие повисшей (не существующей ссылки). Этот факт можно выявить с помощью оператора DANGLING («повисший»):

 

-- удалим строку из таблицы Addresses;

Delete from Addresses;

 

-- выберем строки, содержащие повисшие ссылки

SELECT d.Caption FROM Departments d Where Addr IS DANGLING;

 

-- выберем строки, содержащие действительные ссылки

SELECT d.Caption FROM Departments d Where Addr IS NOT DANGLING;

 


Поделиться:

Дата добавления: 2015-08-05; просмотров: 56; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.005 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты