Как сделать связь многие ко многим в access?
Содержание:
- 3 ответа
- LEFT JOIN
- Работа с моделями со связью многие-ко-многим
- Поведение отношений
- Типы соединения
- Создание и изменение отношений 1:N между сущностями
- Как определить связи между таблицами
- Добавление необходимых таблиц к представлению источника данных
- Для чего все это нужно?
- Различные типы и кратности связей.
3 ответа
Похоже, у вас есть теоретическое представление об одном-на-одном и одном на многих.
Один-к-одному: каждый предмет А имеет отдельный и уникальный предмет Б
В базе данных вы можете включить новые данные в ту же таблицу. Вы можете поместить его в отдельную таблицу и применить ограничение «один к одному», сделав идентификатор в удаленной таблице «уникальным» (ограничение индексации), чтобы идентификатор элемента B не повторялся в таблице. В вашем примере это будет ограничение, добавленное к паролю.
Один ко многим: каждый предмет А имеет некоторое количество предметов В
В базе данных вы помещаете ключ в таблицу со стороны «многие». Так много Bs имеют один и тот же внешний ключ в таблице A. В вашем примере, поместите оргид в качестве внешнего ключа в таблицу employee. Многие сотрудники могут указывать на одну организацию, а сотрудник может принадлежать к одной организации.
Много ко многим: некоторое количество As может быть связано с любым количеством B и наоборот
В базе данных это обычно реализуется в виде таблицы ссылок, в которой есть только идентификаторы из A и B. Следуя вашему примеру, учтите, что сотрудник может быть частью нескольких групп (или проектов), выполняющих многозадачность в этих группах. Вы можете иметь групповую таблицу:
GROUPID (PK) GROUPNAME
И таблица ссылок будет выглядеть так
LINKID (PK) EMPID (FK TO EMPLOYEE) GROUPID (FK TO GROUP)
Это позволяет любому сотруднику входить в любое количество групп, а группы могут иметь любое количество сотрудников, AKA многие-ко-многим.
Дополнительный комментарий:
Технически, вам НЕ нужно иметь LINKID в таблице ссылок. Но это облегчает управление данными в этой таблице и обычно считается «наилучшей практикой».
JCampy
3 Янв 2020 в 17:15
Это больше теоретический вопрос, чем программный, но почему бы и нет.
Можно представить себе, что «многие ко многим» представляют собой 1 таблицу со списком сотрудников, а другую таблицу со списком проданных товаров.
Каждый сотрудник может «обрабатывать» более 1 продукта, и каждый продукт вполне может обрабатываться несколькими сотрудниками, и вполне возможно, что продукты A и B могут обрабатываться одновременно сотрудниками C и D.
TheMouseMaster
3 Янв 2020 в 16:59
Примером отношения «многие ко многим» могут служить СОТРУДНИКИ и НАВЫКИ, где НАВЫКИ — это такие вещи, как «SQL», «Javascript», «Управление» и т. Д. У сотрудника может быть много навыков (например, он может знать SQL и Javascript) и определенным навыком, которым обладают многие сотрудники (например, Джек и Джилл оба знают SQL).
В такой базе данных, как Oracle, вам нужна третья таблица, чтобы выразить отношение «многие ко многим» между СОТРУДНИКАМИ и НАВЫКАМИ:
Обратите внимание, что эта третья таблица имеет внешний ключ для обеих других таблиц. Таблица также может содержать дополнительную информацию об отношениях — например:
Таблица также может содержать дополнительную информацию об отношениях — например:
2
Tony Andrews
3 Янв 2020 в 16:59
LEFT JOIN
Помимо INNER JOIN, есть ещё несколько операторов класса JOIN. Один из самых частоиспользуемых — LEFT JOIN. Он позволяет сделать запрос к двум таблицам, между которыми есть связь, и при этом для одной из таблиц вернуть записи, даже если они не соответствуют записям в другой таблице.
Как например, если бы мы хотели вывести не только пользователей, у которых есть статьи, но и тех, кто «халтурит» 🙂
Давайте для начала сделаем запрос с использованием INNER JOIN, который выведет пользователей и написанные ими статьи:
Теперь заменим INNER JOIN на LEFT JOIN:
Видите, вывелись записи из левой таблицы (users), которым не соответствует при этом ни одна запись из правой таблицы (articles).
Работа с моделями со связью многие-ко-многим
Последнее обновление: 31.10.2015
Простой вывод связанных данных со связью «многие-ко-многим» не представляет особого труда. Однако не совсем понятно, как делать создание и
редактирование подобных моделей. Продолжим начатый в прошлой теме пример со студентами и курсами и внесем в него функциональность редактирования
студентов.
В итоге форма редактирования у нас будет выглядеть примерно так:
Итак, добавим в контроллер HomeController следующее действие Edit:
public ActionResult Edit(int id = 0) { Student student = db.Students.Find(id); if (student == null) { return HttpNotFound(); } ViewBag.Courses = db.Courses.ToList(); return View(student); } public ActionResult Edit(Student student, int[] selectedCourses) { Student newStudent = db.Students.Find(student.Id); newStudent.Name = student.Name; newStudent.Surname = student.Surname; newStudent.Courses.Clear(); if (selectedCourses != null) { //получаем выбранные курсы foreach (var c in db.Courses.Where(co => selectedCourses.Contains(co.Id))) { newStudent.Courses.Add(c); } } db.Entry(newStudent).State = EntityState.Modified; db.SaveChanges(); return RedirectToAction("Index"); }
Действие Edit представляет два метода — для запроса get и для запроса post. Метод, обрабатывающий запрос get, стандартный — он передает
в представление редактируемую модель, а также список всех курсов через , чтобы мы могли
затем эти курсы вывести в представлении.
Метод post принимает полученные данные, только кроме модели Student сюда также передаются все выбранные курсы в виде массива id курсов. В
этот массив и будут помещаться все значения всех отмеченных на форме флажков. В самом методе после прохождения валидации мы устанавливаем новые значения свойств модели.
Затем нам надо установить в коллекции Courses у студента все отмеченные курсы. Для этого проходим по всем курсам из базы данных, и если они были
отмечены на форме и отсутствуют в списке, то добавляем их. Неотмеченные удаляем (если они есть в списке). В итоге информация в базе данных будет соотвествующим
образом обновлена.
И напоследок добавим само представление Edit.cshtml:
@using TeamMvc4.Models @model Student @{ ViewBag.Title = "Edit"; } @using (Html.BeginForm()) { <fieldset> <legend>Студент</legend> @Html.HiddenFor(model => model.Id) <div class="editor-label"><b>Имя</b></div> <div class="editor-field"> @Html.EditorFor(model => model.Name) </div> <div class="editor-label"><b>Фамилия</b></div> <div class="editor-field"> @Html.EditorFor(model => model.Surname) </div> <div class="editor-label"><b>Курсы</b></div> @foreach (Course c in ViewBag.Courses) { <input type="checkbox" name="selectedCourses" value="@c.Id" @(Model.Courses.Contains(c) ? "checked=\"checked\"" : "") />@c.Name <br /> } <p> <input type="submit" value="Сохранить" /> </p> </fieldset> }
Ну а сохранение модели будет во многом идентично редактированию.
НазадВперед
Поведение отношений
Можно настроить поведение отношения 1:N для поддержки бизнес-правил организации. Почему это может потребоваться? Рассмотрим пример.
Допустим, у вас новый продавец и требуется назначить ему несколько существующих возможных сделок, в данное время назначенных другому продавцу. Каждая запись возможной сделки может иметь несколько действий задач, связанных с ней. Можно легко найти активные возможные сделки, которые требуется переназначить, и назначить их новому продавцу. Но что произойдет с действиями задач, связанными с возможными сделками? Хотелось бы вам открывать каждую задачу и указывать, должна ли она также быть назначена новому продавцу? Скорее всего, нет. Вместо этого можно разрешить отношению применить некоторые стандартные правила автоматически. Эти правила применяются только к записям задач, связанным с возможными сделками, которые вы переназначаете. Это отношение сущностей называется Opportunity_Tasks. Можно выполнить следующие действия:
-
Переназначить все активные задачи.
-
Переназначить все задачи. Это поведение принимается по умолчанию.
-
Не переназначать задачи.
-
Переназначить все задачи, которые в данный момент назначены бывшему владельцу возможной сделки.
Отношение может управлять тем, как действия, выполняемые с записью для записи основной сущности, распространяются на все записи связанной сущности. Действия и возможное поведение приведены в следующей таблице.
Действие | Описание | Возможное поведение |
---|---|---|
Назначение | Что должно произойти, когда меняется владелец записи основной сущности? | — Каскад для активных- Каскад для всех- Без каскадных- Каскад для ответств. |
Общий доступ | Что должно произойти при совместном использовании записи основной сущности? | — Каскад для активных- Каскад для всех- Без каскадных- Каскад для ответств. |
Отмена общего доступа | Что должно произойти при отмене совместного использования записи основной сущности? | — Каскад для активных- Каскад для всех- Без каскадных- Каскад для ответств. |
Переподчинение | Что должно произойти, когда меняется значение поля поиска для отношения родительского типа в записи основной сущности? Отношение родительского типа — это отношение, использующее Каскад для всех для всех действий. — Каскад для активных- Каскад для всех- Без каскадных- Каскад для ответств. | |
Удаление | Что должно произойти при удалении записи основной сущности? | — Каскад для всех- Удалить связь- Ограничить удаление |
Слияние | Что должно произойти, когда запись основной сущности объединяется с другой записью? | — Каскад для всех- Без каскадных |
Каждое из этих действий можно настроить для управления тем, как действия будут распространяться на записи, связанные с записью основной сущности отношением сущностей 1:N. Параметры поведения представлены в следующей таблице.
Поведение | Описание |
---|---|
Передавать активным | Выполнение действия для всех активных записей связанной сущности. |
Передавать всем | Выполнение действия для всех записей связанной сущности. |
Не передавать никому | Никакие действия не выполняются. |
Удалить ссылку | Удаление значения поля поиска для всех записей связанной сущности. |
Ограничить удаление | Блокировка возможности удаления записи основной сущности, если существуют связанные записи. |
Передавать владельцу | Выполнение действия для всех записей связанной сущности тем же пользователем, что и пользователь записи основной сущности. |
Способ применения этих действий в отношении можно классифицировать и применить с помощью значений поля Тип поведения, описанных в следующей таблице.
Значение поля | Описание |
---|---|
Родительский | Все действия используют поведение Передавать всем. |
Ссылочный | Действия Назначить, Предоставить общий доступ, Отменить общий доступ и Переподчинение используют поведение Не передавать никому. Действие Удалить использует поведение Удалить ссылку. Действие Объединить использует поведение Передавать всем. |
Ссылочный, ограничить удаление | Аналогично значению Ссылочный за исключением того, что действие Удалить использует поведение Ограничить удаление. |
Настраиваемое каскадное | Отдельное поведение можно назначить для каждого действия. Если выбранные значения соответствуют любым другим категориям Тип поведения, значение изменится на значение Тип поведения. |
Типы соединения
Существует три основных типа соединения: Вы можете увидеть их на следующем снимке экрана:
Вариант 1 определяет внутреннее соединение. Внутреннее соединение — это соединение, в котором записи из двух таблиц объединяются в результатах запроса только в том случае, если значения в объединенных полях соответствуют определенному состоянию. В запросе соединение по умолчанию — это внутреннее соединение, которое выбирает записи только в том случае, если значения в объединенных полях совпадают.
Вариант 2 определяет левое внешнее соединение. Левое внешнее соединение — это соединение, в котором все записи с левой стороны операции LEFT JOIN в оператора запроса SQL добавляются к результатам запроса, даже если нет соответствующих значений в объединенном поле из таблицы на правой стороне.
Вариант 3 определяет правое внешнее соединение. Правое внешнее соединение — это соединение, в котором все записи с правой стороны операции RIGHT JOIN в операторе запроса SQL добавляются к результатам запроса, даже если нет соответствующих значений в объединенном поле из таблицы на левой стороне.
Создание и изменение отношений 1:N между сущностями
Откройте обозреватель решений.
В разделе Компоненты раскройте узел Сущности, затем раскройте сущность, с которой требуется работать.
Выберите Отношения 1:N.
Чтобы изменить отношение или просмотреть сведения для отношения, выберите отношение и нажмите на панели инструментов «Действия» кнопку Другие действия, затем выберите Изменить.
— ИЛИ —
Чтобы добавить новое отношение, выберите Создать отношение «один ко многим».
Важно!
Если кнопка Создать отношение «один ко многим» не отображается на панели инструментов «Действия», то создать отношение 1:N для этой сущности невозможно.
Для нового отношения в разделе Определение отношения выберите в списке Связанная сущность сущность для связывания.
Примечание
При указании связанной сущности задается значение по умолчанию в поле Имя. Если изменить связанную сущность перед ее сохранением, соответственно изменится и значение поля Имя.
Выберите, будет ли это поле доступно для поиска или нет.
В разделе Поле поиска укажите значение для поля в поле Отображаемое имя.
Важно!
При указании значения Отображаемое имя задается значение по умолчанию в поле Имя
Если изменить Отображаемое имя поля поиска перед сохранением данных, значение в поле Имя не изменится. Поэтому необходимо ввести в поле Имя информативное значение перед сохранением данных.
В списке Требование поля выберите вариант, чтобы указать требования к данным для поля перед сохранением записи.
В разделе Элемент области переходов для основной сущности в списке Параметры отображения выберите вариант отображения связанных представлений для пользовательской метки.
В разделе Поведение отношений выберите в списке Тип отношений один из следующих вариантов.
Родительское. В родительском отношении между двумя сущностями любое действие, выполняемое над записью основной (родительской) сущности, также выполняется над всеми связанными с ней записями дочерних сущностей.
Ссылочное. При ссылочном отношении между двумя сущностями можно переходить к любым связанным записям, но действия, выполняемые над одной записью, не применяются к другим.
Ссылочное с ограниченным удалением. В ссылоном отношении с ограничением удаления можно переходить к любым связанным записям. Действия, выполняемые над родительской записью, не будут выполняться над дочерней, но пока она существует, удалить родительскую запись будет невозможно. Учтите, что запись нельзя удалить, если имеются связанные с ней записи.
Настраиваемое каскадное. В настраиваемом каскадном отношении между двумя сущностями выбирается поведение, связанное с каждым из наборов возможных действий.
Важно!
Если выбрать поведения для действий, совпадающие с поведениями для действий, связанными с другим Типом поведения, то при сохранении отношения значение Тип поведения будет автоматически установлено равным такому совпадающему типу.
Дополнительные сведения:
-
Выберите Сохранить и закрыть, чтобы закрыть форму Отношение.
-
Выполнив настройки, опубликуйте их:
-
Чтобы опубликовать настройки только для компонента, изменяемого в данный момент, на панели инструментов «Действия» выберите Опубликовать.
-
Чтобы опубликовать настройки для всех неопубликованных компонентов одновременно, на панели навигации или в области переходов выберите Сущности, затем на панели инструментов «Действия» выберите Опубликовать все настройки.
-
Примечание
- Настраиваемая сущность не может быть основной в каскадном отношении со связанной системной сущностью. Это означает, что между основной настраиваемой сущностью и связанной системной сущностью не может быть отношений с каким-либо из действий, установленным в «Передавать всем», «Передавать активным» или «Передавать владельцу».
- У новых отношений действие не может иметь значение Передавать всем, Передавать активным или Передавать владельцу, если связанная сущность в этом отношении уже является связанной сущностью в любом другом отношении, действие которого имеет значение Передавать всем, Передавать активным или Передавать владельцу. Это позволяет избежать создания отношений с несколькими родительскими сущностями.
- После каждого изменения элементов пользовательского интерфейса или внедрения скриптов формы для сущности необходима публикация изменений. Все изменения в схеме данных приложения, таких как настраиваемые сущности, связи или поля, применяются сразу.
- Если отношение является частью управляемого решения, разработчик решения может ограничить настройку отношения пользователями.
- Установка решения или публикация настроек может помешать нормальной работе системы. Рекомендуется запланировать импорт решения в оптимальный для пользователей период.
Как определить связи между таблицами
При создании связи между таблицами связанные поля не должны иметь одни и те же имена. Однако связанные поля должны иметь один и тот же тип данных, если только поле первичного ключа не является полем AutoNumber. Вы можете сопоставить поле AutoNumber с полем Number, только если свойство FieldSize обоих совпадающих полей совпадает. Например, можно сопоставить поле AutoNumber и поле Number, если свойство theFieldSizeproperty обоих полей имеет значение Long Integer. Даже если оба совпадающих поля являются числовыми полями, они должны иметь параметр sameFieldSizeproperty.
Как определить связи «один ко многим» или «один к одному»
Чтобы создать связь «один ко многим» или «один к одному», выполните следующие действия.
-
Закройте все таблицы. Нельзя создавать или изменять связи между открытыми таблицами.
-
В Access 2002 и Access 2003 выполните следующие действия.
- Нажмите F11, чтобы переключиться в окно базы данных.
- В меню Инструменты выберите Связи.
В Access 2007, Access 2010 или Access 2013 нажмите Связи в группе Показать/Скрыть на вкладке Инструменты базы данных.
-
Если вы еще не определили какие-либо связи в базе данных, автоматически отобразится диалоговое окно Показать таблицу. Если вы хотите добавить таблицы, которые нужно связать, но диалоговое окно Показать таблицу не отображается, нажмите Показать таблицу в меню Связи.
-
Дважды щелкните названия таблиц, которые вы хотите связать, а затем закройте диалоговое окно Показать таблицу. Чтобы создать связь между одной и той же таблицей, добавьте эту таблицу два раза.
-
Перетащите поле, которое вы хотите связать, из одной таблицы в связанное поле в другой таблице. Чтобы перетащить несколько полей, нажмите Ctrl, нажмите на каждое поле, а затем перетащите их.
В большинстве случаев вы перетаскиваете поле первичного ключа (это поле отображается жирным текстом) из одной таблицы в аналогичное поле (это поле часто имеет одно и то же имя), которое называется внешним ключом в другой таблице.
-
Откроется диалоговое окно Изменение связей. Убедитесь, что имена полей, отображаемые в двух столбцах, верны. Вы можете изменить имена, если это необходимо.
При необходимости установите параметры связей. Если у вас есть информация о конкретном элементе в диалоговом окне Изменение связей, нажмите кнопку со знаком вопроса, а затем нажмите на элемент. (Эти параметры будут подробно описаны ниже в этой статье.)
-
Нажмите кнопку Создать, чтобы создать связь.
-
Повторите шаги с 4 по 7 для каждой пары таблиц, которые вы хотите связать.
При закрытии диалогового окна Изменение связей Access спрашивает, хотите ли вы сохранить макет. Сохраняете ли вы макет или не сохраняете макет, созданные вами связи сохраняются в базе данных.
Примечание
Можно создавать связи не только в таблицах, но и в запросах. Однако целостность данных связывания не обеспечивается с помощью запросов.
Как определить связь «многие ко многим»
Чтобы создать связь «многие ко многим», выполните следующие действия.
-
Создайте две таблицы, которые будут иметь связь «многие ко многим».
-
Создайте третью таблицу. Это стыковочная таблица. В таблице соединения добавьте новые поля, которые имеют те же определения, что и основные ключевые поля из каждой таблицы, созданной в шаге 1. В связующей таблице основные ключевые поля функционируют как внешние ключи. Вы можете добавить другие поля в связующую таблицу, так же, как и в любую другую таблицу.
-
В связующей таблице установите первичный ключ, чтобы включить основные ключевые поля из двух других таблиц. Например, в связующей таблице «TitleAuthors» первичный ключ будет состоять из полей OrderID и ProductID.
Примечание
Чтобы создать первичный ключ, выполните следующие действия:
-
Откройте таблицу в Конструкторе.
-
Выберите поле или поля, которые вы хотите определить в качестве первичного ключа. Чтобы выбрать одно поле, нажмите на селектор строки для нужного поля. Чтобы выбрать несколько полей, удерживайте клавишу Ctrl, а затем нажмите селектор строки для каждого поля.
-
В Access 2002 или в Access 2003 нажмите на Первичный ключ на панели инструментов.
В Access 2007 нажмите на Первичный ключ в группе Инструменты на вкладке Дизайн.
Примечание
Если вы хотите, чтобы порядок полей в первичном ключе с несколькими полями отличался от порядка этих полей в таблице, нажмите Индексы на панели инструментов для отображения диалогового окна Indexes, а затем заново упорядочите имена полей для индекса с именем PrimaryKey.
-
-
Определите связь один-ко-многим между каждой основной и связующей таблицами.
Добавление необходимых таблиц к представлению источника данных
Откройте конструктор представлений источника данных для представления источников данных Adventure Works DW 2012 .
Щелкните правой кнопкой мыши панель Организатор диаграмм , выберите команду Создать диаграмму и укажите Причина заказа через Интернет в качестве имени созданной диаграммы.
Перетащите таблицу InternetSales с панели Таблицы на панель Диаграмма .
Щелкните правой кнопкой мыши панель Диаграмма и выберите команду Добавить или удалить таблицы.
В диалоговом окне Добавление или удаление таблиц добавьте в список Включенные объекты таблицы DimSalesReason и FactInternetSalesReason , а затем нажмите кнопку ОК.
Обратите внимание, что связи «первичный-внешний ключ» между задействованными таблицами устанавливаются автоматически, поскольку эти связи определяются в базовой реляционной базе данных. Если эти связи не определены в базовой реляционной базе данных, их следует определить в представлении источника данных.
В меню Формат выберите команду Автоматический макет и щелкните значок Диаграмма.
В окне свойств измените свойство FriendlyName таблицы DimSalesReason на SalesReason, затем измените свойство FriendlyName таблицы FactInternetSalesReason на InternetSalesReason.
На панели Таблицы разверните узел InternetSalesReason (dbo.FactInternetSalesReason), щелкните столбец SalesOrderNumber и просмотрите в окне свойств свойство DataType для этого столбца данных.
Обратите внимание, что в качестве типа данных для столбца SalesOrderNumber указан тип данных string.
Просмотрите типы данных для других столбцов таблицы FactInternetSalesReason .
Обратите внимание, что для остальных двух столбцов этой таблицы указаны числовые типы данных.
На панели Таблицы щелкните правой кнопкой мыши таблицу InternetSalesReason (dbo.FactInternetSalesReason) и выберите пункт Просмотр данных.
Обратите внимание, что для каждого номера строки каждого заказа значение ключа указывает причину покупки данной позиции линии, как показано на следующем рисунке.
Для чего все это нужно?
Связи выполняют более важную роль, чем просто информация размещения данных по таблицам. Прежде всего они требуются разработчикам для поддержания целостности баз данных.
Правильно настроив связи, можно быть уверенным, что ничего не потеряется.
Представьте, что Вы решили удалить одну из групп в таблице учебной базы данных. Если бы связи не было, то для тех сотрудников, которые к ней были определены, остался идентификатор несуществующей группы. Связь не позволит удалить группу, пока она имеется во внешних ключах других таблиц. Для начала следовало определить сотрудников в другие имеющиеся или новые группы, а только затем удалить ненужную запись. Поэтому связи называют еще ограничениями.
- < Назад
- Вперёд >
Новые статьи:
-
Объединение таблиц – UNION
-
Соединение таблиц – операция JOIN и ее виды
-
Тест на знание основ SQL
Если материалы office-menu.ru Вам помогли, то поддержите, пожалуйста, проект, чтобы я мог развивать его дальше.
Различные типы и кратности связей.
Связь между отношениями при проектировании схем баз данных изображается в виде линий, соединяющих классы сущностей.
При этом каждый из концов связи может (и вообще должен) характеризоваться наименованием (т. е. типом связи) и кратностью роли класса в связи. Рассмотрим подробнее понятия кратности и типы связей.
Кратностью (multiрliсitу) называется характеристика, указывающая, сколько атрибутов класса сущности с данной ролью может или должно участвовать в каждом экземпляре связи какого-либо вида.
Наиболее распространенным способом задания кратности роли связи является прямое указание конкретного числа или диапазона. Например, указание «1» говорит о том, что каждый класс с данной ролью должен участвовать в некотором экземпляре данной связи, причем в каждом экземпляре связи может участвовать ровно один объект класса с данной ролью. Указание диапазона «0..1» говорит о том, что не все объекты класса с данной ролью обязаны участвовать в каком-либо экземпляре данной связи, но в каждом экземпляре связи может участвовать только один объект. Поговорим о кратностях подробнее.
Типичными, самыми распространенными кратностями в системах проектирования баз данных являются следующие кратности:
1) 1 – кратность связи на соответствующем ее конце равна единице;
2) 0… 1 – такая форма записи означает, что кратность данной связи на соответствующем своем конце не может превышать единицы;
3) 0… ∞ – такая кратность расшифровывается просто «много». Любопытно, что, как правило, «много» означает «ничего»;
4) 1… ∞ – такое обозначение получила кратность «один или более».
Приведем пример простой диаграммы для иллюстрирования работы с различными кратностями связей.
Согласно этой диаграмме, можно легко понять, что каждая касса имеет много билетов, а, в свою очередь, каждый билет находится в какой-то одной (и не более того) кассе.
Теперь рассмотрим наиболее распространенные типы или наименования связей. Перечислим их:
1) 1 : 1 – такое обозначение получила связь «один к одному», т. е. это как бы взаимно-однозначное соответствие двух множеств;
2) 1 : 0… ∞ – это обозначение связи типа «один ко многим». Для краткости такую связь называют «1 : М». В рассмотренной ранее диаграмме, как можно заметить, присутствует связь именно с таким наименованием;
3) 0… ∞ : 1 – это обращение предыдущей связи или связь типа «многие к одному»;
4) 0… ∞ : 0… ∞ – это обозначение связи типа «многие ко многим», т. е. с каждого конца связи присутствует много атрибутов;
5) 0… 1 : 0… 1 – это связь, аналогичная введенной ранее связи типа «один к одному», она, в свою очередь, называется «не более одного к не более одному»;
6) 0… 1 : 0… ∞ – это связь, аналогичная связи типа «один ко многим», она называется «не более одного ко многим»;
7) 0… ∞ : 0… 1 – это связь, в свою очередь, аналогичная связи типа «многие к одному», она называется «многие к не более одному».
Как можно заметить, три последние связи получились из связей, которые в нашей лекции перечислены под номерами один, два и три путем замены кратности «один» на кратность «не более одного».