ПБД (9) - Лекция №2 - Модели данных: различия между версиями
(→Методы) |
|||
(не показана 1 промежуточная версия этого же участника) | |||
Строка 130: | Строка 130: | ||
методы | методы | ||
связи | связи | ||
};</source> | |||
<source lang=cpp>interface IVuz | |||
{ | |||
attribute ... | |||
string fun(); | |||
relationship .... | |||
};</source> | };</source> | ||
Текущая версия от 12:40, 2 ноября 2016
Модели данных
- концептуальные
- 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 тип имя