- •Лекция №8. Тема: «er-моделирование»
- •8.1. Определение сущностей и связей. Построение er-модели.
- •8.2. Слабая сущность.
- •8.3. Преобразование er-модели в реляционную базу данных
- •2. Для каждой слабой сущности создается отношение, состоящее из всех простых атрибутов этой сущности и дополнительных столбцов первичных ключей сущностей, от которых зависит ее существование.
- •3. Когда две сущности участвуют в связи один-ко-многим (1-м), отношение, представляющее сущность с кардинальностью м, должно иметь столбец внешнего ключа, представляющий эту связь.
- •4. Когда две сущности участвуют в связи один-к-одному (1-1), в отношение, представляющее одну из этих сущностей, необходимо включить столбец внешнего ключа.
- •5. Если две сущности участвуют в связи многие-ко-многим (м-м), необходимо создать отношение из внешних ключей двух отношений, представляющих сущности-участники.
- •7. Если в связи участвует более двух сущностей, необходимо создать отношение, состоящее из внешних ключей всех отношений, представляющих сущности-участники.
3. Когда две сущности участвуют в связи один-ко-многим (1-м), отношение, представляющее сущность с кардинальностью м, должно иметь столбец внешнего ключа, представляющий эту связь.
Между сущностями, которые мы рассматривали, было несколько связей типа 1-М. В частности, связь между Филиал и Счет (рис. 3) имеет тип 1-М, это означает, что в отношении Счет должен присутствовать в качестве внешнего ключа столбец Название_филиала.
4. Когда две сущности участвуют в связи один-к-одному (1-1), в отношение, представляющее одну из этих сущностей, необходимо включить столбец внешнего ключа.
Не следует помещать внешние ключи в оба отношения, так как это создает возможность для записи несогласованных данных.
Однако следует ответить на вопрос: в каком отношении лучше поместить столбец внешнего ключа для отражения связи 1—1. Согласно определению, сущность полностью участвует в связи, когда каждый ее экземпляр должен участвовать в этой связи. Итак, для представления связи 1-1 внешний ключ следует помещать в отношение, представляющее сущность, которая более близка к полному участию в связи.
Иногда встречаются связи 1-1, в которых обе сущности участвуют полностью. Если эти сущности не участвуют больше ни в каких иных связях, иногда можно объединить их в одно отношение. Следует отметить, что если внешний ключ представляет связь 1-1, дублирующие значения этого ключа должны быть запрещены.
5. Если две сущности участвуют в связи многие-ко-многим (м-м), необходимо создать отношение из внешних ключей двух отношений, представляющих сущности-участники.
Связь «имеет» на рис. 4 между Клиент и Счет имеет кардинальность М-М. Чтобы представить ее в реляционной модели, нужно отношение Владение счетами, состоящее из двух столбцов: Номер_клиента (ссылающегося на Клиент) и Номер_счета (ссылающегося на Счет). Первичный ключ данной таблицы — комбинация этих двух столбцов, а кортежи представляют пары значений, где номеру клиента ставится в соответствие номер счета, которым он владеет. Клиенту, имеющему три счета, в данной таблице будет соответствовать три кортежа с одним и тем же Номером_клиента. Аналогично, счет, у которого четыре владельца, будет представлен в таблице четырьмя кортежами с одним и тем же Номером_счета и различными Номерами_клиентов, владеющих этим счетом (табл. 1). Согласно таблице, клиент 12345 имеет три счета, а у счета 56789 — четыре владельца.
Отношение: Владение счетами |
|
Номер_клиента |
Номер_счета |
12345 |
56930 |
12345 |
87306 |
12345 |
56789 |
39205 |
56789 ' |
98508 |
56789 |
92056 |
56789 |
Таблица 1. Отношение, представляющее связь М-М
6. Если сущность имеет многозначный атрибут, для его представления следует создать отдельное отношение. Один столбец этого отношения будет внешним ключом к отношению, представляющему сущность, а второй будет представлять многозначный атрибут. Первичный ключ в данном случае — комбинация этих столбцов. Такое представление необходимо в силу требования атомарности данных в реляционной базе данных.
Предположим, что сущность Клиент имеет многозначный атрибут Номер_телефона, т.е. клиент может иметь несколько номеров телефонов. Невозможно включить столбец, представляющий этот атрибут, в отношение Клиент. Необходимо создать отдельное отношение Телефоны_клиентов со столбцами Номер_клиента (внешний ключ, ссылающийся на Клиент) и Номер_телефона; первичный ключ отношения будет состоять из этих двух столбцов. В этой таблице каждому телефонному номеру клиента соответствует отдельный кортеж. В табл. 2 у клиента 12345 три телефонных номера, а у клиента 67859 — один.
Отношение Телефоны_клиентов |
|
Номер_клиента |
Номер_телефона |
12345 |
687-69449 |
12345 |
687-09382 |
12345 |
02-578-59483 |
67859 |
657-03938 |
Таблица 2. Реализация многозначного атрибута
Если многозначный атрибут является составным, то в представляющем его отношении должны быть отдельные столбцы для каждой составной части данного атрибута.