единственном домене (или на основе одного домена); это значит, что значения
атрибута должны браться из этого домена. Например, атрибут номера детали для
отношения Р и атрибут номера детали для отношения SP определены на домене
номера детали (потому что эти два атрибута, бесспорно, представляют номера
деталей). Другими словами, в любой момент времени каждое значение Р# в
отношении Р должно быть значением из домена номера детали, то же верно для
значения Р# в отношении SP. Иными словами, в любой момент времени набор
значений Р# в отношении Р является некоторым подмножеством множества
значений домена номера детали, и то же верно для значения Р# в отношении SP.
Между прочим, обратите внимание, что обычно в любой момент времени в
домене будут значения, не являющиеся значением ни одного из атрибутов,
соответствующих этому домену. Например, если значение Р8 — допустимое
значение детали, то оно входит в домен номера детали, даже если в нашем
отношении Р из примера базы данных поставщиков и деталей нет детали Р8, т.е. в
данный момент не существует такой детали.
Сравнения, ограниченные доменом
В чем состоит значение доменов? Один из наиболее важных ответов на этот
вопрос следующий: домены ограничивают сравнения. Поясним сказанное.
Рассмотрим два запроса SQL к базе данных поставщиков и деталей (заметьте, что
оба запроса используют соединение):
Один из этих запросов, а именно левый, возможно, имеет смысл, тогда как
правый, скорее всего, — нет. Откуда это известно? С формальной точки зрения
ответ заключается в том, что запрос слева использует сравнение между атрибутами
Р.Р# и SP.P#, которые (как уже упоминалось) определены на одном и том же домене,
в то время как запрос справа использует сравнение между атрибутами P.WEIGHT и
SP.QTY, которые, вероятно, определены на разных доменах. (Мы здесь говорим
"вероятно", поскольку, хотя вес и количество являются числами, это числа разного
"сорта". Не имеет смысла сравнивать вес и количество. Поэтому домены веса и
количества должны быть различными.)
Следовательно, в соответствии с предыдущими рассуждениями, если значения
двух атрибутов взяты из одного и того же домена, тогда сравнения, а отсюда и
соединения, объединения и многие другие операции, использующие такие два
атрибута, тоже, вероятно, будут иметь смысл, так как в них сравнивается подобный
атрибут с подобным. И наоборот, если значения двух атрибутов взяты из различных
доменов, тогда сравнения и другие операции, наверное, не будут иметь смысла.
Поэтому преимущество системы поддержки доменов заключается в том, что такая
система способна предотвратить грубые ошибки. Обратите внимание, что здесь
легко допустить механическую ошибку, например набрав S# вместо Р#. Если
пользователь попробует выполнить операцию, использующую сравнение значений
разных доменов, система прервет свою работу и сообщит пользователю о
возможной ошибке. (Мы говорим "возможной", поскольку могут быть
обстоятельства, при которых такое сравнение не является ошибкой. Но об этом в