ПБД (9) - Лекция №3 - Модели данных (продолжение)

Материал из Кафедра ИУ5 МГТУ им. Н.Э.Баумана - студенческое сообщество
Версия от 12:53, 2 ноября 2016; 195.19.43.52 (обсуждение) (Переход от объектной модели к реляционной модели)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Продолжаем работать с нашим примером:

9sPBDl2pic2.png

ODL

Для нашего примера

Кстати, ключи везде прописывать не обязательно, потому что по умолчанию всегда будет OID. И он будет назначаться всегда, даже если мы объявим ещё и свой ключ.

class Film(extent Films
	key(name, year))
{
 attribute string name;
 attribute integer year;
 attribute integer len;
 attribute enum Ftype {bw, color} type;
 
 relationship Studia stud
	inverse Studia::fs;
 
 relationship Set<Actor> acts 
	inverse Actor::infs;
 
 -- пример метода. Считает актёров и возвращает noActors, если нету ни одного
 integer ActCount() raises(noActors);
 
 void FinYear(in integer year, out Set<Films>) raises(noFilms, badYear);
};
 
class Studia(extent Studies)
{
 attribute string sname;
 attribute Struct Addr
	{
	 string city,
	 string street
	} addr;
 
 relationship Set<Film> fs
	inverse Film::stud;
};
 
class Actor(extent Actors
	key inn)
{
 attribute string inn;
 attribute string fio;
 attribute List<string> edu;
 
 relationship Set<Film> infs
	inverse Film::acts;
};
 
class MF extends Film(extent MFS)
{
 attribute string drawer;
};
 
class Drama extends Film (extent Dranas)
{
 attribute Struct
	{
	 Set<string> authors,
	 string bname
	} book;
};

Для примера с ВУЗом

class Vuz(extent Vs)
{
 attribute string name;
 
 relationship Set<Kaf> Kafs
	inverse Kaf::vuzz;
};
 
-- слабая сущность
class Kaf(extent Ks
	key(kname, vuzz))
{
 attribute string kname;
 
 relationship Vuz vuzz
	inverse Vuz::Kafs;
};

Про связи

Все связи строго бинарны - можно связать только два объекта. Чтобы связать больше объектов (например, три), надо делать так:

class Gr(extent ...)
{
 attribute ...
 
 relationship Set<ADG> gin
	inverse ADG::g;
};
 
class Dis(extent ...)
{
 relationship Set<ADG> din
	inverse ADG::d;
};
 
class Aud(extent ...)
{
 relationship Set<ADG> in
	inverse ADG::a;
};
 
-- этот класс содержит связи
class ADG(extent edgs)
{ 
 relationship Aud a
	inverse Aud::in;
 relationship Dis d
	inverse Dis::din;
 relationship Gr g
	inverse Gr::gin;
};

Переход от объектной модели к реляционной модели

Когда это может понадобиться:

  • при переходе из объектного проекта в реляционную реализацию;
  • при необходимости создать реляционную проекцию в объектной БД.

Преобразования:

  • класс с экземплярами атомарных атрибутов преобразуется в схему отношений с теми же самыми атрибутами;
  • составные атрибуты преобразуются в ненормализованное отношение, которое после этого надо нормализовать во избежание аномалий;
  • методы не преобразуются вообще, они теряются, так как в реляции методов нет;
  • ключ преобразуется в ключ;
  • если ключа не было, то вводится дополнительное поле, которое будет ключом;
  • у структур поля преобразуются в отдельный атрибут;
  • множества преобразуются в множества кортежей.
  • Отношение М-М = отдельная таблица с ключами
  • Отношение 1-М = FK на стороне М

Пример с нашим примером:

Films(name, year, len, type);
Stusies(sname, city, street, sid);
Actor(f, i ,o, edu, inn);

Объектно-реляционная модель данных

Это расширение реляционной модели. В основе лежит реляция - те же самые схемы отношений, экземпляры отношений, но добавляются некоторые возможности:

  • составные атрибуты:
    • структура;
    • коллекция:
      • список;
      • массив;
      • мультимножество;
      • множество структур (вложенное отношение):
Actors(inn, fio, edu(year, Vuz));
  • методы;
    • методы экземпляров;
    • методы классов;
  • ссылки - теперь в качестве значения атрибута можно хранить ссылку на конкретный кортеж:
Studies(sname, addr, sid
Films(name, year, len, type, stud(*(Studies)));

Для соблюдения стандарта SQL'99 связь 1:M создаётся добавлением в таблицу со стороны М ссылки на кортеж таблицы со стороны 1.

А связь М:М создаётся путём отдельной дополнительной таблицы, содержащей ссылки на соответствующие кортежи таблиц.

Сравнение объектной и объектно-реляционной модели

Объектная модель Объектно-реляционная модель
класс → экстент
объект
схема отношения → отношение (таблица)
кортеж
методы методы
структуры, коллекции,
множество структур (классы)
структуры, коллекции,
множество структур (схемы отношений или вложенные отношения)
OID скрыт OID может быть доступен
1 класс - 1 экстент
1 интерфейс - N классов и N их экстентов
1 схема отношений - N отношений (таблиц)
обратной совместимости с реляционной моделью нет обратно совместима с реляционной моделью