Свойства целостности
Ограничение целостности (или, для краткости, просто ограничение) по
существу представляет собой булево выражение, которое должно принимать значение TRUE. Например, для отделов и служащих мы могли бы ввести ограничение, которое гласит, что значение атрибута SALARY (зарплата) должно быть больше нуля. Вообще говоря, на любую базу данных налагается много разнообразных ограничений, однако все они по необходимости специфичны для конкретной базы и потому должны выражаться в терминах отношений в этой базе. Но в оригинальную реляционную модель включены также два обобщенных ограничения целостности – обобщенных в том смысле, что они применимы к любой базе данных (если говорить неформально). Одно касается первичных ключей, другое – внешних.
Правило целостности сущностей
Атрибуты, входящие в состав первичного ключа, не могут принимать null-значений.
Правило ссылочной целостности
Не должно быть внешних ключей, не имеющих соответствия. Сначала я объясню смысл второго правила. Говоря о внешнем ключе, не имеющем соответствия, я имею в виду значение внешнего ключа, для которого не существует соответствующего ему потенциального ключа с таким же значением; например, в базе данных об отделах и служащих правило ссылочной целостности было бы нарушено, если бы в отношении EMP встретилось, к примеру, значение D2 атрибута DNO, но в отношении DEPT не оказалось бы кортежа с таким же значением DNO. Та- ким образом, правило ссылочной целостности просто выражает семантику внешних ключей, а название «ссылочная целостность» напоминает о том факте, что значение внешнего ключа можно рассматривать как ссылку на кортеж с таким же значением соответственного потенциального ключа. По существу, правило говорит: если B ссылается на A, то A должно существовать.
Что же касается правила целостности сущностей, то я, скажем так, испытываю затруднение. Дело в том, что я полностью отвергаю концепцию «null-значений»; по моему глубокому убеждению, им не место в реляционной модели. (Кодд считал иначе, очевидно, но и у меня есть сильные аргументы в защиту собственной позиции.) Поэтому, чтобы объяснить смысл правила целостности сущностей, мне придется (по край- ней мере, на время) забыть о своем неверии. Что я и сделаю… но имей- те в виду, что я еще вернусь к вопросу о null-значениях в главах 3 и 4.
По сути своей, null – это «маркер», говорящий, что значение неизвестно (подчеркну – и это принципиально важно, что null-значение – и не значение вовсе, а только маркер, или флаг). Допустим, к примеру, что мы не знаем величину зарплаты служащего E2. Тогда вместо того, что- бы вводить какое-то реальное значение SALARY в кортеж, описывающий этого служащего в отношении EMP, – по определению, мы не можем этого сделать, так как не знаем нужного значения, – мы помечаем атрибут SALARY в этом кортеже флагом null:
Важно понимать, что этот кортеж не содержит ничего в позиции SA- LARY. Но очень трудно изобразить «ничто» на рисунке! На рисунке выше я попытался показать, что позиция SALARY пуста, затенением ячейки, но было бы точнее не показывать ее вовсе. Так или иначе,
я и дальше буду придерживаться того же соглашения: обозначать пустые позиции затенением, памятуя о том, что затенение говорит об отсутствии всякого значения. Если вам так удобнее, можете считать, что она представляет собой маркер, или флаг null.
Возвращаясь к соотношению EMP, правило целостности сущностей говорит (неформально выражаясь), что у любого служащего может быть неизвестно имя, отдел или зарплата, но не номер служащего, поскольку, если неизвестен номер, то мы вообще не знаем, о каком служащем (сущности) идет речь.
Вот и все, что я хочу сказать о null-значениях на данный момент. И пока забудем о них.
Дата добавления: 2017-01-17; просмотров: 804;