
- •Часть 2. Реляционная модель.
- •Глава 4. Реляционные объекты данных: домены и отношения.
- •4.1. Вводный пример
- •4.2. Домены
- •4.3. Отношения
- •4.4. Виды отношений
- •4.5. Отношения и предикаты
- •4.6. Реляционные базы данных
- •4.7. Резюме
- •Глава 8.
- •8.1. Введение
- •8.2. Определение данных
- •8.3. Обработка данных: операции выборки
- •8.3.1. Получить цвета и города для деталей "не из Парижа" с весом, большим десяти
- •8.3.2. Для всех деталей получить номер детали и ее вес в граммах
- •8.3.3. Получить полную информацию обо всех поставщиках
- •8.3.4. Получить информацию обо всех парах поставщиков и деталей, совмещенных в одном городе
- •8.3.5. Получить все пары имен городов, таких что поставщик, находящийся в первом городе, поставляет деталь, хранящуюся во втором городе
- •8.3.6. Получить все пары номеров поставщиков, таких что оба поставщика в каждой паре размещаются в одном и том же городе
- •8.3.7. Получить общее число поставщиков
- •8.3.8. Получить максимальное и минимальное количество для детали р
- •8.3.9. Для каждой поставляемой детали получить номер детали и общее количество поставки
- •8.3.10. Получить номера для всех деталей, поставляемых более чем одним поставщиком
- •8.3.11. Получить имена поставщиков, поставляющих деталь р2
- •8.3.12. Получить имена поставщиков, поставляющих по крайней мере одну красную деталь
- •8.3.13. Получить номера поставщиков, статус которых меньше текущего максимального статуса в таблице s
- •8.3.14. Получить имена поставщиков, поставляющих деталь р2
- •8.3.15. Получить имена поставщиков, которые не поставляют деталь р2
- •8.3.16. Получить имена поставщиков, поставляющих все детали
- •8.3.17. Получить номера деталей, которые или весят более 16 фунтов, или поставляются поставщиком s2, или и то и другое
- •8.4. Обработка данных: операции обновления
- •Table-term
- •I join-table-expression
- •8.6. Условные выражения
- •8.7. Скалярные выражения
- •8.8. Встроенный sql
- •8.8.1. Единичный select. Получить статус и город для поставщика, чей номер поставки задан базовой переменной givens#
- •8.8.2. Insert. Вставить новую деталь в таблицу р (номер детали, ее назв. И вес определены базовыми переменными р#, pname, pwt соответственно, цвет и город неизвестны)
- •8.8.3, Update. Увеличить статус всех поставщиков из Лондона на значение, определенное базовой переменной raise
- •8.8.4. Delete. Удалить все поставки для поставщиков из города,
- •8.9. Резюме
4.6. Реляционные базы данных
Исходя из обсуждений и объяснений этой главы, можно дать более формальное определение (более формальное, чем данное выше в этой главе) термина "реляционная база данных". Перефразировав определение, данное Коддом в [4.1], получим следующее:
• Реляционная база данных — это база данных, воспринимаемая пользователем как набор нормализованных отношений (т.е. переменных отношений) разной степени.
Как отмечалось ранее, выражение "воспринимаемая пользователем" является решающим: идея реляционной модели применяется к внешнему и концептуальному уровням системы, а не к внутреннему уровню. Можно сказать и иначе — реляционная модель представляет систему баз данных на уровне абстракции, несколько удаленном от подробностей лежащей в основе этой системы машины; так же как, например, язык Pascal представляет систему программирования на уровне абстракции, несколько удаленном от подробностей лежащей в основе этой системы машины. В действительности реляционную модель можно рассматривать как язык программирования, специально ориентированный на приложения баз данных.
Различие между доменами и (именованными) отношениями также можно несколько уточнить. Мы называем именованные отношения переменными, так как их значения изменяются со временем. Как указывалось выше в этой главе, домены не являются переменными в этом смысле. Например, множество всех возможных номеров поставщиков, конечно, не изменяется со временем, или если изменяется, то изменение носит описательный характер, т.е. происходит на уровне типа, а не экземпляра. Это немного похоже на изменение основного типа данных для номера поставщиков с CHAR(5) на CHAR(7). Обратите внимание, что такое изменение, возможно, повлечет за собой реорганизацию базы данных.
Итак, можно сказать, что в традиционных терминах отношение соответствует файлу (логическому, а не физическому), кортеж — записи (экземпляру, а не типу), атрибут полю (типу, а не экземпляру). Однако это соответствие в лучшем случае приблизительное. Отношение следует рассматривать не как "просто файл", а как файл, подчиняющийся определенным правилам, это отражается в значительном упрощении структуры объектов данных, с которой сталкивается пользователь, и, как следствие, в упрощении операторов, необходимых для работы с этими объектами. Если говорить точнее, все данные в реляционной системе представляются одним и только одним способом, а именно явными значениями (это свойство иногда называют "основным принципом реляционной модели", а также "информационным принципом"). В частности, этими явными значениями представляются логические связи в отношении и между отношениями; не существует видимых для пользователя указателей на файлы или записи, не существует видимого для пользователя порядка записей, не существует видимых для пользователя групп повторения и т.д.
4.7. Резюме
В этой главе мы подробно рассмотрели основные объекты данных реляционной модели, а именно домены и отношения. Домен — это, в сущности, тип данных (возможно, определенный в системе, но в общем случае определенный пользователем); он представляет набор скалярных значений, из которых разные атрибуты различных отношений берут свои реальные значения. Домены ограничивают сравнения, т.е. в общем случае требуется, чтобы сравниваемые значения принадлежали одному домену. Как следствие, домены ограничивают различные реляционные операции.
Отношение делится на две части: заголовок и тело. Заголовок — это набор атрибутов (точнее, пар имя-атрибута: имя-домена), а тело — это набор кортежей. Количество атрибутов называется степенью, а количество кортежей — кардинальным числом. Отношение можно представить себе как таблицу, столбцы которой — атрибуты, а строки — кортежи, но это только приблизительное представление. Отношения обладают четырьмя очень важными свойствами.
• В них нет одинаковых кортежей.
• Кортежи не упорядочены сверху вниз.
• Атрибуты не упорядочены слева направо,
• Все значения атрибутов атомарные (отношения нормализованы).
Для каждого отношения есть связанная с ним интерпретация, или предикат, составляющий критерий возможности обновления для этого отношения. И в любой момент времени отношение содержит в точности те кортежи, при которых предикат является истиной.
Именованное отношение является в действительности переменной (его заголовок фиксирован, но значение тела изменяется со временем). Примеры именованных отношений — это базовые отношения, представления и снимки. Неименованное отношение — это результат вычисления некоторого реляционного отношения; оно обычно существует недолго в отличие от именованного отношения, и его тело не изменяется в процессе существования. Примеры неименованных отношений— это промежуточные и окончательные результаты запросов.
В этой главе также были представлены операторы определения данных гипотетического реляционного языка, который мы будем использовать далее в этой части книги —— CREATE DOMAIN И DESTROY DOMAIN, CREATE BASE RELATICN И DESTROY BASE RELATION. Также были упомянуты операторы create и destroy для представлений и снимков; к ним мы вернемся позже, в следующих частях книги.)
Упражнения
4.1. Обратитесь к рис. 3.4 главы 3 (схематически изображенная структура каталога для базы данных отделов и служащих): а) назовите отдельные части этого каталога, используя формальную реляционную терминологию, представленную в этой главе; б) укажите, как должна быть расширена структура каталога с учетом доменов; в) запишете запрос к этому расширенному каталогу для нахождения всех именованных отношений, в которых используется домен ЕМР#.
4.2. а) Запишите оператор create base relation и соответствующий набор операторов create domain для отношения PART_STRUCTURE, изображенного на рис. 4.4; б) предполагая, что это отношение включается в базу данных отделов и служащих из упр. 4.1, укажите, какие обновления система должна ввести в каталог с учетом вашего ответа на пункт (а); в) запишите набор операторов destroy, необходимых для отмены изменений, внесенных в каталог в пункте (б).
4.3. Как мы убедились, операторы определения данных, такие как CREATE DOMAIN и DESTROY DOMAIN, CREATE BASE RELATION И DESTROY BASE RELATION, приводят к изменению каталога. Но каталог — это всего лишь набор отношений, как и обычные пользовательские данные; так можно ли применять обычные реляционные операторы (такие как insert, update, delete языка SQL) для соответствующего изменения каталога? Обсудите это.
4.4. На каких доменах основаны отношения каталога?
4.5. Отношение имеет по определению множество атрибутов и множество кортежей. Пустое множество в математике рассматривается как вполне приемлемое; обычно желательно, чтобы теоремы, результаты и т.п., которые выполняются для множества из п элементов, выполнялись и для множества из п=0 элементов. Может ли отношение иметь нуль кортежей? А нуль атрибутов?
4.6. На рис. 4.6 показаны примеры значений данных для расширенной формы базы данных поставщиков и деталей, которая называется базой данных поставщиков, деталей и проектов. Поставщики (S), детали (Р) и проекты (J) однозначно определяются номером поставщика (S#), номером детали (Р#) и номером проекта (J#) соответственно. Значение кортежа отношения SPJ (отношение поставок) следующее: определенный поставщик поставляет определенную деталь для определенного проекта в определенном количестве (и комбинация S#-P#-S# уникальна для кортежей отношения). Запишите необходимое определение данных для этой базы данных.
Замечание. Эта база данных будет использоваться в многочисленных упражнениях в последующих главах.
Как отмечалось в главе 3, каждая деталь, в принципе, является товаром, который поставляет определенный поставщик. Поэтому в последующих главах книги о поставке деталей мы также часто будем говорить как о поставке определенных товаров, т.е. база данных поставщиков, деталей и проектов может служить базой данных поставщиков, товаров и проектов.
|
S
|
|
SPJ
|
| |||||||||||||
S#
|
SNAME
|
STATUS
|
CITY
|
S#
|
P#
|
J#
|
QTY
| ||||||||||
|
S1
|
Smith
|
20
|
London
|
|
S1
|
PI
|
J1
|
200
|
| |||||||
|
S2
|
Jones
|
10
|
Paris
|
|
S1
|
PI
|
J4
|
700
|
| |||||||
|
S3
|
Black
|
30
|
Paris
|
|
S2
|
РЗ
|
J1
|
400
|
| |||||||
|
S4
|
Dark
|
20
|
London
|
|
S2
|
РЗ
|
J2
|
200
|
| |||||||
|
S5
|
Adams
|
30
|
Athens
|
|
S2
|
РЗ
|
J3
|
200
|
| |||||||
|
S2
|
РЗ
|
J4
|
500
|
| ||||||||||||
P
|
S2
|
РЗ
|
J5
|
600
|
| ||||||||||||
|
Р#
|
PNAME
|
COLOR
|
WEIGHT
|
CITY
|
|
S2
|
РЗ
|
J6
|
400
|
| ||||||
|
Р1
|
Nut
|
Red
|
12
|
London
|
|
S2
|
РЗ
|
J7
|
800
|
| ||||||
|
Р2
|
Bolt
|
Green
|
17
|
Paris
|
|
S2
|
Р5
|
J2
|
100
|
| ||||||
|
РЗ
|
Screw
|
Blue
|
17
|
Rome
|
|
S3
|
РЗ
|
J1
|
200
|
| ||||||
|
Р4
|
Screw
|
Red
|
14
|
London
|
|
S3
|
Р4
|
J2
|
500
|
| ||||||
|
Р5
|
Cam
|
Blue
|
12
|
Paris
|
|
S4
|
Р6
|
J3
|
300
|
| ||||||
|
Р6
|
Cog
|
Red
|
19
|
London
|
|
S4
|
Р6
|
J7
|
300
|
| ||||||
|
S5
|
Р2
|
J2
|
200
|
| ||||||||||||
J
|
S5
|
Р2
|
J4
|
100
|
| ||||||||||||
|
J#
|
JNAME
|
CITY
|
|
S5
|
Р5
|
J5
|
500
|
| ||||||||
|
J1
|
Sorter
|
Paris
|
|
S5
|
Р5
|
J7
|
100
|
| ||||||||
|
J2
|
Display
|
Rome
|
|
S5
|
Р6
|
J2
|
200
|
| ||||||||
|
J3
|
OCR
|
Athens
|
|
S5
|
PI
|
J4
|
100
|
| ||||||||
|
J4
|
Console
|
Athens
|
|
S5
|
РЗ
|
J4
|
200
|
| ||||||||
|
J5
|
RAID
|
London
|
|
S5
|
Р4
|
J4
|
800
|
| ||||||||
|
J6
|
EDS
|
Oslo
|
|
S5
|
Р5
|
J4
|
400
|
| ||||||||
|
J7
|
Tape
|
London
|
|
S5
|
Р6
|
J4
|
500
|
| ||||||||
|
|
Рис. 4.6. База данных поставщиков, деталей и проектов (значения для примера)
4.7. Укажите предикат для отношения SPJ из предыдущего упражнения.
Список литературы
Большинство перечисленных ниже ссылок касается не только аспекта "объектов данных", а всех трех аспектов реляционной модели.
4.1. Codd E.F. A Relational Model of Data for Large Shared Data Banks // CACM. — 1970. — 13, № 6. (Переиздано: Milestones of Research — Selected Papers 1958-1982 // CACM. — 1983. — 26, № 1.)
С этой статьи все и началось. И хотя прошло более четверти века, она остается актуальной и стоит того, чтобы ее перечитывали. Конечно, некоторые идеи были несколько улучшены со времени публикации этой статьи, но по своей природе это были эволюционные, а не революционные изменения. Кроме того, в статье есть некоторые идеи, следствия которых до сих пор полностью не исследованы .
Статья разделена на две части: "Реляционная модель и нормальная форма" и "Избыточность и непротиворечивость".
1. В первую часть включено обсуждение независимости данных (в особенности недостатка независимости в системах того времени), реляционных объектов данных (отношений и доменов), нормализации (первой нормальной формы), лингвистических аспектов, а также базовых отношений, представлений и других видов отношений.
2. Во второй части представлено вводное описание нескольких реляционных операций — проекции, соединения и т.д. Эти операции используются в качестве базиса для обсуждения различных видов избыточности и непротиворечивости в реляционной базе данных. Множество отношений называется сильно избыточным, если оно включает по крайней мере одно отношение, имеющее проекцию, полученную из другого отношения этого множества. Между прочим, обратите внимание на то, что множество именованных отношений, доступное пользователю определенной базы данных, может быть сильно избыточным в этом смысле, так как оно может включать как базовые отношения, так и представления, производные от этих базовых отношений.
Здесь стоит вкратце обсудить определение отношения, данное в этой статье. В несколько измененном виде это определение гласит следующее: пусть даны множества D1, D2, ..., Dn (не обязательно различные), тогда отношением R на этих п множествах будет множество из n-oк (п кортежей), в каждой из которых первый элемент принадлежит множеству D1, второй— множеству D2, и т.д. (Множество Dj называют j-м доменом отношения R.) Или более кратко: отношение R — это подмножество декартова произведения своих доменов.
Это безупречное с математической точки зрения определение можно подвергнуть критике с точки зрения баз данных по нескольким пунктам.
1. Во-первых, в определении не проведено четкого различия между доменами и атрибутами. (Далее в своей статье Кодд использует термин "активный домен", называя им множество значений некоторого домена, присутствующих в базе данных в определенный момент времени, но понятие активного домена не эквивалентно атрибуту в том смысле, в котором этот термин сейчас используется.) В результате получилась неразбериха в доменах и атрибутах, которая существует и по сей день.
2. Затем в соответствии с этим определением отношение упорядочено по доменам слева направо. И снова далее в своей статье Кодд утверждает, что пользователи не должны иметь дело с отношениями как таковыми, вернее, с "их неупорядоченными копиями доменов" (которые он относит к "отношениям"), но эта тонкость, кажется, ускользнула от внимания некоторых разработчиков систем баз данных. (В SQL, в частности, весьма неудачно введено понятие упорядочения столбцов слева направо в таблице.)
3. И, наконец, в определении не учитывается в достаточной мере различия между статическими и динамическими (или зависимыми и независимыми от времени) аспектами переменных отношений (то, что мы называем "телом" и "заголовком"), хотя это различие очевидно следует из дальнейших разделов статьи. Это упущение стало причиной многих последующих недоразумений.
Возможно, стоит упомянуть еще несколько вопросов, которые могут озадачить читателя, впервые знакомящегося с этой статьей.
1. Несмотря на название, в статье нигде не приводится сжатого определения термина "реляционная модель" (нет определения также и для термина "модель данных", хотя эта статья была, несомненно, одной из тех, которые вводят это понятие). Наоборот, она, по крайней мере, предполагает, что термин включает лишь аспект "объектов" (т.е. операторы и возможности поддержки целостности исключаются). Также в ней говорится о "некоторой реляционной модели ... для [некоторой базы данных]", а это означает, что термин "реляционная модель" подразумевает абстрактное представление данных в некоторой конкретной базе данных вместо абстрактного представления данных вообще. Оба этих неверных толкования, как это ни прискорбно, очень распространены в литературе по базам данных; первое, в частности (т.е. то, что "реляционная модель является просто структурой", иногда излагается в форме "реляционная модель — это просто плоские файлы"), является основным неверным представлением. В [4.12] предпринимается попытка охарактеризовать эту конкретную ошибку при обсуждении "мифа № З".
2. В соответствии со статьей в отношении может быть любое количество первичных ключей; т.е. в статье термин "первичный ключ" используется для обозначения того, что мы бы сейчас назвали потенциальным ключом. Также к такому первичному (т.е. потенциальному) ключу не предъявляется требования неизбыточности. Однако далее в статье говорится, что "если в отношении есть два или более [неизбыточных] первичных ключа, произвольно выбирается один из них и называется основным первичным ключом данного отношения".
3. Определение, данное для внешнего ключа, неоправданно ограничивает рамки понятия, в нем не допускается, чтобы первичный ключ (или потенциальный ключ? — смотрите предыдущий пункт) отношения был внешним ключом, и в нем не рассматривается случай null-значения внешнего ключа. В главе 5 приводится подробное обсуждение внешних ключей вообще и null-значений внешних ключей в частности.
4.2. Codd E.F. Derivability, Redundancy, and Consistency of Relations Stored in Large Data Banks // IBM Research Report RJ599 — 1969.
Предварительная версия статьи [4.1]. Эти две статьи несколько отличаются в деталях (в частности, в терминологии), и наиболее существенное отличие заключается в том, что в [4.1] выдвигается и обосновывается идея, что все отношения должны быть нормализованы. Эти вопросы еще будут осуждаться далее в данной книге.
4.3. Codd E.F. Data Models in Databases Management // Proc. Workshop on Data Abstraction, Database and Conceptual Modelling (Michael L. Brodie and Stephen N. Zilles, eds.). — Pingree Park, Cob., 1980. (ACM SIGART Newsletter. — 1981 № 74; ACM SIGMOD Record 11. — 1981 № 2; ACM SIGPLAN Notices. —1981 —16, № 1).
В статье впервые было дано полное определение модели данных. Несколько перефразировав его, можно сказать, что модель данных — это совокупность, состоящая из трех компонентов:
1. Набора типов объектов данных, формирующего основные блоки, на которых строится любая база данных, отвечающая модели.
2. Набора общих правил целостности, которые ограничивают множество экземпляров этих типов объектов, допустимых в такой базе данных.
3. Набора операторов, которые применяются для обработки (выборки и др.) этих экземпляров объектов.
Далее в статье обсуждается назначение модели данных в общем (и в реляционной модели в частности), также представлены доводы в пользу того, что реляционная модель в действительности (вопреки распространенному мнению) должна быть определена сначала на абстрактном уровне; так называемые иерархическая и сетевая (дореляционные) модели были определены на абстрактном уровне на базе уже существующих реальных реализации.
4.4. Codd E.F. The Relational Model for Database Management Version 2. — Reading, Mass.: Addison-Wesley, 1989.
Длительное время в конце 1980-х Кодд пересматривал и расширял свою изначальную модель (которую теперь называют реляционной моделью первой версии— "the Relational Model Version l", или RM/V1), в результате чего появилась эта книга. В ней описывается так называемая реляционная модель второй версии — "the Relational Model Version 2", или RM/V2. Основное различие между этими двумя версиями состоит в следующем: первая создавалась как абстрактный план для определенного аспекта общей проблемы баз данных (по большей части аспекта основ), а вторая — как абстрактный план для всей системы. Поэтому, в то время как первая версия разделена только на три части — объекты или структуры, операторы или обработка и поддержка целостности данных, модель RM/V2 содержит 18 частей, которые включают не только три оригинальных части, что само собой разумеется, но и части, касающиеся представлений, каталогов, прав доступа, наименований, распределенной базы данных и различных других аспектов управления базой данных. Однако идеи, опубликованные в этой книге, отнюдь не имели широкого распространения.
4.5. Darwen H. The Duplisity of Duplicate Rows // C.J. Date and Hugh Darwen. Relational Database Writings 1989-1991. —Reading, Mass.: Addison-Wesley, 1992.
Эта статья была написана для подкрепления аргументов, уже представленных в статье [4.11], в пользу известного требования реляционной модели— таблицы не должны содержать одинаковых строк. В статье не только предоставлены новые версии этих аргументов, но и выдвинуты дополнительные аргументы. Основной вопрос состоит в следующем: для того чтобы конструктивно обсуждать совпадение двух объектов, необходим критерий идентичности для рассматриваемого класса объектов. Иначе говоря, что значит для двух объектов быть "одним и тем же".
4.6. Darwen H. The Nullologist in Relationland // Ibid.
Нулология — это (согласно Дарвину) "учение об абсолютном ничто" — или, иначе говоря, учение о пустых множествах. Множества в реляционной теории вездесущи, поэтому вопрос о том, что будет, если одно или несколько из этих множеств окажутся пустыми, возник не случайно. На самом деле в нескольких случаях пустые множества играют фундаментальную роль. С темой настоящей главы (реляционными объектами данных) связан раздел 2 этой статьи ("Таблицы без строк") и раздел 3 ("Таблицы без столбцов").
4.7. Darwen H. (writing as Andrew Warden). Adventures in Relationland // C.J. Date. Relational Database Writings 1985-1989. — Reading, Mass.: Addison-Wesley, 1992.
Подборка небольших статей о различных аспектах реляционной модели в оригинальном, развлекательном и информативном стиле.
4.8. Date C.J. What Is a Domain? // Ibid, 1990.
Систематическое и обстоятельное пособие по концепции реляционного домена. В статье доказывается, что домен является не чем иным, как типом данных, который либо встроен, либо определен пользователем. Дальнейшее обсуждение этого вопроса будет продолжено в следующих частях настоящей книги.
4.9. Date C.J. Defining Data Types in Database Language // Ibid.
Статья, дополняющая предыдущую и описывающая, что используется при добавлении новых типов данных в язык базы данных. В качестве примера детально рассматривается специфический случай поддержки дат и времени в SQL (на момент написания этой статьи SQL не включал поддержки дат и времени).
4.10. Date C.J. What Is a Relation? // C.J. Date and Hugh Darwen. Relational Database Writings 1989-1991. —Reading, Mass.: Addison-Wesley, 1992.
Эта статья так же описывает отношения, как статья [4.8] домены. Приводим выдержку из статьи: "Несмотря на то, что реляционная модель имеет математическую основу, отношения в реляционной модели и отношения в математике — это не одно и то же. В этой статье обсуждаются различия между двумя этими понятиями".
В частности, в статье подчеркивается, что хранимые и базовые отношения не обязательно должны быть абсолютно идентичны, хотя в большинстве случаев, конечно, хранимые и базовые отношения чаще соотносятся между собой как один к одному.
4.11. Date C.J. Why Duplicate Rows Are Prohibited // C.J. Date. Relational Database Writings 1985-1989. —Reading, Mass.: Addison-Wesley, 1990.
Представлены многочисленные аргументы с примерами в пользу требования, чтобы таблицы в реляционной модели не содержали никаких дублируемых строк. В частности, в статье показано, что дублируемые строки являются главным препятствием для оптимизации.
4.12. Date C.J. Some Relational Myths Exploded // C.J. Date. Relational Database:
Selected Writings. — Reading, Mass.: Addison-Wesley, 1986.
Рассматриваются 26 неверных представлений, касающихся реляционных систем управления базами данных.
4.13. Date C.J. Further Relational Myths // C.J. Date. Relational Database Writings 1985-1989. —Reading, Mass.: Addison-Wesley, 1990.
Продолжение [4.12], рассматриваются восемь дополнительных "реляционных мифов".
4.14. Date C.J. Relational Database: Further Misconceptions Number Three // C.J. Date and Hugh Darwen. Relational Database Writings 1989-1991.— Reading, Mass.:
Addison-Wesley, 1992.
Продолжается обсуждение "реляционных мифов".
4.15. Date C.J. Notes Toward a Reconstituted Definition of the Relational Model Version 1 (RM/V1) // Ibid.
Приводится критика и резюме к реляционной модели Кодда "RM/V1" и дается альтернативное определение. Подразумевается, что крайне важно получить правильную версию 1, прежде чем обсуждать переход к какой-то версии 2.
4.16. Date C.J. A Critical Review of Relational Model Version 2 (RM/V2) // Ibid. Приводится критика и резюме к реляционной модели Кодда "RM/V2".
4.17. Date C.J. Series of articles in Database Programming & Design (under the generic title According to Date). Beginning with 5. — 1992. — № 9.
Неформальная серия статей по различным проблемам, связанным с базами данных. Фактически охвачены многие темы, рассматриваемые в настоящей книге, но изложены в менее строгой форме. Основная тема— "теория и практика!", т.е. о том, что профессионалы информационных технологий на свой собственный риск игнорируют теоретические аспекты в своей области.
4.18. McLeod D.J. High Level Definition of Abstract Domains in a Relational Database System // Computer Languages 2. — Pergamon Press, 1977.
Одна из первых статей, в которой подробно исследуется понятие домена.
Ответы к некоторым упражнениям
4.1. а) Очевидные изменения даны ниже:
TABLES Заменяется на RELATIONS
COLUMNS ATTRIBUTES
TABNAME RELNAME
COLCOUNT DEGREE
ROWCOUNT CARDINALITY(CARD)
COLNAME ATTRNAME
Обратите внимание, что RELATIONS здесь действительно означает именованное отношение. На самом деле отношение RELATIONS должно иметь еще один атрибут (RELTYPE), значения которого указывают тип (базовое отношение, представление или снимок) соответствующего именованного отношения. Поэтому структура каталога будет выглядеть таким образом:
RELATIONS
-
RELNAME
DEGREE
CARDINALITY
RELTYPE
ATTRIBUTES
-
RELNAME
ATTRNAME
……………
б) Необходимо новое отношение типа каталога (DOMAINS), содержащее элемент для каждого домена, а также новый атрибут (DOMNAME) в каталоге ATTRIBUTES, предоставляющем лежащий в основе домен для каждого атрибута каждого именованного отношения. Структура каталога будет подобна следующей:
DOMAINS
-
DOMNAME
DATATYPE
…………………….
RELATIONS
-
RELNAME
DEGREE
CARDINALITY
RELTYPE
ATTRIBUTES
-
RELNAME
ATTRNAME
DOMNAME
…………………
В качестве вспомогательного упражнения читатель мог бы, вероятно, учесть, что для дальнейшего расширения каталога может потребоваться представить информацию относительно первичных и внешних ключей.
в) ( ATTRIBUTES WHERE DOMNAME = 'ЕМР#' ) [ RELNAME ]
4.2. а) Определение данных:
CREATE DOMAIN Р# CHAR(6) ;
CREATE DOMAIN QTY NUMERIC (9) ;
CREATE BASE RELATION PART_STRUCTURE
( MAJOR_P# DOMAIN ( P# ),
MINOR_P# DOMAIN ( P# ),
QTY DOMAIN ( QTY ) )
PRIMARY KEY ( MAJOR_P#, MINOR_P# ) ;
Замечание. Если бы отношение PART_STRUCTURE было частью базы данных поставщиков и деталей, нам были бы нужны дополнительные спецификации
FOREIGN KEY ( RENAME MAJOR_P# AS P# ) REFERENCES P
FOREIGN KEY ( RENAME MINOR_P# AS P# ) REFERENCES P
в определении отношения (эти спецификации еще будут поясняться в главе 5).
б) Мы показали лишь новые элементы каталога (рис. 4.7); обратите внимание, что элемент CARDINALITY в отношении RELATIONS для самого отношения RELATIONS должен быть увеличен на единицу. Мы показали кардинальное число отношения PART_STRUCTURE равным 0, а не 7 (несмотря на то что на рис. 4.4 оно показано, как содержащее семь кортежей), поскольку, конечно, отношение будет пустым, если оно вновь создано.
в) DESTROY BASE RELATION PART_STRUCTURE ;
DESTROY DOMAIN QTY ;
DESTROY DOMAIN P# ;
DOMAINS
-
DOMNAME
DATATYPE
……
P#
QTY
CHAR(6)
NUMERIC(9)
……
……
RELATIONS
-
RELNAME
DEGREE
CARDINALITY
RELTYPE
……
PART_STRUCTURE
3
0
BASE
……
ATTRIBUTES
-
RELNAME
ATTRNAME
DOMNAME
……
PART_STRUCTURE
PART_STRUCTURE
PART_STRUCTURE
MAJOR_P#
MINOR_P#
QTY
P#
P#
QTY
……
……
……
Рис. 4.7. Элементы каталога для отношения PART_STRUCTURE
4.3. Изменение каталога можно выполнять с помощью обычных средств, т.е. операций insert, update и delete. Однако возможность использования таких операций могла бы быть потенциально очень опасной, поскольку это могло бы легко разрушить всю информацию в каталоге (по небрежности или по иным причинам), а поэтому система не смогла бы далее корректно функционировать. Предположим, например, что операция языка SQL DELETE
DELETE
FROM RELATIONS
WHERE RELNAME = 'EMP' ;
допустима для каталога отделов и служащих. В результате ее выполнения мог бы быть удален кортеж, описывающий отношение EMP из отношения RELATIONS. С точки зрения системы отношение EMP больше бы не существовало, т.е. система не имела бы никаких сведений об этом отношении. Поэтому все последующие попытки обращения к этому отношению были бы безуспешными.
Следовательно, в большинстве реальных продуктов операции update, delete и insert для каталога или не разрешены вовсе (это обычная практика), или разрешены лишь для пользователей, наделенных очень высокими правами (возможно, лишь для администратора базы данных). Вместо этого изменение каталога выполняется с помощью операторов определения данных (CREATE DOMAIN, CREATE BASE RELATION, И Т.П.). Например, В результате выполнения оператора create base relation для отношения EMP, во-первых, для него формируется элемент в отношении RELATIONS и, во-вторых, набор из четырех элементов, один для каждого из четырех атрибутов отношения EMP, в отношении ATTRIBUTES. (Выполнение этого оператора вызывает и массу других последствий, которых, однако, мы здесь не будем касаться.) Таким образом, операция создания create в некотором смысле является аналогом операции вставки insert для каталога. Также операция удаления объектов destroy является аналогом операции удаления строк delete; а в SQL, который предоставляет различные операторы изменения alter для изменения элементов каталога различными способами, операция alter является аналогом операции обновления update.
Замечание. Как мы уже видели, каталог также включает элементы для самих отношений каталога. Однако эти элементы не создаются явно операцией create. Вместо этого они создаются автоматически самой системой как часть процедуры инсталляции системы. В сущности, они "зашиты" в систему.
4.4. Очевидно, что невозможно дать однозначный ответ на этот вопрос. Вот некоторые приемлемые предложения:
Домен DOMNAME определен на NAME
RELNAME NAME
ATTRNAME NAME
DATDTYPE DATATYPE
DEGREE CARDINALS
CARDINALITY CARDINALS
RELTYPE RELTYPE
Эти домены, в свою очередь, подразумеваются определенными как указано ниже:
• NAME — это множество всех допустимых имен.
• DATATYPE — это множество всех встроенных скалярных типов данных (CHAR(n), NUMERIC(n), и т.д.). Для работы с параметром п требуется некоторая дополнительная работа по проектированию.
• CARDINALS — это множество всех неотрицательных целых чисел, не превышающих некоторой определенной на этапе реализации границы.
• RELTYPE — это множество { "Base", "View", "Snapshot"}.
Обратите внимание, что здесь мы (частично) нарушили наш принцип, в соответствии с которым каждый атрибут должен иметь такое же имя, что и лежащий в основе домен. Это упражнение служит иллюстрацией тому, что такие нарушения будут случаться, если отношения проектируются до того, как они связаны с каким-то доменом (конечно, это замечание относится ко всем базам данных, а не только к каталогу).
4.5. Отношение с пустым множеством кортежей имеет вполне разумный смысл и в действительности является обычным отношением (это аналог файла, у которого нет записей). В частности, естественно, каждое базовое отношение имеет пустое множество кортежей, когда оно только создано. Такое отношение принято называть, хотя это и немного неточно, пустым отношением.
Но совсем невероятным, возможно, является то, что отношение с пустым множеством атрибутов тоже имеет вполне разумный смысл! На самом деле такие отношения исключительно важны, почти так же, как пустые множества исключительно важны в общей теории множеств. Чтобы рассмотреть это понятие несколько подробнее, вначале необходимо обсудить вопрос о том, могут ли отношения, не имеющие атрибутов, иметь какие-то кортежи. В действительности такие отношения могут иметь не больше, чем один кортеж, а именно 0-кортеж (т.е. кортеж, не имеющий совсем значений атрибутов). Таких кортежей не может быть более одного, поскольку все 0-кортежи дублируют друг друга. Поэтому имеется ровно два отношения (точнее, значений отношения) степени нуль: одно, которое содержит ровно один кортеж, и одно, которое не содержит кортежей совсем. Эти два отношения настолько важны, что, следуя Дарвену (Darwen) [4.6, 4.7], мы называем их "ласковыми" именами: первое отношение — TABLE_DEE, второе — TABLE_DUM, или для краткости DEE и DUM (DEE имеет 0-кортеж, a DUM не имеет).
Мы не имеем возможности углубиться далее в детали этого вопроса в данный момент и удовлетворимся следующим утверждением: значение этих отношений так важно еще и потому, что отношению DEE соответствует истина — true (или yes), а DUM соответствует ложь —false (или по). Упражнения и ответы в следующих двух главах помогут несколько глубже понять этот материал. Более подробную информацию можно найти в [4.6,4.7].
4.6. CREATE DOMAIN S# CHAR(5) ;
-
CREATE DOMAIN NAME
CHAR (20) ;
CREATE DOMAIN STATUS
NUMERIC(5);
CREATE DOMAIN CITY
CHAR (15) ;
CREATE DOMAIN P#
CHAR(6) ;
CREATE DOMAIN COLOR
CHAR (6) ;
CREATE DOMAIN WEIGHT
NUMERIC(5);
CREATE DOMAIN J#
CHAR(4) ;
CREATE DOMAIN QTY
NUMERIC (9);
CREATE BASE RELATION S
(S# DOMAIN ( S# ),
SNAME DOMAIN ( NAME ),
STATUS DOMAIN ( STATUS ),
CITY DOMAIN ( CITY ) )
PRIMARY KEY ( S# ) ;
CREATE BASE RELATION P
( P# DOMAIN ( P# ),
PNAME DOMAIN ( NAME ),
COLOR DOMAIN ( COLOR ),
WEIGHT DOMAIN ( WEIGHT ),
CITY DOMAIN ( CITY ) )
PRIMARY KEY ( P# );
CREATE BASE RELATION J
( J# DOMAIN ( J# ),
JNAME DOMAIN ( NAME ),
CITY DOMAIN ( CITY ) ) PRIMARY KEY ( J# ) ;
CREATE BASE RELATION SPJ
( S# DCMAIN ( S# ),
P# DOMAIN ( P# ),
J# DOMAIN ( J# ),
QTY DOMAIN ( CTY ) )
PRIMARY KEY ( S#, P#, J# )
FOREIGN KEY ( S# ) REFERENCES S FOREIGN KEY ( P# ) REFERENCES P
FOREIGN KEY ( J# ) REFERENCES J ;
4.7. Кортеж {<S#:s, P#:p, S#:j, QTY:q} появляется в отношении SPJ тогда и только тогда, когда удовлетворяются следующие условия:
• Все значения s,p,j, q являются значениями соответствующих доменов.
• Значения s состоят из значений атрибута S# в отношении S; то же самое относится и к значениям p и j.
• В отношении SPJ при q'<>q нет кортежей {<S#:s, P#:p, J#:j, QTY:q'>}.
• Данный кортеж не нарушает никаких других применяемых правил целостности.
И наконец (неформально), поставщик s поставляет деталь р для проекта j в количестве q. Это неформальное определение, конечно, не является частью понятия отношения с точки зрения СУБД.