Автор работы: Пользователь скрыл имя, 03 Сентября 2011 в 13:52, курсовая работа
Основы реляционной модели данных были впервые изложены в статье Е.Кодда в 1970 г. Эта работа послужила стимулом для большого количества статей и книг, в которых реляционная модель получила дальнейшее развитие. Наиболее распространенная трактовка реляционной модели данных принадлежит К.Дейту. Согласно Дейту, реляционная модель состоит из трех частей:
1.Структурной части.
2.Целостной части.
3.Манипуляционной части.
Структурная часть описывает, какие объекты рассматриваются реляционной моделью. Постулируется, что единственной структурой данных, используемой в реляционной модели, являются нормализованные n-арные отношения.
Целостная часть описывает ограничения специального вида, которые должны выполняться для любых отношений в любых реляционных базах данных. Это целостность сущностей и целостность внешних ключей.
Манипуляционная часть описывает два эквивалентных способа манипулирования реляционными данными - реляционную алгебру и реляционное исчисление.
В классической реляционной модели используются только простые (атомарные) типы данных. Простые типы данных не обладают внутренней стру
Введение…………………………………………………………………………………...3
1. Базовые понятия реляционной модели данных…………………………..……….….4
1.1. Типы данных…………………………………………………………………….....4
1.2.Домены……………………………………………………………………………...7
2. Отношения, атрибуты, кортежи отношения……………………………………….…9
2.1. Определения и примеры…………………………………………………………..9
2.2. Свойства отношений……………………………………………………………..11
2.3. Первая нормальная форма……………………………………………………….12
3. Целостность реляционных данных…………………………………………………..14
3.1. Null-значения………………………………………………………………….….14
3.2. Трехзначная логика (3VL)……………………………………………………….16
3.3. Потенциальные ключи…………………………………………………………...17
3.4. Целостность сущностей………………………………………………………….19
3.5. Внешние ключи…………………………………………………………………..19
3.6. Целостность внешних ключей……………………………………………….….24
Заключение……………………………………………………………………………....25
Глоссарий………………………………………………………………………………...27
Список использованных источников…...........................................................................29
Приложение А……………………………………………………………………………30
Приложение Б……………………………………………………………………………31
Приложение В……………………………………………………………………………32
Таким
образом, в ситуации, когда возможно
появление неизвестных или
Первый вариант состоит в том, чтобы ограничиться использованием обычных типов данных и не использовать null-значения, а вместо неизвестных данных вводить либо нулевые значения, либо значения специального вида - например, договориться, что строка "АДРЕС НЕИЗВЕСТЕН" и есть те данные, которые нужно вводить вместо неизвестного адреса. В любом случае на пользователя (или на разработчика) ложится ответственность на правильную трактовку таких данных. В частности, может потребоваться написание специального программного кода, который в нужных случаях "вылавливал" бы такие данные. Проблемы, возникающие при этом очевидны - не все данные становятся равноправны, требуется дополнительный программный код, "отслеживающий" эту неравноправность, в результате чего усложняется разработка и сопровождение приложений.
Второй
вариант состоит в
Подробное обсуждение проблем использования null-значений выходит за пределы данной работы. Можно только сказать о том, что этот вопрос в теории реляционных баз данных окончательно не решен. Основоположник реляционного подхода Кодд считал null-значения неотъемлемой частью реляционной модели. К.Дейт, один из крупнейших теоретиков реляционной модели выступает категорически против null-значений (подробное обсуждение проблем, возникающих при использовании null-значений приведено в книге.
Практически все реализации современных реляционных СУБД позволяют использовать null-значения, несмотря на их недостаточную теоретическую обоснованность. Такую ситуацию можно сравнить с ситуацией, сложившейся в начале века с теорией множеств. Почти сразу после создания Кантором теории множеств, в ней были обнаружены внутренние противоречия (антиномии). Были разработаны более строгие теории, позволяющие избежать этих противоречий (конструктивная теория множеств). Однако в реальной работе большинство математиков пользуется классической теорией множеств, т.к. более строгие теории более ограничены и негибки в применении именно в силу своей большей строгости.
Мнение автора (очень скромное по сравнению с мнением корифеев реляционной теории) состоит в том, что желательно избегать null-значений. Тем не менее, приведем здесь описание трехзначной логики, необходимой для работы с null-значениями.
Т.к. null-значение обозначает на самом деле тот факт, что значение неизвестно, то любые алгебраические операции (сложение, умножение, конкатенация строк и т.д.) должны давать также неизвестное значение, т.е. null.
При сравнении выражений, содержащих null-значения, результат также может быть неизвестен, например, значение истинности для выражения есть null, если один или оба аргумента есть null. Таким образом, определение истинности логических выражений базируется на трехзначной логике (three-valued logic, 3VL), в которой кроме значений T - ИСТИНА и F - ЛОЖЬ, введено значение U - НЕИЗВЕСТНО. Логическое значение U - это то же самое, что и null-значение. Трехзначная логика базируется на таблицах истинности (табл. 1- 3)
Таблица 1 Таблица истинности AND
AND | F | T | U |
F | F | F | F |
T | F | T | U |
U | F | U | U |
Таблица 2 Таблица истинности OR
OR | F | T | U |
F | F | T | U |
T | T | T | T |
U | U | T | U |
Таблица 3 Таблица истинности NOT
NOT | |
F | T |
T | F |
U | U |
Имеется несколько парадоксальных следствий применения трехзначной логики.
Null-значение не равно самому себе. Действительно, выражение null = null дает значение не ИСТИНА, а НЕИЗВЕСТНО. Значит выражение не обязательно ИСТИНА!
Неверно также, что null-значение не равно самому себе! Действительно, выражение null null также принимает значение не ИСТИНА, а НЕИЗВЕСТНО! Значит также, что и выражение тоже не обязательно ЛОЖЬ!
не обязательно ИСТИНА. Значит, в трехзначной логике не работает принцип исключенного третьего (любое высказывание либо истинно, либо ложно).
Таких
парадоксов можно построить сколько
угодно. Конечно, это на самом деле
не парадоксы, а просто следствия
из аксиом трехзначной логики.
По определению, тело отношения есть множество кортежей, поэтому отношения не могут содержать одинаковые кортежи. Это значит, что каждый кортеж должен обладать свойством уникальности. На самом деле, свойством уникальности в пределах отношения могут обладать отдельные атрибуты кортежей или группы атрибутов. Такие уникальные атрибуты удобно использовать для идентификации кортежей.
Пусть дано отношение . Подмножество атрибутов отношения будем называть потенциальным ключом, если обладает следующими свойствами:
Любое отношение имеет по крайней мере один потенциальный ключ. Действительно, если никакой атрибут или группа атрибутов не являются потенциальным ключом, то, в силу уникальности кортежей, все атрибуты вместе образуют потенциальный ключ.
Потенциальный ключ, состоящий из одного атрибута, называется простым. Потенциальный ключ, состоящий из нескольких атрибутов, называется составным.
Отношение
может иметь несколько
Понятие
потенциального ключа является семантическим
понятием и отражает некоторый смысл (трактовку)
понятий из конкретной предметной области.
Для того чтобы проиллюстрировать этот
факт рассмотрим следующее отношение
"Сотрудники": [1]
Таблица 4 Отношение "Сотрудники":
Табельный номер | Фамилия | Зарплата |
1 | Иванов | 1000 |
2 | Петров | 2000 |
3 | Сидоров | 3000 |
При первом взгляде на таблицу, изображающую это отношение, может показаться, что в таблице имеется три потенциальных ключа - в каждой колонке таблицы содержатся уникальные данные. Однако среди сотрудников могут быть однофамильцы и сотрудники с одинаковой зарплатой. Табельный же номер по сути свой уникален для каждого сотрудника. Какие же соображения привели нас к пониманию того, что в данном отношении только один потенциальный ключ - "Табельный номер"? Именно понимание смысла данных, содержащихся в отношении.
Попробуем представить это отношение в другом виде, изменив наименования атрибутов:
Таблица 5
A | B | C |
1 | Иванов | 1000 |
2 | Петров | 2000 |
3 | Сидоров | 3000 |
Предъявим кому-нибудь эту таблицу и не сообщим смысл наименований атрибутов. Очевидно, что невозможно судить, не понимая смысла данных, может или не может в этом отношении появиться, например, кортеж (1, Петров, 3000). Если бы, кстати, такой кортеж появился (что, на первый взгляд, вполне возможно, т.к. не нарушается уникальность кортежей), то мы точно смогли бы сказать, что не является альтернативным ключом - ни один из атрибутов по отдельности. Но мы не сможем сказать, что же является первичным ключом.
Потенциальные ключи служат средством идентификации объектов предметной области, данные о которых хранятся в отношении. Объекты предметной области должны быть различимы.
Потенциальные
ключи служат единственным средством
адресации на уровне кортежей в отношении.
Точно указать какой-нибудь кортеж можно
только зная значение его потенциального
ключа.
Т.к. потенциальные ключи фактически служат идентификаторами объектов предметной области (т.е. предназначены для различения объектов), то значения этих идентификаторов не могут содержать неизвестные значения. Действительно, если бы идентификаторы могли содержать null-значения, то мы не могли бы дать ответ "да" или "нет" на вопрос, совпадают или нет два идентификатора.
Это определяет следующее правило целостности сущностей:
Правило
целостности сущностей. Атрибуты, входящие
в состав некоторого потенциального ключа
не могут принимать null-значений.
Различные объекты предметной области, информация о которых хранится в базе данных, всегда взаимосвязаны друг с другом. Например, накладная на поставку товара содержит список товаров с количествами и ценами, сотрудник предприятия имеет детей, числится в подразделении и т.д. Термины "содержит", "имеет", "числится" отражают взаимосвязи между понятиями "накладная" и "список товаров", "сотрудник" и "дети", "сотрудник" и "подразделение". Такие взаимосвязи отражаются в реляционных базах данных при помощи внешних ключей, связывающих несколько отношений.
Рассмотрим пример с поставщиками и поставками деталей. Предположим, что нам требуется хранить информацию о наименовании поставщиков, наименовании и количестве поставляемых ими деталей, причем каждый поставщик может поставлять несколько деталей и каждая деталь может поставляться несколькими поставщиками. Можно предложить хранить данные в следующем отношении : Приложение Б.[2]
Потенциальным ключом этого отношения может выступать пара атрибутов {"Номер поставщика", "Номер детали"} - в таблице они выделены курсивом.
Приведенный способ хранения данных обладает рядом недостатков.