- •Литература
- •Кортежные переменные и правильно построенные формулы
- •Реляционное исчисление доменов
- •1.Структура бд
- •2. Описание нашей базы данных
- •3. Данные и взаимосвязи
- •3.1 Объекты
- •3.3. Отношение один-ко-многим
- •3.5 Отношение многий-ко-многим
- •3.6 Отношение один-к-одному
- •4. Руководство по нормализации
- •2 Семестр
- •1.Ограничения реляционных баз данных.
- •2.Постреляционные субд.
- •3.Объектно-ориентированные субд.
- •4.Объектно-ориентированная парадигма.
- •5.Объектно-ориентированные субд.
- •7.Объектно-реляционные субд.
- •Литература: Концептуальное моделирование. Пример построения модели "сущность-связь"
- •2.Бинарные связи
- •3.N - арные связи.
- •4.Иерархические связи.
- •А) плотный индекс; б) разреженный индекс.
3.3. Отношение один-ко-многим
К этому моменту мы имеем готовые структуры четырех таблиц базы данных bookbic authors, titles, editors и publishers. Для каждой таблицы описаны атрибуты и определены первичные ключи.
Тем не менее мы пока не определили никаких зависимостей между данными. Пока остается непонятным, как, например, связаны между собой книги и конкретные издательства.
Связь между книгами и издательствами может описываться отношением один-ко-многим: каждая книга имеет единственного издателя, в то время как издатель может выпустить несколько книг. Отношение один-ко-многим часто записывается в виде 1:N.
Столбец titleJd будет являться внешним ключом в таблице publishers. Вы можете использовать его для ссылки на определенные строки в таблице titles и объединения информации о книгах и издателях. К сожалению, это решение уводит- вас в неправильном направлении. Вспомним моделируемое нами отношение — один издатель, много книг — и посмотрим, что произойдет при выходе новой книги. Вы добавите новую строку в таблицу titles с названием книги, ценой и т.д.

Рис. 5. Изменение внешнего ключа
С учетом последних изменений мы получили следующую структуру:
- таблица publishers содержит по одной строке для каждого издателя;
- таблица titles имеет по одной строке на каждую книгу;
- идентификационный номер издателя повторяется в таблице titles, так как издатель может выпустить несколько книг, и при этом обеспечивается минимальная избыточность данных.
Вы можете использовать логическую связь между столбцами pub_id в таблицах titles и publishers для объединения этих таблиц. Другими словами, структура базы разрабатывалась в расчете на применение пользователями оператора объединения для выборки информации из таблиц titles и publishers с помощью одного запроса.
В таблице publishers столбец pubid является первичным ключом. В таблице titles этот столбец выполняет роль внешнего ключа. Таким образом, реляционная модель требует, чтобы отношение один-ко-многим реализовывалось посредством пары первичный ключ—внешний ключ.
3.5 Отношение многий-ко-многим
Определив все отношения вида один-ко-многим в базе данных bookbiz и поставив им в соответствие пары первичный ключ—внешний ключ, рассмотрим другие типы отношений. Например, как связаны между собой авторы и книги?
Некоторые книги написаны несколькими авторами, к тому же некоторые авторы выпустили более одной книги. Другими словами, авторы и книги связаны отношением многий-ко-многим (которое часто записывается в виде N:N и иногда называется соединением (association)). В соответствии с реляционной теорией, соединения должны представляться отдельными таблицами, т.е. в базе данных bookbiz должна быть таблица для авторов, таблица для книг и таблица, описывающая связи между ними.
Таблица titleauthors описывает отношение типа многий-ко-многим между авторами и книгами. Это такая же базовая таблица, как titles и authors, но вместо объектов она описывает связи. Если пользователю базы данных bookbiz. потребуется информация о том, кто написал какую книгу, он или она создаст запрос на объединение, в котором для связи между таблицами titles и authors будет использована таблица titleauthors.
Таблицы titleauthors и titles объединяются по столбцам title_id, titleauthors и authors — по столбцам au_id. Другими словами, title_id в таблице titleauthors является внешним ключом, соответствующим первичному ключу title_id в таблице titles, a au_id в таблице titleauthors является внешним ключом, соответствующим первичному ключу au_id в таблице authors. По общему принципу, сформулированному К. Дж. Дейтом, "в реляционной модели участники соединения определяются внешними ключами, образующими таблицу, представляющую это соединение".

Рис. 6. Таблица соединения для отношения многий-ко-многим
Что является первичным ключом в таблице titleauthors? Идентификатор автора и идентификатор книги не идентифицируют однозначно строки в таблице titleauthors. В ее столбцах повторяются идентификаторы книг, имеющих больше одного автора, и идентификаторы авторов, написавших несколько книг. Тем не менее уникальной является комбинация идентификатор автора—идентификатор книги. Как говорит Дейт: "Для данного соединения, как правило, комбинация всех внешних ключей его участников имеет свойство уникальности". Таким образом, первичным ключом в таблице titleauthors является комбинация titlejd и aujd.
Таблицы editors и titles имеют аналогичные взаимосвязи. Редактор может работать более чем над одной книгой, а у книги может быть несколько редакторов. Это отношение многий-ко-многим также описывается связывающей таблицей.
