Целостность сущности
. Правило целостности сущности часто формулируют как требование уникальности значений первичного ключа. Однако, на самом деле это не так. Требование целостности сущности состоит в том, что каждый кортеж любого отношения должен быть идентифицируем. Иначе говоря, в БД не должна храниться информация о чем-то таком, что мы не можем идентифицировать.
Это требование связано с проблемой представления незнания в БД. В реальной жизни в базу данных нередко приходится включать кортежи, содержащие неизвестные значения некоторых атрибутов.
Например:
· поставщик зарегистрирован, а статус его еще не определен;
· руководство фирмы еще не решило, в каком городе разместить производство изделия;
· известна дата смерти исторического деятеля, а дата рождения затерялась в глубине веков и т.п.
В подобных случаях соответствующим атрибутам присваиваются так называемые Null-значения.
Null
– это специальный маркер, показывающий, что значение данного атрибута в настоящий момент неизвестно и, возможно, будет введено впоследствии. Null не «ноль», не «пробел», и вообще, Null не имеет типа. Этим маркером может быть помечен любой атрибут любого кортежа.
Null
обладает следующими свойствами:
· всякое сравнение с участием Null
дает результат Null;
· все Null-значения различны;
· отрицание Null – тоже Null.
Если какой-либо из атрибутов, входящих в состав первичного ключа отношения, принял значение Null, то представленный этим кортежем экземпляр объекта ПО невозможно идентифицировать. Очевидно, нет смысла хранить в БД такую комбинацию значений.
В самом деле, что означает утверждение: «номер поставщика неизвестен»? Мы еще не присвоили ему номер? Мы не знаем, присвоен ему номер или нет? Нам неизвестно, идет ли речь об уже зарегистрированном в БД поставщике или о каком-то другом? И т.д.
Во всех случаях, прежде чем заносить
информацию в БД, необходимо идентифицировать эту информацию, т.е. задать определенное значение первичного ключа. Если допустить возможность неопределенных значений первичного ключа, то будет разрушен механизм адресации РМД.
Правило целостности сущности: ни один компонент первичного ключа отношения не может принимать неопределенное значение.
Это, как и требование целостности домена, метаправило. Оно означает, что в схеме конкретной РБД должны быть определены первичные ключи всех отношений. Тогда РСУБД не допустит появления кортежей с Null-значениями соответствующих атрибутов.