Дополнительные типы связей при проектировании баз данных

Сама связь, ее вид определяет, с одной стороны, кол-во возможных подчиненных, дочерних образцов, как то любое число, или другие варианты, с другой стороны, связь фактически определяет являются ли две таблицы в соотношении зависимой, подчиненной, или обе они независимые. Если формальная связь – тогда по сути они независимые.

4 вида связей:
Many-to-many. Один образец из первой сущности связан со многими образцами из второй сущности. И наоборот, каждый образец из второй сущности может обладать, быть связан с несколькими образцами из первой сущности. Например: покупатели и продавцы, преподаватели и студенты (а во времена Ломоносова один преподаватель учил одного ученика!).

Энарная связь (например, у тернарной связи несколько родительских таблиц и одна подчиненная).

Рекурсивная связь. Это когда таблица, чаще всего либо связана с собой, либо несколько таблиц связаны по цепочке. Начальник и подчиненный.

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

Рассмотрим более подробно каждую из связей.

1. Many-to-many

Приведем пример структуры базы данных:

В таком виде не ясно, какие студенты изучают какие курсы. Дополнительная таблица и должна внести ясность. Аналогия продавцы и покупатели, третья таблица – заказы.

2. Энарные связи

Две к одной уже рассмотрели. Сейчас более сложный пример с тремя родительскими таблицами и одной подчиненной.

Таблица: какие-то покупатели приобрели какие-то товары, выпущенные какими-то компаниями. Рекомендуется оставлять не больше двух связей с дочерней таблицей. Три входа считается не нормальным. Нужно изменить для упрощения. Смотрим на глаголы, которые более важны. Например, должно ли изделие предлагаться компанией прежде, чем оно продано? Может ли покупатель иметь одиночный контракт, включая изделия из нескольких различных компаний? Должны ли мы следить за тем, какое изделие принадлежит какой компании? Например, если главным является ответ: изделие предлагается компанией прежде, чем оно может быть продано, то структуру можно переделать. Товар, выпущенный какими-то компаниями, собирается в одну таблицу, а затем предлагается покупателю.

3. Рекурсивные связи (унарные)

Рекурсивные связи или «рыболовный крючок».

Например: корпорация Microsoft, в нее входят несколько подчиненных компаний.

Бывают два вида рекурсивных связей:
— Однотабличная рекурсия («петля»).
— Сетевая (минимум двухтабличная). Иногда называют паутиной. Родительская сущность может иметь любое кол-во дочерних, а дочерние любое кол-во родительских. В отношении, например, людей такого быть не может. Важный момент: какая связь должна быть, обязательная или факультативная? Куда будет мигрировать FK, в область ключевых атрибутов или в область неключевых? Должна быть одна факультативная связь, так как, например, над ректором нет фактического начальника (если бы не было факультативной связи, то нельзя было бы внести ни одной записи). На одном конце связи, как правило, должен стоять ромб, обозначающий, что нуль разрешен

4. Связи подтипа (категоризации)

Пример: разные виды счетов. Три вида счетов рассмотрим.

Рекомендуется выделить похожие, однотипные колонки и свести их в одну колонку, то есть выделить общую таблицу для этих колонок, а все оставшиеся поля выделить в отдельную таблицу. Между ними должен быть построен специальный информационный узел, называемый дискриминатором, который позволяет взять дальнейшие поля из той или иной таблицы. Это как запись вариантными частями, есть обязательные поля, есть вариантные поля и есть еще case-часть, которая и является дискриминатором, позволяет выбрать тот или иной вариант.

В account_type хранится некоторая буква, обозначающая тип счета (например, L — ссуда).

а) Полные и неполные структуры подтипа
Неполный (или незавершенный подтип) показывает, что разработчик модели допускает, что могут быть другие сущности подтипа. (одна линия под кружком).

Полный подтип указывает, что разработчик модели уверен, что все возможности сущности подтипа уже включены. Других вариантов подтипа быть не может. Говоря о счетах, точнее было бы написать неполный, так как со временем появляются новые счета (как новые тарифы у операторов).

В качестве дискриминатора в данном примере могут выступать: L (ссуда), C (контроль), S (сбережения).

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

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

4 варианта:
1) Полное и исключающее вхождение EС (exclusive complete) Сущность должна быть одним и только одним исследуемым подтипом. Так общая сущность автомобиля должна быть легковым, грузовым или самосвалом.

2) Неполное и исключающее вхождение EI (exclusive incomplete)
Сущность может быть одним и только одним исследуемым подтипом. Так общая сущность автомобиля может быть легковым, грузовым или самосвалом, или каким-нибудь другим автомобилем, например, автобусом.

3) Полное и включающее вхождение IС (inclusive complete)
Сущность должна быть по крайней мере одним из исследуемых подтипов. Автомобиль является одновременно и легковым и грузовым, например, пикап.

4) Неполное и включающее вхождение II (inclusive incomplete)
Сущность может быть по крайней мере одним из исследуемых подтипов. Автомобиль является автомобилем другого назначения, например, тягачом.

Причины создания таких связей и моделей:
1) Сущности совместно используют общий набор атрибутов.
2) Сущности совместно используют общий набор связей.
3) Сущность подтипа может быть включена в модель, когда бизнес правила как-то этого требуют.


Оставить комментарий





Статистика

Рейтинг@Mail.ru