Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
VPS в 21 локации

От 104 рублей в месяц

Безлимитный трафик. Защита от ДДоС.

🔥 VPS до 5.7 ГГц под любые задачи с AntiDDoS в 7 локациях

💸 Гифткод CITFORUM (250р на баланс) и попробуйте уже сейчас!

🛒 Скидка 15% на первый платеж (в течение 24ч)

Скидка до 20% на услуги дата-центра. Аренда серверной стойки. Colocation от 1U!

Миграция в облако #SotelCloud. Виртуальный сервер в облаке. Выбрать конфигурацию на сайте!

Виртуальная АТС для вашего бизнеса. Приветственные бонусы для новых клиентов!

Виртуальные VPS серверы в РФ и ЕС

Dedicated серверы в РФ и ЕС

По промокоду CITFORUM скидка 30% на заказ VPS\VDS

2006 г.

Один за всех и все за одного

К.Дж. Дейт
Перевод - Сергей Кузнецов
Оригинал: All for One, One for All

Свершилось! На сайте www.thethirdmanifesto.com появились сразу четыре ранее не публиковавшихся статьи Криса Дейта. Три короткие статьи, с которыми я вас еще познакомлю, являются ответом на разные замечания критиков идей «Третьего манифеста». Статья же, перевод которой я предлагаю вашему вниманию, посвящена обсуждению древней темы связей и их возможной мощности. Тема эта, безусловно, не очень сложна, но, как правильно отмечает Дейт, вокруг нее существует масса путаницы, в особенности, в связи с терминологией. Дейт блестяще и предельно занудно систематизирует и классифицирует все возможные случаи и предлагает свою терминологию. Я бы сравнил эту статью со знаменитым трудом товарища Сталина «Краткий курс истории ВКП(б)». Когда я учился в школе, книги Сталина уже были изъяты из библиотек и еще не были доступны в Сети (ее, Сети, еще не было и в помине). И даже тогда добрые преподаватели истории партии советовали нам по возможности воспользоваться этим трудом, в котором вся партийная история была предельно упорядочена и классифицирована. Что-то мне подсказывает, что эта статья Дейта будет пользоваться не меньшей популярностью.
Сергей Кузнецов

С математической точки зрения имеется аналогия между отображениями и связями
-- из [8]

Аннотация

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

Введение

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

Например, рассмотрим следующую цитату из [5]:

Имеется связь … один-к-одному между сегментом полета и самолетом. На заданном сегменте полета в заданный день используется один и только один самолет.

Конечно, на заданном сегменте полета в заданный день используется один и только один самолет. Однако понятно, что в заданный день заданный самолет может использоваться на одном, двух, …, на любом (разумном) числе сегментов полета – даже, возможно, ни на одном. Поэтому не является ли эта связь не связью один-к-одному, а связью «многие-к-одному» («в заданный день на многих участках полета может использоваться заданный самолет»), где частным случаем «многих» может быть ноль?

В этой статье предпринимается попытка прояснить подобные вопросы и внести некоторую строгость в терминологию. Замечание: Должен предостеречь вас, что некоторые из приводимых далее определений являются немного усложненными или, по крайней мере, кажутся такими при первом чтении. Caveat lector (Да будет осмотрителен читатель).

Базис и предположения

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

  • Я предполагаю наличие у читателей интуитивного понимания смысла термина связь (relationship). Пожалуйста, обратите внимание, что я не использую этот термин в смысле какой-либо конкретной технологии; в частности, я не придаю ему какую-либо реляционную интерпретацию в смысле реляционной модели и не использую его в смысле подхода «сущность-связь» (если считать, что такой смысл имеется).
  • Упоминание термина сущность напомнило мне о следующем. Можно и, по моему мнению, крайне желательно обсуждать данную тему вообще без использования этого туманного термина. Поэтому, как вы вскоре увидите, мои определения (связь и т.д.) формулируются в терминах математических множеств (set). Сам термин множество можно определить следующим образом:
set – Коллекция объектов, или элементов, обладающая тем свойством, что для любого произвольного объекта x можно определить, входит ли этот объект в данную коллекцию.

В частности, заметим, что математическим термином (используемым и в этой статье) для объектов, являющихся членами множеств, является термин элемент. Многие из определений, приводимых в этой статье, включая приведенное выше определение термина множество, позаимствованы из [2], равно как и многие примеры (по крайней мере, те из них, которые носят математический характер).

  • Для простоты я предполагаю, что все связи являются бинарными. Все обсуждаемые идеи легко распространяются на случаи тернарных, кватернарных и т.д. связей.
  • Для определенности я предполагаю, что все связи являются направленными. Из этого следует, что если существует связь из A в B, то существует и обратная связь (конечно, тоже направленная) из B в A. Замечание: Можно было бы говорить о двунаправленных связях и избежать, тем самым, потребности в понятии обратных связей, но, по моему мнению, это повредило бы четкости.
  • Как и в примере, приведенном во введении, частным случаем «многих» будет считаться ноль (т.е. «много» означает ноль или более), если явно не будет оговорено иное.

Вот общее определение термина связь:

связь – Пусть A и B являются множествами, не обязательно различными. Тогда связью из A к B является правило составления пар элементов множества A с элементами множества B. (Эквивалентно, можно сказать, что связью является сам результат применения этого правила.)

Замечание: Поскольку связи полагаются направленными, мне кажется более осмысленным считать, что связь ведет от множества A к другому множеству B, а не имеется между этими двумя множествами. Кроме того, как уже отмечалось, я буду отличать такую связь от ее инверсии, представляющей собой связь от множества B к множеству A.

В качестве иллюстрации, пусть множество A содержит символы алфавита A-Z, а B – цифры 0-9. Тогда следующее спаривание (подробно разъясняемое в телефонных трубках) является известным примером связи от A к B:
nil0
nil1
A-C2
D-F3
G-I4
J-L5
M-O6
P-S7
T-V8
W-Z9

Имеется и обратная связь от B к A (в которой, как вы можете видеть, для некоторых элементов B отсутствуют парные элементы A).

Далее я буду ссылаться на приведенный пример как на «телефонный пример».

Сколько имеется случаев?

При наличии введенного определения связи и того факта, что для каждой заданной связи имеется инверсная связь, сколько различных видов связей – или, скорее, их комбинаций – может разумно существовать с участием двух множеств A и B? Если использовать строчные буквы a и b для обозначения произвольных элементов A и B соответственно, то должно быть ясно, что:

  • Для заданного a может существовать не более одного b; в точности один b; не менее одного b или много b (т.е. M элементов b для некоторого M ≥ 0).
  • В каждом из этих случаев для заданного b может существовать не более одного a; в точности один a; не менее одного a или много a (т.е. M элементов a для некоторого M ≥ 0).

Следовательно, по первому впечатлению, имеется 16 комбинаций. На рис. 1 представлена сводка этих 16 случаев в форме матрицы; на рис. 2 они показаны графически, как их можно было бы представить, например, на диаграмме UML . хотя для соблюдения корректности следует сказать, что нотация на рис. 2 не точно следует нотации UML, хотя и близка к ней (см. [1]).
для b имеется → не более одного a точно один a не менее одного a M экземпляров a (M ≥ 0)
для a имеется ↓
не более одного b Case 1.1 Case 1.2 Case 1.3 Case 1.4
точно один b Case 2.1 Case 2.2 Case 2.3 Case 2.4
не менее одного b Case 3.1 Case 3.2 Case 3.3 Case 3.4
M экземпляров b (M ≥ 0) Case 4.1 Case 4.2 Case 4.3 Case 4.4

Рис. 1. 16 случаев в форме матрицы

Рис. 2. 16 случаев в графической форме

Рассмотрим реалистичные – до некоторой степени – примеры каждого из 16 случаев. Замечание: Может иметь смысл скопировать рис. 1 или рис. 2 и использовать его в качестве шпаргалки при чтении оставшейся части статьи.

1.1 Для каждого a имеется не более одного b, для каждого b имеется не более одного a.

Пример: В каждый заданный момент времени у заданного мужчины имеется не более одной жены, и у заданной женщины имеется не более одного мужа (предполагается отсутствие полигамии); однако у некоторых мужчин нет жен, а у некоторых женщин – мужей.

1.2 Для каждого a имеется не более одного b, для каждого b имеется ровно один a.

Пример: В заданной компании в заданный момент времени каждый служащий руководит не более чем одним отделом, и у каждого отдела имеется ровно один менеджер (из числа служащих, руководящих отделами). Замечание: Хотелось бы отметить мимоходом, что случаи такого рода происходят в связи с наследованием, как оно описано, например, в [4]. Например, пусть A и B являются типами RECTANGLE и SQUARE соответственно, и пусть SQUARE является подтипом супертипа RECTANGLE. Тогда связь супертип/подтип является такой, что для заданного прямоугольника «имеется» соответствующий квадрат в том и только в том случае, когда этот прямоугольник в действительности является квадратом, и для заданного квадрата «имеется» соответствующий прямоугольник, являющийся в точности тем прямоугольником, которому соответствует данный квадрат. (Конечно, любой квадрат является прямоугольником, но многие прямоугольники квадратами не являются.) В этом примере связь от RECTANGLE к SQUARE и инверсная связь от SQUARE к RECTANGLE являются тождественными (т.е. «является тем же прямоугольником», или просто «равен»).

1.3 Для каждого a имеется не более одного b, для каждого b имеется не менее одного a.

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

1.4 Для каждого a имеется не более одного b, для каждого b имеется много элементов a.

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

2.1 Для каждого a имеется ровно один b, для каждого b имеется не более одного a.

Пример: Это тот же случай, что и 1.2, но A и B поменяны местами. Тем самым, пример звучит следующим образом. В заданной компании в заданный момент времени у каждого отдела имеется ровно один менеджер (т.е. служащий, управляющий отделом), и каждый служащий руководит не более чем одним отделом.

2.2 Для каждого a имеется ровно один b, для каждого b имеется ровно один a.

Пример: В заданной транспортной компании для заданного груза имеется в точности одна соответствующая накладная, и для заданной накладной имеется один соответствующий груз.

2.3 Для каждого a имеется ровно один b, для каждого b имеется не менее одного a.

Пример: В заданной компании в заданный момент времени каждый служащий работает ровно в одном отделе, и в каждом отделе работает не менее одного служащего.

2.4 Для каждого a имеется ровно один b, для каждого b имеется много элементов a.

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

3.1 Для каждого a имеется не менее одного b, для каждого b имеется не более одного a.

Пример: Это тот же случай, что и 1.3, но A и B поменяны местами; см. случай 1.3.

3.2 Для каждого a имеется не менее одного b, для каждого b имеется ровно один a.

Пример: Это тот же случай, что и 2.3, но A и B поменяны местами; см. случай 2.3.

3.3 Для каждого a имеется не менее одного b, для каждого b имеется не менее одного a.

Пример: У каждой книги имеется не менее одного автора, каждый автор (т.е. автор книг) по определению является автором не менее одной книги.

3.4 Для каждого a имеется не менее одного b, для каждого b имеется много экземпляров a.

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

4.1 Для каждого a имеется много элементов b, для каждого b имеется не более одного a.

Пример: Это тот же случай, что и 1.4, но A и B поменяны местами; см. случай 1.4.

4.2 Для каждого a имеется много элементов b, для каждого b имеется ровно один a.

Пример: Это тот же случай, что и 2.4, но A и B поменяны местами; см. случай 2.4.

4.3 Для каждого a имеется много элементов b, для каждого b имеется не менее одного a.

Пример: Это тот же случай, что и 3.4, но A и B поменяны местами; см. случай 3.4.

4.4 Для каждого a имеется много элементов b, для каждого b имеется много элементов a.

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

Так что в действительности разных случаев не 16, а всего лишь 10. Заметим, кстати, что несколько примеров соответствует бизнес-политике или бизнес-правилам (см., например, случаи 1.4 и 2.3). Другие примеры носят всего лишь случайный характер (см., например, случай 4.4), но, тем не менее, могут быть интересны – какой-либо пользователь мог бы захотеть, как принято выражаться, «воспользоваться связью» для определения, например, того, какие детали располагаются в том же городе, что и данный поставщик.

Я начал это раздел с вопроса: сколько различных видов связей может разумно существовать с участием двух множеств A и B? Конечно, здесь подчеркивается слово разумно. Очевидно, что можно было бы далее классифицировать случаи «много» (не больше двух, ровно два, не меньше двух, не больше трех и т.д.). Как говорится в [8], «например, в собрании должно участвовать не менее двух человек, а конкурсе танго должно принимать участие четное число танцоров». Однако эта дальнейшая классификация кажется не слишком полезной (она добавляет массу сложностей, и очень быстро начинает действовать закон уменьшающегося плодородия), и далее в этой статье я не буду рассматривать такие возможности.

Примеры путаницы

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

<цитата>

Например, рассмотрим следующие описания связей:

  • Имеется связь один-к-одному «использование оборудования» между сегментом полета и самолетом. На заданном сегменте полета в заданный день используется один и только один самолет.
  • Имеется связь один-к-одному «вылет» между сегментами полетов и аэропортами и другая связь один-к-одному «прилет» между сегментами полета и аэропортами. Для каждого сегмента полета имеется ровно один аэропорт вылета и один аэропорт прилета.
  • Имеется связь один-ко-многим «публикация» между издательствами и книгами. Каждое издательство может публиковать много книг, и каждая книга может быть опубликована только одним издательством.
  • Имеется связь «многие-ко-многим» «авторство» между статьями и людьми. У каждой статьи может быть один или большее число авторов, и каждый человек может быть автором одной или большего числа статей.

</цитата>

Проанализируем каждый из этих примеров по порядку. Для удобства анализа я буду повторять примеры.

  • Имеется связь один-ко-одному «использование оборудования» между сегментом полета и самолетом. На заданном сегменте полета в заданный день используется один и только один самолет.

    Как отмечалось во введении, истинная ситуация в данном случае выглядит следующим образом. Для каждого сегмента полета («в заданный день») имеется ровно один самолет; для каждого самолета имеется много сегментов полета (возможно, ни одного) – снова в заданный день. Таким образом, здесь мы имеем дело с примером к случаю 2.4 (или случаю 4.2, если мы инвертируем пример).

  • Имеется связь один-к-одному «вылет» между сегментами полетов и аэропортами и другая связь один-к-одному «прилет» между сегментами полета и аэропортами. Для каждого сегмента полета имеется ровно один аэропорт вылета и один аэропорт прилета.

    Действительно, для каждого сегмента полета имеется ровно один аэропорт вылета, но из каждого аэропорта отправляется много сегментов полета (в данном случае я предполагаю, что «много» не включает нуля); так что я думаю, что здесь мы имеем дело со случаем 2.3 (или случаем 3.2). Аналогично для прилетов.

  • Имеется связь один-ко-многим «публикация» между издательствами и книгами. Каждое издательство может публиковать много книг, и каждая книга может быть опубликована только одним издательством.

    Корректность анализа этого примера зависит от смысла, вкладываемого в термин книга. Например, большинство людей наверняка сказало бы, что Гордость и предубеждение (Jane Austen, Pride and Prejudice) – это книга, но она публикуется многими разными издательствами (даже одновременно; во время написания этой статьи она была доступна от нескольких издательств). А некоторые книги публикуются совместно двумя или более издателями; в моей собственной профессиональной библиотеке имеется, по меньшей мере, одна книга, опубликованная совместно издательствами ACM Press и Addison-Wesley. Поэтому я бы сказал, что имеет место ситуация, когда каждое издательство публикует много книг, и у каждой книги имеется много издательств, где оба «много» не включают нуля: случай 3.3.

  • Имеется связь «многие-ко-многим» «авторство» между статьями и людьми. У каждой статьи могут быть один или большее число авторов, и каждый человек может быть автором одной или большего числа статей.

    В действительности у каждой книги имеется хотя бы один автор, а каждый человек является автором нуля или большего числа статей: случай 3.4 (или случай 4.3).

Замечание: Только для того, чтобы показать, что я не адресую свои критические замечания к одной конкретной публикации или одному конкретному автору, вот еще пара примеров, демонстрирующих аналогичную путаницу.

  • Из [6]: «Связь один-к-одному …Типичным примером могло бы быть то, что одна и только одна ФАБРИКА производит конкретный ПРОДУКТ.» Но разве же связь ФАБРИКИ и ПРОДУКТОМ не является связью многие-к-одному, и не один-к-одному? Замечание: Я взял на себя свободу использовать здесь (а далее в этом разделе) термин многие-к-одному, хотя еще не определил его точно. Обещаю, что я это сделаю.
  • Из [7]: «Отображение один-к-одному … означает, что для каждого экземпляра [sic] во времени каждого значения A имеется одно и только одно ассоциированное с ним значение B. Имеется отображение один-к-одному между ИМЕНЕМ СЛУЖАЩЕГО и ЗАРАБОТНОЙ ПЛАТОЙ.» Опять, не является ли эта связь (в данном случае от ИМЕНИ СЛУЖАЩЕГО к ЗАРАБОТНОЙ ПЛАТЕ) связью многие-ко-одному, а не один-к-одному?

Возвращаясь на мгновение к примерам из [5], я думаю, что часть путаницы вызвана использованием автором слова между – как, например, во фразе «связь один-ко-многим … между издательствами и книгами» (курсив мой). Как я говорил ранее, связи (по крайней мере, направленные связи) лучше считать существующими от одного множества к другому, а не между этими множествами. Так, можно было представить (например), что от A к B имеется связь один-к-одному, в то время как от B к A имеется связь многие-к-одному (возможно, в случае 2.4); но я думаю, что трудно в такой ситуации ясно и четко охарактеризовать «связь между A и B».

Кстати, я говорил в аннотации к этой статье, что «обзор литературных источников [также показывает некоторое] отсутствие систематического подхода в этой области». Один из примеров такого отсутствия систематического подхода связан с включением или не включением нуля в число «многих». Для определенности обратимся еще раз к рис. 2 и рассмотрим случай 1.4 (для удобства повторим эту часть рисунка):

Линия между двумя прямоугольниками представляет как связь от A к B, так и обратную связь от B к A, и аннотация над этой линией показывает то, что часто называют ограничениями мощности на этих связях. Спецификация 0..1 показывает, что для одного a может иметься от нуля до одного (т.е. не более одного) b; спецификация 0..M означает, что для одного b может иметься любое число a, от нуля до некоторой неопределенной верхней границы M. Для других спецификаций с рис. 2 имеются аналогичные интерпретации.

Кстати, обязан заметить мимоходом, что в UML для обсуждаемого понятия используется не термин «мощность» (cardinality), а термин кратность (multiplicity). Как говорится в [1], «кратность» является «спецификацией допустимых значений мощности – размера, который может принимать множество». Ну, я и раньше жаловался на кавалеристский подход к терминологии в нашей области, но этот пример носит явно гротескный характер… Факт состоит в том, что слово multiplicity просто не означает того, чего хочет от него UML (и я говорю это с полным знанием заявлений Шалтая-Болтая по подобным вопросам). В Chambers Twentieth Century Dictionary этот термин определяется следующим образом:

multiplicity – состояние множественности: огромное число

(Множественность (manifold) здесь означает «много в числовом измерении».) Таким образом, можно было бы с должным основанием сказать, что «UML страдает множественностью терминов – в этом языке используется гораздо больше терминов, чем понятий» (подкрепить это утверждение примерами не составляет труда). Однако мы не можем разумным образом сказать, что, например, «множественность множества {a,b,c} равна трем». (Конечно, мощность этого множества равняется трем.) Замечание: Развернутое обсуждение проблем терминологии и понятий UML см. в [3].

Как бы то ни было, вернемся к теме ограничений мощности по существу. Часто пытаются уточнить, включают ли «многие» ноль, с помощью использования терминов обязательная (mandatory) и необязательная (optional) [связь]. Но, как кажется, отсутствует какое-либо согласие относительно смысла этих терминов. Рассмотрим следующие цитаты:

  • Из [8]: «Ноль показывает, что каждый объект может не отображаться на какой бы то ни было объект. Единица показывает, что каждый объект должен отображаться не менее чем на один объект. По причине наличия аспектов может и должен этих двух минимальных ограничений их [sic] иногда называют необязательным и обязательным отображениями соответственно.»
  • Из [9]: «Необязательная [связь]: Существование какой-либо сущности в связи не зависит от связи … Обязательная [связь]: Существование обеих сущностей зависит от связи.»

Кажется ли вам, что эти определения демонстрируют «систематический подход»? (Мне не кажется.) Кажутся ли они вам понятными? (Определенно нет.) Считаете ли вы, что в них говорится об одном и том же? (Очень трудно сказать.)

Ладно, хватит ворчать. Одним из понятий, которое, как мне кажется, может помочь нам придти к более точным определениям в этой области, является понятие функции. Рассмотрим его более пристально.

Функции

В контексте компьютинга функции встречаются повсеместно, и я уверен, что у вас имеется, по крайней мере, интуитивное понимание сути этого понятия. Подобно многим другим терминам компьютерной области, это понятие происходит из математики; однако смысл термина функция с годами потерял ясность и несколько выхолостился. Здесь я бы хотел вернуться к исходному математическому определению, поскольку, как я уже говорил, оно может быть достаточно полезным для прояснения понятия связи. Вот это определение:

Функция – Пусть A и B – это множества, не обязательно различные. Тогда функция f – это правило, которое спаривает каждый элемент A (области определения f) с ровно одним элементом B (областью значений f); эквивалентно мы могли бы сказать, что f – это само спаривание. Уникальный элемент b множества B, соответствующий элементу a множества A, является образом a (под действием f), и множество всех таких образов является множеством значений f. Заметим, что множество значений является подмножеством (часто собственным подмножеством) области значений.

Это определение иллюстрируется приведенным ранее телефонным примером. В данном случае функция – это правило, спаривающее буквы с цифрами (эквивалентно, это само спаривание букв с цифрами); областью определения является множество букв A-Z, областью значений – множество цифр 0-9, и множеством значений – множество целых чисел 2-9 (собственное подмножество области значений). Под действием этой функции образом (например) буквы H является целое число 4.

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

Замечание: двумя дополнительными терминами, означающими в математике точно то же, что и функция, являются термины отображение (mapping) и преобразование (transformation) (сокращаемые до map и transform соответственно). Снова нужно понимать, что в компьютерном контексте смысл этих терминов потерял ясность и несколько выхолостился, и в литературе, безусловно, можно найти взаимно противоречащие определения. И опять, caveat lector.

Итак, как связано понятие функции с понятием связи? Если f является функцией с областью определения A, областью значений B и множеством значений C (где C – подмножество B), то должно быть понятно следующее:

  • Функция f определяет связь от A к B, в соответствии с которой для каждого элемента a в A существует в точности один элемент b в B (образ a под действием f).
  • Аналогично, функция f определяет связь от A к C, в соответствии с которой для каждого элемента a в A существует в точности один элемент c в C (образ a под действием f).
  • Функция f также определяет, по крайней мере, неявно обратную связь от B к A, в соответствии с которой для каждого элемента b в B существуют M элементов a в A, таких что b является образом a под действием f (M ≥ 0). Замечание: Конечно, в общем случае обратная связь не будет функцией; в действительности, она будет функцией, только если M = 1 для всех элементов b в B.
  • Аналогично, функция f также определяет, по крайней мере, неявно обратную связь от C к A, в соответствии с которой для каждого элемента c в C существуют M элементов a в A, таких что c является образом a под действием f (M > 0). Замечание: Конечно, в общем случае обратная связь не будет функцией; в действительности, она будет функцией, только если M = 1 для всех элементов c в C.

Как я постараюсь показать, эти факты некоторым образом подсказывают нам, как может помочь понятие функции при более точном определении таких терминов, как связь многие-к-одному. По определению у любой заданной функции f имеется то свойство, что произвольное число M (M > 0) элементов a из ее области определения A может отображаться на заданный элемент c из ее области значений C. По этой причине мы можем сказать, что связь из A в C является связью многие-к-одному (обратите внимание, что здесь «многие» не включают ноль). Более того, часто мы более конкретно называем эту связь (для выделения) связью многие-к-одному «на» onto»), поскольку по определению в C нет такого элемента c, который не был бы образом какого-то элемента из A.

Что же касается связи от множества A к области значений B, то мы называем эту связь связью многие-к-одному «в» into»), поскольку в общем случае в B имеются некоторые элементы b, которые не являются образами никаких элементов A. Замечание: Конечно, связь многие-к-одному «на» является частным случаем связи многие-к-одному «в». Кроме того, следует заметить, что в случае связи многие-к-одному «в» (но не многие-к-одному «на») спецификатор многие-к-одному используется немного неаккуратно. См. разд. «Соответствия» (подразд. «Соответствие многих-к-одному»).

Примеры:

  1. Телефонный пример (где A является множеством A-Z, B является множеством целых чисел 0-9, и C является множеством целых чисел 2-9) – это пример связи от A в B многие-к-одному «на»– и, конечно, связи многие-к-одному «в» от A в C.
  2. Аналогично, функция, которая отображает неотрицательные целые числа x в их квадраты (где A и B являются множествами неотрицательных целых числе, а C – множеством квадратов целых чисел), также представляет пример связи многие-к-одному «в» от A в B и связи многие-к-одному «на» от A в C.

Дополнительная терминология: Связь многие-к-одному называют также сюръективной функцией (или отображением), или, для краткости, просто сюръекцией. Для полноты приведу ее определение:

Сюръекция – Пусть f – это функция с областью определения A и областью значений B. Тогда f является сюръекцией (называемой также связью многие-к-одному «на») тогда и только тогда, когда каждый элемент b в B представляет собой образ не менее одного элемента a из A – другими словами, тогда и только тогда, когда множество значений f совпадает с областью значений.

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

Теперь снова рассмотрим пример «квадратов», в котором область определения и множество значений являются множеством всех неотрицательных целых чисел и множеством всех квадратов целых чисел соответственно, а f является функцией, отображающей неотрицательные целые числа x в их квадраты . Эта конкретная функция удовлетворяет тому свойству – которому не удовлетворяет большинство функций, – что если a1 и a2 являются различными элементами A, то их образы c1 и c2 являются различными элементами C; другими словами, каждый элемент C является образом ровно одного элемента A. В таком случае мы можем сказать, что связь из A в B является связью один-к-одному, или, более точно, один-к-одному «на». Что же касается связи от области определения A к области значений B, мы характеризуем ее как связь один-в-один «в», поскольку в общем случае имеются некоторые элементы b множества B, которые не являются образами какого бы то ни было элемента a множества A. Замечание: конечно, связь один-к-одному «на» является частным случаем связи один-к-одному «в», а связь один-к-одному в общем случае является частным случаем связи многие-к-одному. Кроме того, следует заметить, что в случае связи один-к-одному «в» (но не один-к-одному «на») спецификатор один-к-одному используется немного неаккуратно. См. разд. «Соответствия» (подразд. «Соответствие один-к-одному»).

Дополнительная терминология: Связь один-к-одному «на» также называют биективной функцией (или отображением), или, для краткости, просто биекцией; связь один-к-одному «в» также называют инъективной функцией (или отображением), или, для краткости, просто инжекцией. Для полноты приведу их определения.

биекция – Пусть f – это функция с областью определения A и областью значений B. Тогда f является биекцией (называемой также связью один-к-одному «на») тогда и только тогда, когда каждый элемент b в B представляет собой образ ровно одного элемента a из A.
инжекция – Пусть f – это функция с областью определения A и областью значений B. Тогда f является инжекцией (называемой также связью один-к-одному «в») тогда и только тогда, когда каждый элемент b в B представляет собой образ не более одного элемента a из A.

Заметим, в частности, что функция является биекцией в том и только в том случае, когда она одновременно является инжекцией и сюръекцией. Эквивалентно, биекция является функцией (из области определения A в область значений B), для которой обратная связь (из B в A) – это тоже функция (в действительности, биекция). Вот простой пример. Пусть A и B – это множество всех целых чисел, и пусть f – это функция, отображающая целые числа x в их последующие элементы x+1. Тогда f – это биекция множества A в само себя (и то же можно сказать про обратную функцию, которое отображает целые числа x в и их предшествующие элементы x-1, – это биекция множества A в само себя).

Далее, заметим, что биекцию можно считать отображением без потерь в том смысле, что мы всегда можем вернуться к произвольному элементу a из области определения из его образа b из области значений путем использования обратного отображения, которое также является биекцией. Замечание: Биекции иногда называют также изоморфными отображениями, хотя эта терминология осуждается (см. разд. «Заключительные замечания»).

Позвольте мне теперь соотнести термины, определенные в этом разделе, со случаями, которые были установлены в разд. «Сколько имеется случаев?» (там, где это возможно). Без подробного обсуждения должны быть понятны следующие факты:

  • Случай 2.1 является инжекцией, или связью от A в B один-к-одному «в» (и случай 1.2 – это инжекция от B в A).
  • Случай 2.2 является биекцией, или связью от A в B один-к-одному «на» (и также от B в A).
  • Случай 2.3 является сюръекцией, или связью от A в B многие-к-одному «в» (и случай 3.2 – это сюръекция от B в A).
  • Случай 2.4 является функцией от A в B, которая не является ни инжекцией, ни биекцией, ни сюръекцией (и случай 4.2 является функцией от B в A, которая не является ни инжекцией, ни биекцией, ни сюръекцией).

Итак, теперь мы разобрались с четырьмя из десяти различными случаями, или семью из всех 16 случаев. А что можно сказать про остальные случаи? Очевидно, что понятие функции больше нам помочь не может; чтобы должным образом разобраться с остальными случаями, нужны дополнительные понятия и дополнительные определения

Соответствия

Математическое понятие соответствия (correspondence) является более общим, чем понятие функции – в действительности, его можно рассматривать как формализацию интуитивного понятия направленной бинарной связи (как мы видели, некоторые, но не все связи являются функциями). Как и следовало ожидать, имеется четыре вида соответствий: один-к-одному, многие-к-одному, один-ко-многим и многие-ко-многим (хотя, опять же, как и следовало ожидать, соответствия многие-к-одному и один-ко-многим в действительности представляют одно и то же явление, рассматриваемое с двух разных точек зрения). Рассмотрим каждый из этих случаев в отдельном подразделе.

Соответствие один-к-одному

Вот точное определение:

соответствие один-к-одному – Пусть A и B – это множества, не обязательно различные. Тогда соответствие от A к B один-к-одному – это правило, которое спаривает каждый элемент множества A ровно с одним элементом множества B и каждый элемент множества B ровно с одним элементом множества A. Эквивалентно, мы могли бы сказать, что соответствие один-к-одному – это само спаривание.

Например, пусть A – это множество всех целых чисел. Тогда спаривание элементов x с их последующими элементами x+1 является соответствием один-к-одному из A к самому ему, и то же можно сказать про спаривание элементов x с их предшествующими элементами x-1.

Полагаю очевидным тот факт, что соответствие один-к-одному – это ничто иное, как ранее определенная биекция. Беда в том, что термин соответствие один-к-одному часто неточно используют в одном из следующих значений (обратите внимание на многие тонкие отличия):

  1. Такое спаривание, что каждому элементу A соответствует не более одного элемента B (хотя каждому элементу B соответствует ровно один элемент A).
  2. Такое спаривание, что (хотя каждому элементу A соответствует ровно один элемент B) каждому элементу B соответствует не более одного элемента A).
  3. Такое спаривание, что каждому элементу A соответствует не более одного элемента B, и каждому элементу B соответствует не более одного элемента A).

Временно я буду называть эти три интерпретации термина соответствие один-к-одному Типом 1, Типом 2 и Типом 3 соответственно, а строгую (биективную) интерпретацию – Типом 0. Позвольте мне теперь соотнести эти четыре интерпретации со случаями, установленными в разд. «Сколько имеется случаев?» (там, где это возможно). В действительности, должны быть ясны следующие факты:

  • Случай 2.2 (ранее корректно распознанный, как биекция, или связь от A к B один-к-одному «на») может также быть распознан, как соответствие Типа 0 от A к B один-к-одному (и также от B к A).
  • Случай 1.2 (ранее корректно распознанный, как инжекция, или связь от A к B один-к-одному «в») может также быть распознан, как соответствие Типа 1 от A к B один-к-одному.
  • Случай 2.1 (ранее корректно распознанный, как инжекция, или связь от A к B один-к-одному «в») может также быть распознан, как соответствие Типа 2 от A к B один-к-одному.
  • Случай 1.1 может быть распознан, как соответствие Типа 3 от A к B один-к-одному (и также от B к A).

Замечание: Принимая во внимание то, что (как я уже говорил) интерпретации Типа 1, Типа 2 и Типа 3 являются неточными, теперь можно видеть, почему ранее говорилось (в разделе «Функции»), что, в частности, в случае связи один-к-одному «в» спецификатор один-к-одному использовался немного неаккуратно.

Соответствие многие-к-одному

Снова начнем с определения:

соответствие многие-к-одному – Пусть A и B – это множества, не обязательно различные. Тогда соответствие от A к B многие-к-одному – это правило, которое спаривает каждый элемент множества A ровно с одним элементом множества B и каждый элемент множества B не менее чем с одним элементом множества A. Эквивалентно, мы могли бы сказать, что соответствие многие-к-одному – это само такое спаривание.

Например, пусть A и B – это множество всех целых чисел и множество всех неотрицательных целых чисел соответственно. Тогда спаривание целых чисел x с их абсолютными значениями |x| является соответствием от A к B многие-к-одному.

Полагаю очевидным тот факт, что соответствие один-к-одному – это ничто иное, как ранее определенная сюръекция. Беда в том, что термин соответствие многие-к-одному часто неточно используют для обозначения явления, слегка отличающегося от сюръекции как таковой. Более точно, этот термин часто используется для обозначения одной из следующих вещей:

  1. Такое спаривание, что каждому элементу A соответствует не более одного элемента B (хотя каждому элементу B соответствует не менее одного элемента A).
  2. Такое спаривание, что (хотя каждому элементу A соответствует ровно один элемент B) каждому элементу B соответствует любое число элементов A (возможно, не соответствует ни один элемент).
  3. Такое спаривание, что каждому элементу A соответствует не более одного элемента B, и каждому элементу B соответствует любое число элементов A (возможно, не соответствует ни один элемент).

Временно я буду называть эти три интерпретации термина соответствие многие-к-одному Типом 1, Типом 2 и Типом 3 соответственно, а строгую (сюръективную) интерпретацию – Типом 0. Позвольте мне теперь соотнести эти четыре интерпретации со случаями, установленными в разд. «Сколько имеется случаев?» (там, где это возможно). Как и ранее, должны быть ясны следующие факты:

  • Случай 2.3 (ранее корректно распознанный, как сюръекция, или связь от A к B многие-к-одному) может также быть распознан, как соответствие Типа 0 от A к B многие-к-одному.
  • Случай 1.3 может быть распознан, как соответствие Типа 1 от A к B многие-к-одному.
  • Случай 2.4 (ранее корректно распознанный, как функция, не являющаяся ни инжекцией, ни биекцией, ни сюръекцией) может также быть распознан, как соответствие Типа 2 от A к B многие-к-одному.
  • Случай 1.4 может быть распознан, как соответствие Типа 3 от A к B многие-к-одному.

Замечание: Принимая во внимание то, что (как я уже говорил) интерпретации Типа 1, Типа 2 и Типа 3 являются неточными, теперь можно видеть, почему ранее говорилось (в разделе «Функции»), что, в частности, в случае связи многие-к-одному «в» спецификатор многие-к-одному использовался немного неаккуратно.

Соответствие один-ко-многим

Снова начнем с определения:

соответствие один-ко-многим – Пусть A и B – это множества, не обязательно различные. Тогда соответствие от A к B один-ко-многим – это правило, которое спаривает каждый элемент множества A не менее чем с одним элементом множества B и каждый элемент множества B точно с одним элементом множества A. Эквивалентно, мы могли бы сказать, что соответствие один-ко-многим – это само такое спаривание.

Например, пусть A и B – это множество всех неотрицательных целых чисел и множество всех чисел соответственно. Тогда спаривание неотрицательных целых чисел x с их квадратными корнями ±Öx является соответствием от A к B один-ко-многим.

Беда в том, что термин соответствие один-ко-многим часто неточно используют для обозначения явления, слегка отличающегося от только определенного понятия. Более точно, этот термин часто используется для обозначения одной из следующих вещей:

  1. Такое спаривание, что каждому элементу A соответствует любое число элементов B, т.е., возможно, не соответствует ни один элемент (хотя каждому элементу B соответствует точно один элемент A).
  2. Такое спаривание, что (хотя каждому элементу A соответствует не менее чем один элемент B) каждому элементу B соответствует не более чем один элемент A.
  3. Такое спаривание, что каждому элементу A соответствует любое число элементов B, т.е., возможно, не соответствует ни один элемент, и каждому элементу B соответствует не более чем один элемент A.

Временно я буду называть эти три интерпретации термина соответствие один-ко-многим Типом 1, Типом 2 и Типом 3 соответственно, а строгую интерпретацию – Типом 0. Позвольте мне теперь соотнести эти четыре интерпретации со случаями, установленными в разд. «Сколько имеется случаев?» (там, где это возможно). Снова, как и ранее, должны быть ясны следующие факты:

  • Случай 3.2 (ранее корректно распознанный, как сюръекция, или связь от B к A многие-к-одному) может также быть распознан, как соответствие Типа 0 от A к B один-ко-многим.
  • Случай 4.2 (ранее корректно распознанный, как функция от B к A, не являющаяся ни инжекцией, ни биекцией, ни сюръекцией) может быть также распознан, как соответствие Типа 1 от A к B один-ко-многим.
  • Случай 3.1 может быть распознан, как соответствие Типа 2 от A к B один-ко-многим.
  • Случай 4.1 может быть распознан, как соответствие Типа 3 от A к B один-ко-многим.
Соответствие многие-ко-многим

Снова начнем с определения:

соответствие многие-ко-многим – Пусть A и B – это множества, не обязательно различные. Тогда соответствие от A к B многие-ко-многим – это правило, которое спаривает каждый элемент множества A не менее чем с одним элементом множества B и каждый элемент множества B не менее чем с одним элементом множества A. Эквивалентно, мы могли бы сказать, что соответствие многие-ко-многим – это само такое спаривание.

Например, пусть A – это множество всех положительных целых чисел. Рассмотрим спаривание положительных целых чисел x и y, определенное следующим образом. Положительные числа x and y спариваются тогда и только, когда содержат одно и то же число цифр в традиционном десятичном представлении. Тогда это спаривание является соответствием многие-ко-многим от A к нему же самому.

Беда в том, что термин соответствие многие-ко-многим часто неточно используют для обозначения явления, слегка отличающегося от только определенного понятия. Более точно, этот термин часто используется для обозначения одной из следующих вещей:

  1. Такое спаривание, что каждому элементу A соответствует любое число элементов B, т.е., возможно, не соответствует ни один элемент (хотя каждому элементу B соответствует не менее одного элемента A).
  2. Такое спаривание, что (хотя каждому элементу A соответствует не менее чем один элемент B) каждому элементу B соответствует любое число элементов A, т.е., возможно, не соответствует ни один элемент.
  3. Такое спаривание, что каждому элементу A соответствует любое число элементов B, т.е., возможно, не соответствует ни один элемент, и каждому элементу B соответствует любое число элементов A, т.е., возможно, не соответствует ни один элемент.

Временно я буду называть эти три интерпретации термина соответствие многие-ко-многим Типом 1, Типом 2 и Типом 3 соответственно, а строгую интерпретацию – Типом 0. Позвольте мне теперь соотнести эти четыре интерпретации со случаями, установленными в разд. «Сколько имеется случаев?» (там, где это возможно). И опять должны быть ясны следующие факты:

  • Случай 3.3 может быть распознан, как соответствие Типа 0 от A к B многие-ко-многим (а также и от B к A).
  • Случай 4.3 может быть распознан, как соответствие Типа 1 от A к B многие-ко-многим.
  • Случай 3.4 может также быть распознан, как соответствие Типа 2 от A к B многие-ко-многим.
  • Случай 4.4 может быть распознан, как соответствие Типа 3 от A к B многие-ко-многим (а также и от B к A).
Резюме

Теперь рассмотрены все 16 случаев. На рис. 3, полученном путем редактирования рис. 1, резюмируется ситуация, сложившаяся к данному моменту. Замечание: на этом рисунке я использую сокращения, не требующие дополнительных пояснений (например, M:1 для «многие-к-одному»). Кроме того, некоторые элементы матрицы можно было бы определить более чем одним способом; в таких случаях я выбираю форму, которая лично мне кажется наиболее полезной (например, я предпочитаю «1:1 “на”», а не «1:1 Тип 0»). Нотация A B означает «от A в B»; нотация A « B означает «от A в B и от B в A».
для b имеется → не более одного a точно один a не менее одного a M экземпляров a (M ≥ 0)
для a имеется ↓
не более одного b 1:1 Тип 3
A B
1:1 «в»
B A
M:1 Тип 1
A B
M:1 Тип 3
A B
точно один b 1:1 «в»
A B
1:1 «на»
A B
M:1 «на»
A B
M:1 Тип 2
A B
не менее одного b M:M Тип 2
A B
M:1 «на»
A B
M:M строго
A B
M:M Тип 2
A B
M экземпляров b (M ≥ 0) 1:M Тип 3
A B
1:M Тип 1
B A
M:M Тип 1
A B
M:M Тип 3
A B

Рис. 3. Резюме всех шестнадцати случаев

Заключительные замечания

Я хотел бы завершить эту статью рядом рекомендаций. Начну с нескольких мелочей. Во-первых, я говорил ранее, что более осмысленно рассматривать связь, как ведущую от одного множества к другому, а не как имеющуюся между этими множествами; я даже охарактеризовал использование слова «между», как источник некоторой путаницы, наблюдаемой в этой области. Однако имеется пара случаев, в которых использование слова «между» является приемлемым, и, возможно, даже более удачным. Речь идет о случаях 2.2 и 3.3. Напоминаю, что случай 2.2 – это случай строгой связи «один-к-одному», а случай 3.3 – случай строгой связи «многие-ко-многим». Во всех остальных случаях я рекомендовал бы использовать предлоги «от» и «к» и избегать использования «между».

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

изоморфизм – Пусть A и B – это множества, не обязательно различные, и пусть f – это биективное отображение из A в B. Путь OpA – это операция, операндами которой являются элементы множества A, и результатом которой также является некоторый элемент множества A. Тогда f является изоморфизмом в том и только в том случае, когда для каждой такой операции OpA существуют аналогичная операция OpB, операндами которой являются элементы множества B, и результатом которой также является некоторый элемент множества B, такая что если результатом операции OpA, примененной к операндам a1, a2, ..., an, является a, и элементы b1, b2, ..., bn, b множества B являются образами элементов a1, a2, ..., an, a под действием f соответственно, то результатом операции OpB, примененной к операндам b1, b2, ..., bn, является b.

Другими словами, биективное отображение является изоморфизмом в том и только в том случае, когда оно сохраняет алгебраическую структуру области определения A в области значений B. Конечно, если биективное отображение f является изоморфизмом, то его инверсия также является изоморфизмом.

Теперь я перейду к более серьезной рекомендации. Я показываю в этой статье, что ситуация вокруг связей, вообще говоря, является довольно сложной – более сложной, чем обычно принято считать. На самом деле, я думаю, что она достаточно сложна для того, чтобы наше обычное доверие к использованию упрощенной терминологии в этой области было несколько опасным или, по крайней мере, вводящим в заблуждение. Поэтому, как отмечалось в аннотации к этой статье, я считаю, что нам нужно приложить усилия к формированию улучшенного набора терминов, которые являются более понятными, более корректными и более точными, чем те, которые обычно используются. Более точно:

  • Я не думаю, что нам следует различать разные случаи по их идентификационным номерам («случай 3.2» и тому подобное), поскольку для таких идентификационных номеров всегда требуется какое-либо руководство, или ключ, с помощью которого их можно было бы интерпретировать. Конечно, я использовал такие идентификационные номера внутри этой статьи, но это было сделано потому, что я старался в целях анализа наложить на предмет изучения систематическую структуру. Я бы очень удивился, если вы не испытали трудности при запоминании смысла каждого из случаев, особенно, если вы не использовали в качестве ключа копии рис. 1 и 2.
  • Я не думаю, что нам следует использовать ярлыки типа необязательный и обязательный, поскольку их смысл является, по существу, произвольным (их не стоит использовать, даже если мы сможем придти к согласию относительно их смысла, насчет чего я не питаю особого оптимизма). Замечание: Следует отметить, что в литературе можно обнаружить несколько других подобных терминов: условные (conditional) связи, возможные (contingent) связи, сложные (complex) связи, единичные (singular) связи, исключительные (exclusive) связи и т.д. (приведенный список не является полным). Считаете ли вы, что точный смысл этих терминов очевиден? Или же их смысл является общепризнанным?
  • Я не думаю, что нам следует использовать математические термины, такие как функция, инжекция, сюръекция или биекция, хотя для этих терминов, по крайней мере, имеются точные определения. Одной из проблем является то, что с этими определениями знакомы немногие (и в любом случае, как мне кажется, смысл инжекции и сюръекции трудно запомнить). Другая же проблема – довольно неприятная! – состоит в том, что эти термины не покрывают все случаи. Еще одной проблемой является то, что, по крайней мере, термин функция часто используется в очень неточной манере, несмотря на наличие точного определения, что повышает вероятность неправильного понимания.
  • Аналогичные замечания применимы к терминам один-к-одному «на» (и «в») и многие-к-одному «на» (и «в»).
  • Я отмечал, что у каждого из терминов соответствие один-к-одному, соответствие многие-к-одному, соответствие один-ко-многим и соответствие многие-ко-многим имеется три неточных интерпретации, а также одна точная интерпретация. Поэтому я думаю, что и этих терминов следует избегать, за исключением тех случаев, где неправильное понимание невозможно (вы можете поразмышлять над тем, существуют ли такие случаи). Конечно, я вообще бы не стал бы использовать такие термины, как «соответствие один-ко-многим Типа 2»! Как и термины типа «случай 3.2» и т.д., я использовал эти термины только потому, что старался в целях анализа наложить на предмет изучения систематическую структуру. Я был очень удивился, если для вас не составило труда запомнить, что все это означает.

Ну и какие же нам термины использовать? Я думаю, что нам следует использовать термины, являющиеся абсолютно явными – формируя такие фразы как «от нуля или одного к одному или большему числу», – если они действительно означают то, что мы имеем в виду, а не использовать аппроксимации типа «один-ко-многим», надеясь при этом, что публике известно, что в данном случае «один» включает случай нуля, а «многие» – нет. Итак, вот термины, которыми я бы рекомендовал пользоваться. Заметим, что они напрямую происходят из аннотации к рис. 2. Замечу также, что в этом списке я использую и терминологию «случая 3.2» и т.д.! – но, надеюсь, это в последний раз.

  • Случай 1.1: от одного или менее к одному или менее
  • Случай 1.2: от ровно одного к одному или менее
  • Случай 1.3: от одного или более к одному или менее
  • Случай 1.4: от нуля или более к одному или менее
  • Случай 2.1: от одного или менее к ровно одному
  • Случай 2.2: от ровно одного к ровно одному
  • Случай 2.3: от одного или более к ровно одному
  • Случай 2.4: от нуля или более к ровно одному
  • Случай 3.1: от одного или менее к одному или более
  • Случай 3.2: от ровно одного к одному или более
  • Случай 3.3: от одного или более к одному или более
  • Случай 3.4: от нуля или более к одному или более
  • Случай 4.1: от одного или менее к нулю или более
  • Случай 4.2: от ровно одного к нулю или более
  • Случай 4.3: от одного или более к нулю или более
  • Случай 4.4: от нуля или более к нулю или более

Должен сразу признаться, что приведенные термины все еще не являются настолько отчетливо ясными, как бы мне хотелось. Например, в случае «от одного или менее к одному или более» должно быть ясно, что «один или менее» означает, что для каждого b имеется не более одного a, а не наоборот, и что «один или более» означает, что для каждого a имеется не менее одного b, а не наоборот. Так что, возможно, я все еще нахожусь в поиске лучших терминов … но пока этих терминов нет, я думаю, что могут послужить те, которые приведены выше. Замечание: В связи с этим Хью Дарвен предложил следующую числовую замену для фраз «не больше одного» (и т.д.):*
один или менее1-
ровно один1
один или более1+
ноль или более0+

При использовании этой замены «от одного или менее к нулю или более» (например) становится «от 1- к 0+» (или, что, возможно, лучше, «от 1-:0+»). Эта нотация, по крайней мере, является краткой, в ней не используются слова естественного языка, и она работает в более экзотических случаях, таких как «от ровно одного к не более двух» (1:2-); но и она не кажется мне совершенной.

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

бинарное отношение (binary relation) – Пусть A и C – это множества, не обязательно различные. Тогда бинарное отношение r – это правило, спаривающее каждый элемент множества A (области определения r) с одним или большим числом элементов множества C (области значений r); эквивалентно, можно сказать, что r – это само это спаривание.

Как вы думаете, имеется ли связь между тем понятием связей, которое было определено в этой статье, и математическим понятием бинарного отношения? И имеется ли связь между связями и отношениями, как они определяются в реляционной модели? И почему, по вашему мнению, реляционная модель получила такое название?

Литература

1. Grady Booch, James Rumbaugh, and Ivar Jacobson, The Unified Modeling Language User Guide. Reading, Mass.: Addison-Wesley (1999). (Имеется издание на русском языке: Грейди Буч, Джеймс Рамбо, Айвар Джекобсон. UML. Руководство пользователя. ДМК пресс, Питер, 2004 г.)

2. C. J. Date: The Relational Database Dictionary (2006, to appear).

3. C. J. Date: "Basic Concepts in UML: A Request for Clarification," in two parts, www.dbdebunk.com (December 2000; January 2001). Republished in Date on Database: Writings 2000-2006. Berkeley, Calif.: 2006 (to appear).

4. C. J. Date and Hugh Darwen: Databases, Types, and the Relational Model: The Third Manifesto (3rd edition). Reading, Mass.: Addison-Wesley (2006). (Второе издание книги опубликовано в переводе на русский язык: К. Дж. Дейт, Хью Дарвен. Основы будущих систем баз данных: третий манифест. Перевод под ред. С.Д.Кузнецова Янус-К, 2004.)

5. Mary E. S. Loomis: Object Databases: The Essentials. Reading, Mass.: Addison-Wesley (1995).

6. Michael M. Gorman: Database Management Systems: Understanding and Applying the Technology. Wellesley, Mass.: QED Information Sciences (1991).

7. James Martin: Computer Data-Base Organization (2nd edition). Englewood Cliffs, N.J.: Prentice-Hall (1977). (Книга издавалась на русском языке: Дж. Мартин. Организация баз данных в вычислительных системах. М., Мир, 1980.)

8. James Martin and James J. Odell: Object-Oriented Methods: A Foundation (2nd edition). Englewood Cliffs, N.J.: Prentice-Hall (1997).

9. Toby J. Torey and James P. Fry: Design of Database Structures. Englewood Cliffs, N.J.: Prentice-Hall (1982).

* Кстати, позвольте поблагодарить Хью за его внимательный анализ раннего варианта этой статьи.

VPS/VDS серверы. 30 локаций на выбор

Серверы VPS/VDS с большим диском

Хорошие условия для реселлеров

4VPS.SU - VPS в 17-ти странах

2Gbit/s безлимит

Современное железо!

Бесплатный конструктор сайтов и Landing Page

Хостинг с DDoS защитой от 2.5$ + Бесплатный SSL и Домен

SSD VPS в Нидерландах под различные задачи от 2.6$

✅ Дешевый VPS-хостинг на AMD EPYC: 1vCore, 3GB DDR4, 15GB NVMe всего за €3,50!

🔥 Anti-DDoS защита 12 Тбит/с!

Новости мира IT:

Архив новостей

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 7861149
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2019 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...