Главная » SQL, Базы данных » ЗНАЧЕНИЯ ОТНОШЕНИЙ

0

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

1.         Каждый кортеж содержит точно одно значение (соответствующего типа) для каж дого атрибута.

2.         Атрибуты не характеризуются каким-либо упорядочением (например, слева на право).

3.         Кортежи не характеризуются каким-либо упорядочением (например, сверху вниз).

4.         В отношении отсутствуют дубликаты кортежей.

Для иллюстрации этих свойств воспользуемся отношением с данными о поставщиках, приведенным на рис. 3.8 (см. стр. 119). Для удобства это отношение снова показано на рис. 6.1, но заголовок в нем расширен для включения имен типов.

210     Часть II. Реляционная модель

Примечание. Формально мы должны были бы расширить также тело для включения имен атрибутов и типов. Например, запись S# для поставщика si должна была бы фактически выглядеть следующим образом.

S#   S#   S#(‘S1′)

Рис. 6.1. Отношение с данными о поставщиках, приведенное на рис. 3.8

Но для упрощения оставим тело этого отношения в таком же виде, в каком оно было первоначально представлено на рис. 3.8.

1.    Отношения нормализованы

Как было указано в разделе 6.2, каждый кортеж содержит точно одно значение для   каждого   из   своих   атрибутов,   поэтому   можно   сделать    неоспоримое заключение,  что  каждый  кортеж  в  каждом  отношении  содержит  точно  одно значение  для  каждого  из своих атрибутов.  Отношение, которое соответствует этому свойству,  называется  нормализованным; иначе мысль можно выразить таким образом, что  отношение находится в первой нормальной форме5, 1НФ. Согласно  этому  определению,  отношение,  показанное  на  рис.  6.1,  является нормализованным.

Примечание. Это первое свойство может показаться вполне очевидным и оно действительно является таковым, особенно в связи с тем, что (как мог уже заметить читатель)  все  отношения  нормализованы  по  определению!  Тем  не  менее,  из этого свойства вытекают некоторые важные следствия. См. подраздел "Атрибуты со значениями в виде отношений" ниже в этом разделе, а также главу 19 (где речь идет о недостающей информации).

2.   Атрибуты не характеризуются каким-либо упорядочением (например, слева направо) Как уже было сказано, компоненты кортежа не характеризуются каким-либо упорядочением (например, слева направо), и аналогичное утверждение является

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

причине, а именно, в связи с тем, что заголовок отношения представляет собой множество атрибутов, а множества в математике не характеризуются упорядочением своих элементов). Однако если мы изображаем отношение на бумаге в виде таблицы, то мы, естественно, вынуждены показывать столбцы этой таблицы в определенном порядке расположения слева направо, но читатель должен всегда учитывать, что этот порядок не имеет значения. Например, на рис. 6.1 столбцы отношения вполне могли быть показаны (допустим) в порядке слева направо, SNAME, CITY, STATUS, S#, и этот рисунок все равно представлял бы то же отношение,

5 Эта форма получила название "первой" в связи с тем, что могут быть также определены некоторые "более высокие" нормальные формы — вторая, третья и т.д. (см. главы 12 и 13).

по меньшей мере, если оно рассматривается как объект реляционной  модели6. Поэтому не может быть такого понятия, как "первый атрибут" или "второй атрибут" (и т.д.), а также не может идти речь о "следующем атрибуте" (т.е. в отношении не определено понятие "следования"); атрибуты всегда должны быть указаны по именам, а не по их позициям. Благодаря этому устраняется значительная часть предпосылок для  возникновения ошибок и появления крайне запутанных программ. Например, отсутствует возможность определять методы, не предусмотренные в системе и позволяющие каким-то образом "перебирать" один  атрибут за другим, просто наращивая указатель. Эта ситуация отличается в лучшую сторону по сравнению со многими системами программирования,  часто допускающими возможность вольно или невольно пользоваться тем, что логически не связанные элементы физически расположены близко друг от друга, несмотря на то, что это приводит к созданию программ, чреватых многочисленными ошибками.

3.   Кортежи не характеризуются каким-либо упорядочением (например, сверху  вниз) Это свойство следует из того факта, что тело отношения также представляет собой множество (кортежей); еще раз подчеркнем, что множества в математике не упорядочены. Но изображая отношения на  бумаге в виде таблицы, мы вынуждены показывать строки этой таблицы в некотором порядке расположения сверху вниз; тем не менее, читатель  должен учитывать, что этот порядок не имеет значения. Например, на рис. 6.1 строки вполне можно было бы также показать в обратном порядке, притом что сам рисунок по-прежнему представлял бы то же отношение. Поэтому не существует такого понятия, как "первый кортеж", "пятый кортеж" или "97-й кортеж" отношения, кроме того, не существует такого  понятия, как "следующий кортеж"; иными словами, в отношениях не определена позиционная адресация и нет понятия "следования".  Заслуживает внимание то, что если бы указанные понятия были определены, потребовались бы также некоторые дополнительные  операции,  например, "выполнить выборку л-го кортежа", "вставить этот  новый кортеж здесь", "переместить этот кортеж отсюда сюда" и т.д. А поскольку существует один и только один способ представления информации в реляционной модели (что является непосредственным следствием  информационного принципа Кодда), очень мощным средством реляционной модели является то, что для обработки этой информации  достаточно иметь одно и только одно множество операторов.

Рассмотрим последнее замечание более подробно. Фактически не  вызывает  сомнения такое утверждение, что если существует N разных способов представления информации, то требуется N различных множеств  операторов, а если N > 1, то приходится реализовывать, документировать, объяснять студентам, учить самим, запоминать и использовать больше  операторов. Но введение каждого дополнительного оператора приводит лишь к возрастанию сложности, а не выразительной мощи! Не существует  каких-либо полезных операторов, которые могут применяться, только если N > 1,а не N= 1. Эта тема будет более подробно рассматриваться в главе 26 (см. [26.12]—[26.14] и [26.17]), а затем снова появится в главе 27.

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

Вернемся к описанию самих отношений. Безусловно, определенные требования по упорядочению  кортежей  сверху  вниз  (а  также  по  упорядочению  атрибутов  слева направо) выдвигаются в связи с созданием  интерфейса между базой данных и базовым языком, таким как С или COBOL (см. сведения о курсорах SQL и конструкции ORDER BY, приведенные в главе 4). Но эти требования налагает базовый язык, а не реляционная  модель;  в   действительности  базовый  язык  требует  преобразования неупорядоченных  отношений  в  упорядоченные  списки,  или  массивы  (кортежи), именно  для   того,  чтобы  приобрели  смысл  операции,  подобные  "выборке  п-го кортежа".   Аналогичным   образом,   определенные   требования   по   упорядочению кортежей   должны   соблюдаться   при   представлении   результатов   запросов   для конечного пользователя. Но эти требования не входят в состав реляционной модели как таковой; скорее, они составляют  часть той среды, в которой определена сама реализация  этой  реляционной  модели.  4.     Отсутствие в отношении дубликатов кортежей

Это свойство также следует из того факта, что тело отношения представляет собой множество; множества в математике не содержат дубликатов элементов (иначе эту мысль можно выразить таким образом, что все элементы множества являются различными).

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

И действительно, это является (или должно быть) очевидным, что само понятие "дубликатов кортежей" лишено смысла. Для упрощения примем предположение, что отношение, приведенное на рис. 6.1, имеет только два атрибута, s# и CITY (как показано в разделе 6.5, интерпретация этих атрибутов соответствует их назначению— "Поставщик s# находится в  городе CITY"), а также предположим, что отношение содержит кортеж, согласно которому имеет место "истинный факт", что поставщик S1 находится в Лондоне. В таком случае, если бы отношение содержало дубликат указанного кортежа (при условии, что это вообще возможно), оно просто информировало бы нас о том же "истинном факте" во второй раз. Но если нечто является истинным, то при многократном повторении оно не становится более истинным!

Развернутое описание проблем, которые могут быть вызваны наличием дубликатов кортежей в отношении, можно найти в [6.3] и [6.6].

Источник: Дейт К. Дж., Введение в системы баз данных, 8-е издание.: Пер. с англ. — М.: Издательский дом «Вильямс», 2005. — 1328 с.: ил. — Парал. тит. англ.

По теме:

  • Комментарии