ПБД (9) - Лекция №2 - Модели данных
Модели данных
- концептуальные
- ER - сущность-связь
- физические
- реляционная;
- объектная;
- объектно-реляционная - отношение, содержащие дополнительные возможности;
- полуструктурированных данных - и сами данные, и структуры, и сведения о них.
Entity-Relationship
Она же ER - модель "сущность-связь".
Нотации
Системы текстовых или иных обозначений, позволяющие описывать модель.
Мартина
IDEF/X
Бартера
Чена
Связи:
- 1-1, один к одному;
- 1-М, один ко многим;
- М-1, многие к одному;
- М-М, многие ко многим.
ISA-связи - базовая и производная сущности. Производная наследует атрибуты и ключ базовой.
Слабые сущности - не могут существовать сами по себе. В состав которой входят атрибуты (ключи) другой сущности, так как собственных атрибутов не достаточно. Другая сущность называется поддерживающей.
Пример:
Сущности:
- Актёр (ИНН, ФИО, Образование);
- Фильм (Название, Год, Длительность, Название студии);
- Студия (Название студии, адрес);
- Актёр-фильм (ИНН, Название, Год).
Три варианта преобразования ISA:
- сущность преобразовывается в отношение, содержащее атрибуты самой себя и ключи базовой;
- объектно-ориентированный подход: для каждой возможной информационной сущности создаётся собственное отношение со всеми необходимыми атрибутами.
Плюс: нет дублирования, оптимизация объёма хранения.
Минус: слишком много отношений; - нулевые отношения (null): одно отношение со всеми возможными атрибутами. То есть, если где-то какие-то атрибуты не требуются, то они заполняются null значениями.
Преобразование ER-модели в реляционную
- Множество сущностей $\rightarrow$ отношение;
- ключ $\rightarrow$ ключ;
- связь 1-М $\rightarrow$ к сущности на стороне М добавляется внешний ключ, указывающий на первичный ключ сущности на стороне 1;
- связь М-М $\rightarrow$ создается дополнительное отношение, содержащее ключи связанных таблиц;
- слабая сущность $\rightarrow$ отношение с атрибутами слабой сущности плюс ключи поддерживающих сущностей. Например:
Кафедра( Название кафедры, Название ВУЗа, заведующий кафедрой)
Объектная модель
Уникальный идентификатор объекта - OID. У объектов поддерживаются методы. Есть наследование, инкапсуляция и полиморфизм. Можно создавать собственные типы данных, составные типы (структуры, коллекции, ссылки). Разделение на интерфейс и реализацию.
Объекты - некоторая переменная, может изменять значение, характеризуется своим OID.
Литерал - может быть сколь угодно сложной структурой, но не может изменять своё значение. Если в нём что-то изменить, то получится уже другой литерал.
Объектная модель состоит из:
- ODL (язык определения объектов) - для описания БД;
- OML (язык манипулирования данными) - для работы с объектами, расширение для стандартного языка;
- OQL (язык объектных запросов) - основан на SQL, имеет расширение.
Возможности описания объектных БД
Классы
ODL позволяет описывать классы - объектные типы.
class название [extends базовый класс : интерфейсы] (extent название key ключи) { атрибуты методы связи };
class Actor (extent EA) { attribute struct {string f, string i, string o} fio; attribute string edu; attribute integer inn; relationship set<Film> films inverse Film::actors }; class Film (extent EF key(title, year)) //составной ключ { attribute string title; attribute integer year; attribute enum {col, bw, sl} type; attribute integer len; relationship set <Actor> actors inverse Actor::films; relationship Studio stud inverse Studio::films; }; class Studio (extent ES key name, mgn) //альтернативный ключ { attribute string name; attribute addr; relationship set<Film> films inverse Film::stud integer mgn(); integer filmscnt(integer year) raises (noFilm, noyear); };
Интерфейсы
Интерфейс - аналог класса, который не имеет реализации и объектов.
interface название [extends интерфейс1 : интерфейс2] { атрибуты методы связи };
interface IVuz { attribute ... string fun(); relationship .... };
Атрибуты
attribute тип название
Коллекции
set <тип> - множество bag<тип> - мультимножество array<тип, количество> dictionary <тип (ключ), тип (значение)>
Методы
возвращаемый_тип название (аргумент1, аргумент2, ...) raises(исключение1, исключение2...)
Аргумент
in/out/inout тип имя