Целостность сущностей
Так как первичные ключи фактически служат идентификаторами объектов, то есть предназначены для различения объектов, то значения этих идентификаторов не могут содержат Null-значения (неопределенные значения).
Метаправило целостности сущностей: атрибуты, входящие в состав первичного ключа, не могут принимать null-значения.
Основное назначение БД состоит в том, чтобы хранить и предоставлять информацию о реальном мире. Для представления этой информации в БД используются привычные типы данных — строковые, численные, логические. Однако в реальном мире встречается ситуация, когда данные неизвестны или не полны.
Null-значение — специальный маркер, используемый для представления отсутствующей информации (это не нули или пробелы!). Например, поставка существует, но количество товара не известно.
Null-значение обозначает тот факт, что значение неизвестно.
Внешние ключи
Различные объекты предметной области, информация о которых хранится в БД, всегда взаимосвязаны друг с другом.
Важно выяснить, каким образом данные, хранящиеся в отношениях Поставщик, Товар, Поставка, связаны друг с другом. Эта связь определяется семантикой предметной области и описывается фразами: Один Поставщик может выполнять несколько Поставок, Один Товар может поставляться несколькими Поставками.
Это основной вид связи — один-ко-многим. Отношение, входящее в связь со стороны один, называют родительским отношением. Отношение, входящее в связь со стороны много, называется дочерним отношением.
Механизм реализации связи один-ко-многим состоит в том, что в дочернее отношение добавляются атрибуты, являющиеся ссылками на ключевые атрибуты родительского отношения. Эти атрибуты и являются внешними ключами, определяющими, с какими кортежами родительского отношения связаны кортежи дочернего отношения.
Взгляните на атрибут S# (Номер поставщика) отношения SPJ (Поставка). Ясно, что значение этого атрибута допустимо только в том случае, если такое же значение существует в качестве значения первичного ключа S# отношения S (Поставщики). Например, не имеет смысла включать в SPJ поставку для поставщика S8, если в отношении S не существует поставщика S8. Таким образом, атрибут S# отношения SPJ являются примером внешнего ключа.
Определение: Пусть R2 — базовое отношение. Тогда внешний ключ FK в отношении R2 — это подмножество множества атрибутов отношения R2, такое что:
(1) существует базовое отношение R1 с первичным ключом К,
(2) каждое значение внешнего ключа FK в отношении R2 является или null-значением, или совпадает со значением первичного ключа К некоторого кортежа в отношении R1.
R1 — родительское отношение, R2 — дочернее отношение.
PS:
1. Внешний ключ, так же как и потенциальный, может быть простым и составным.
2. Каждый атрибут, входящий в данный внешний ключ, должен быть определен на том же домене, что и соответствующий атрибут первичного ключа.
3. Для внешнего ключа не требуется, чтобы он был компонентом некоторого потенциального ключа (как было в нашем примере).
4. Null-значения для атрибутов внешнего ключа допустимы только в том случае, когда атрибуты внешнего ключа не входят в состав никакого первичного ключа.
5. Так как внешние ключи фактически служат ссылками на кортежи в другом отношении, то эти ссылки не должны указывать на несуществующие объекты.
Метаправило ссылочной целостности: внешние ключи не должны быть несогласованными, то есть для каждого значения внешнего ключа должно существовать соответствующее значение первичного ключа в родительском отношении.
То есть если В ссылается на А, то А должно существовать.
Дата добавления: 2016-06-24; просмотров: 809;