Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпора.doc
Скачиваний:
20
Добавлен:
14.05.2015
Размер:
646.14 Кб
Скачать

5.1. Недостатки и ограничения реляционной модели. Постреляционные бд, примеры. Введение объектной модели в язык sql3. Примеры sql-запросов, содержащих объекты.

Недостатки и ограничения реляционной модели данных:

1.Реляционная модель данных не допускает естественного представления данных со сложной (иерархической) структурой, поскольку в ее рамках возможно моделирование лишь с помощью плоских отношений (таблиц). Все отношения принадлежат одному уровню, многие значимые связи между данными либо теряются, либо их поддержку приходится осуществлять в рамках конкретной прикладной программы.

2.По определению в реляционной модели поля кортежа могут содержать только атомарные значения. Однако, в приложениях САПР, ГИС и системах ИИ должны проводиться операции со сложно-структурированными объектами.

3.Слишком высокий уровень раздробления данных по многочисленным таблицам, что (1) уменьшает скорость выполнения запросов, (2) увеличивает их сложность, а значит возможность совершения дополнительных ошибок.

Обойти эти ограничения можно было, если бы реляционная модель допускала: возможность определения новых типов данных; определение наборов операций, связанных с данными определенного типа.

Постреляционная модель, т.е. модель систем, относящихся к следующему поколению.

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

1.Направление Postgres. Основная характеристика: максимальное следование (насколько

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

2.Направление Exodus/Genesis. Основная характеристика: создание собственно не системы, а генератора систем, наиболее полно соответствующих потребностям приложений. Решение достигается путем создания наборов модулей со стандартизованными интерфейсами, причем идея распространяется, вплоть до самых базисных слоев системы.

3.Направление Starburst. Основная характеристика: достижение расширяемости системы и ее приспосабливаемости к нуждам конкретных приложений путем использования стандартного механизма управления правилами.

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

Введение объектной модели в язык SQL3:

Попытки совместить средства манипулирования данными реляционной модели и способы описания внешнего мира объектно-ориентированной модели получили развитие в языке SQL -3.

1.Характеристики объекта определяется описанием строки таблицы. Поэтому вводится специальная возможность описания нового типа данных:

Create type Address (

number char (6),

street char (30),

aptno integer,

city char (30),

state char (2),

zip integer );

2.На основе нового типа могут быть определены таблицы, например: Create table Addresses of Address;

3.Новые типы допускается использовать и для определения столбцов (т.е. игнорируется требование атомарности атрибутов реляционной модели):

Сreate table People of new type Person (

name char (30),

address Address,

birthdate date, );

4.Наследование определяется с помощью фразы under .

Create type Employee under Person (

empno char(10),

dept ref(Department) );

Здесь атрибут dept является ссылкой на объект, хранящийся в таблице Department . т.е. в понятиях реляционной модели в этом столбце должен быть записан внешний ключ, указывающий на одну из строк таблицы Department . В SQL-3 предполагается, что каждый объект имеет уникальный идентификатор - OID , именно он используется при создании ссылок на объекты.

Также в операторе CREATE TABLE можно определить и методы доступа к вновь созданным типам данных:

Create table People of new type Person (

name char(30),

address Address,

birthdate date

function age(:р ref(Person)) return date;

begin

current_age:=:р.birthdate-current_date;

return current _ age ;

end ; );

В этом примере задана функция age , которая вычисляет возраст объекта типа Person , хранимого в таблице People . К данной функции можно обращаться из оператора SELECT.