Введение в системы БД (542480), страница 40
Текст из файла (страница 40)
° В этой таблице есть четыре основных типа, а именно: тип номеров поставщиков (ЯЯ), тип имен (ИЛИЕ), тип значений статуса (ЯТАТУБ) и тип названий городов (С1ТУ). Замечание. Изображая отношение как таблицу на листе бумаги, мы обычно не заботимся о том, чтобы показать лежащие в основе типы (как в главе 3); но следует понимать, что, по крайней мере концептуально, они всегда есть. ° В таблице действительно есть две части — строка имен столбцов и некоторое множество строк данных.
Рассмотрим вначале строку имен (или заголовков) столбцов. ( ЯБ, ЯИАИЕ, ЯТАТБЯ, С1ТУ ) Эта строка действительно представляет собой набор упорядоченных пар. ( ЯЯ : ЯЯ БЕЛИЕ ~ НАНЕ ЯТАТОБ 3 ЯТЛТНЯ С1Т1 ! С1ТУ ) Первый компонент каждой пары является именем атрибута, а второй — соответствующим именем типа. Поэтому можно согласиться с тем, что строка заголовков столбцов действительно представляет собой заголовок в смысле приведенного определения. Замечание.
Как уже отмечалось, на практике заголовок отношения обычно рассматривают как заголовок, состоящий из набора имен атрибутов (т.е. имена типов часто опускаются), за исключением случаев, когда очень важна точность. Хотя, наверное, эта практика несколько небрежна, она удобна, и мы часто будем ей следовать. ° Что касается остальной части таблицы, то это, конечно, множество, а именно— множество строк данных. Давайте сконцентрируем внимание на какой-нибудь одной строке, например на следующей. ( Я1, БВ1СА, 20, Еопг)оп ) 164 Часть 11. Реляционная модель Эта строка в действительности представляет собой множество упорядоченных пар.
( Я(( : Я(( ( 'Я!' ) у ЯЕМЕ : МЬИЕ ( 'Яш11(з' ) ЯТМ((Я: 20 С1ТХ ~ 'колбов' Первый компонент каждой пары — это имя атрибута, а второй компонент — соответствующее значение атрибута. Часто в неформальном описании имена атрибутов опускают, поскольку мы знаем, что каждое отдельное значение в таблице в действительности является значением того атрибута, имя которого указано в заголовке соответствующего столбца. Кроме того, известно, что это значение принадлежит типу, положенному в основу данного атрибута. Например, значение 'Я1' (точнее, Я((('Я1')) — это значение атрибута Я(( и оно взято из соответствующего типа, а именно — из типа номера поставщика (который также называется Я(().
Таким образом, можно согласиться, что каждая строка представляет собой некоторый кортеж в смысле данного выше определения. Из всего сказанного можно сделать вывод о том, что таблица Я на рис. 5.1 может рассматриваться как изображение отношения в смысле данного выше определения, если условиться, как правильно "читать" такое изображение (т.е. если будут определены правила интерпретации таких изображений). Иначе говоря, необходимо условиться, что есть некоторые типы, лежащие в основе; каждый столбец соответствует в точности одному из этих типов; каждая строка представляет кортеж; каждое значение атрибута принадлежит соответствующему типу и т.д.
Если принять все эти "правила интерпретации", тогда и только тогда можно будет говорить, что "таблица" — зто допустимое изображение отношения. Теперь можно с уверенностью сказать, что отношение и таблица — это в действительности не одно и то же (хотя в предыдуших главах мы делали вид, что не знаем этого). Отношение — это некоторый абстрактный вид объекта, соответствующий данному ранее определению, а таблица — это конкретное изображение (обычно на бумаге) данного абстрактного объекта. Повторим, что это не одно и то же.
Конечно, они очень близки... и обычно, по крайней мере в неформальном контексте, их отождествляют, что вполне приемлемо. Но, если говорить более формально и более точно (а сейчас мы, конечно, хотим быть более точными), следует признать, что эти два понятия не являются идентичными. Замечание. Если у вас возникли затруднения с пониманием идеи некоторых различий между отношением и таблицей, вам поможет следующее рассуждение.
Прежде всего, одним из неоспоримых преимуществ реляционной модели является то, что ее основной абстрактный объект (т.е, отношение) имеет такое простое представление на бумаге (представление в виде таблицы). Именно оно делает реляционные системы простыми в использовании и простыми для понимания, а также упрощает понимание поведения реляционных систем. Однако, к сожалению, табличное представление предполагаегл некоторые неверные факты. К примеру, оно явно предполагает, что строки таблицы гт.е, кортежи отношения) расположены в определенном порядке сверху вниз, хотя это неверно.
Дальнейшее обсуждение этого вопроса приводится в следующем разделе. Глава 5. Домены, отношения и базовые переменные-отношения 165 Свойства отношений Отношения обладают определенными свойствами, причем все они очень важны и вытекают непосредственно из приведенного выше определения овношения. Сначала вкратце перечислим эти свойства, а затем рассмотрим каждое из них более подробно.
Итак, отношения обладают следующими свойствами: ° в них нет одинаковых кортежей; ° кортежи отношения не имеют упорядоченности в направлении сверху вниз; ° атрибуты в кортежах не упорядочены слева направо; ° каждый кортеж содержит ровно одно значение для каждого атрибута.
Свойство 1. Отсутствие одинаковых кортежей Данное свойство следует из того факта, что тело отношения — это математическое множество (кортежей), а в математике множества по определению не содержат одинаковых элементов. Замечание. На самом деле совершенно очевидно, что понятие "одинаковые кортежи" просто бессмысленно. Рассмотрим, например, отношение с атрибутами Б() и С1ТТ (имеется в виду, что поставщик с номером ЯЗ находится в городе С1ТУ).
Допустим, что в этом отношении есть кортеж, отображающий тот "истинный факт'*, что поставщик с номером '51' находится в городе 'Ьопбоп'. Далее, если в отношении есть второй такой же кортеж (допустим, что это возможно), то он также отображает данный "истинный факт". Однако, если истинное утверждение повторить два раза, более истинным оно не станет. Между прочим, первое свойство служит хорошей иллюстрацией того факта, что отношение и таблица — это не одно и то же, поскольку таблица (в общем случае) может содержать одинаковые строки (при отсутствии правил, запрещающих это), в то время как отношение не моэсегп содержать одинаковых кортежей в принципе.
(Суть в том, что "отношение", содержащее одинаковые кортежи, по определению не будет овношением!) К большому сожалению, стандарт языка Я()Е допускает присутствие в таблицах одинаковых строк. Здесь было бы неуместным обсуждать все причины того, почему наличие одинаковых строк является ошибкой (см. развернутое обсуждение этого вопроса в (5.3], (5.6]). Для достижения наших целей достаточно остановиться на том, что реляционная модель просто не допускает наличия одинаковых строк. Здесь и далее в этой книге будет предполагаться, что одинаковые строки отсутствуют.
(Это замечание касается, в основном, языка ЗО~.. При рассмотрении самой реляционной модели, конечно, никаких предположений делать не нужно.) Свойство 2. Отсутствие упорядочении кортежей (сверху вниз) Данное свойство также следует из того, что тело отношения — это математическое множество, а простые множества в математике не упорядочены. К примеру, на рис. 5.! кортежи отношения Я могли бы располагаться в противоположном порядке, но оно при этом оставалось бы тем же самым отношением. Поэтому в отношении нет 5-, 97- или 1- го кортежа, т.е. нет понятий позиционной адресации и следования.
В статье Г5.6], которая уже упоминалась в связи со свойством отсутствия одинаковых кортежей, показано, почему свойство неупорядоченности кортежей также имеет важное значение (на самом деле зти свойства взаимосвязаны). 166 Часть 11. Реляционная модель Замечание. Действительно, понятие "следование" иногда необходимо для стыковки базы данных с базовым языком программирования, например с языком С или СОВО(, (см.
обсуждение курсоров Я()1- и предложения 080ЕЕ ЯТ в главе 4). Однако эта необходимость привносится не реляционной моделью, а базовым языком. В сущности, базовый язык требует, чтобы неупорядоченные наборы были преобразованы в упорядоченные списки нли массивы (кортежей), и тогда такая операция, как выбор следующего кортежа, будет иметь смысл. Обратите также внимание на то, что эти средства составляют часть исключительно программного интерфейса приложений и конечному пользователю не предъявляются. Как уже говорилось в настоящем разделе, второе свойство отношений служит также иллюстрацией того факта, что отношение и таблица — это не одно и то же, поскольку строки таблицы упорядочены сверху вниз, а кортежи отношения не упорядочены таким образом. Свойство 3.
Отсутствие упорядочения атрибутов (слева направо) Данное свойство следует нз того факта, что заголовок отношения также определен как множество (атрибутов). Например, на рис. 5.1 атрибуты отношения Я могли быть представлены, скажем, в таком порядке: ЯЯАМЕ, С1ТТ, ЯТАТЯЯ, Я1. Это было бы то же самое отношение, по крайней мере с точки зрения реляционной модели'о. Поэтому не существует первого атрибута или последнего атрибута (и т.п.), не существует следующего атрибута (т.е. нет понятия "следование").
Иначе говоря, атрибут всегда определяется по имени, а не по расположению. Это позволяет избежать некоторых ошибок и неясностей при написании программ. Например, не существует (или не должно существовать) возможности возникновения сбоя системы из-за "наложения" одного атрибута на другой, Эта ситуация отличается от ситуации во многих системах программирования, где часто можно использовать физическую смежность логически дискретных элементов, как умышленно, так и случайно, причем многими, но одинаково губительными способами.
Заметим, что вопрос, связанный с порядком атрибутов, — это еше одна область, в которой конкретное представление отношения в виде таблицы предполагает наличие неверных фактов: столбцы таблицы упорядочены слева направо, а атрибуты отношения — нет. Свойство 4. Каждый кортеж содержит ровно одно зиачение для каждого атрибута Последнее свойство непосредственно следует из определения кортежа: кортеж является множеством из и компонентов или упорядоченных пар вида А;:и, (1 1, 2, ..., и).
Отношение, удовлетворяющее этому свойству, называется нормализованным или представленным в первой нормальной форме (1НФ). Замечание. Данное свойство может показаться совершенно очевидным, каковым оно на самом деле и является, особенно если учесть (как вы, возможно, уже догадались), что все отношения нормализованы по определению. Тем не менее у этого свойства есть несколько важных следствий, о которых можно узнать из аннотации к статье [5.10], из главы 18 (обсуждение вопроса об отсутствующих данных), а также из следующего раздела, !в Атрибуты математическая отношений в атличие ат рвляцианньа, действительно уяарядачены слева направо. Глава 5. Домены, отношения и базовые переменные-отношения 167 Атрибуты, значениями которых являются отношения В разделе 5.2 говорилось, что характер значений, составляющих тип данных, может быть произвольным.