16.4. Структурная часть: домен

Согласно Дейту, реляционная модель состоит из трех частей: структурной части, целостной части, манипуляционной части.

  1. Структурная часть описывает, какие объекты рассматриваются реляционной моделью. Постулируется, что единственной структурой данных, используемой в реляционной модели, являются нормализованные n-арные отношения.

  2. Целостная часть описывает ограничения специального вида, которые должны выполняться для любых отношений в любых реляционных базах данных. Это целостность сущностей и целостность внешних ключей.

  3. Манипуляционная часть описывает два эквивалентных способа манипулирования реляционными данными – реляционную алгебру и реляционное исчисление.

В реляционной модели данных с понятием тип данных тесно связано понятие домена, которое можно считать уточнением типа данных. Домен – это семантическое понятие. Домен можно рассматривать как подмножество значений некоторого типа данных имеющих определенный смысл.

Домен характеризуется следующими свойствами:

  1. домен имеет уникальное имя (в пределах БД),

  2. домен определен на некотором простом типе данных (числовой, текстовый) или на другом домене,

  3. домен может иметь некоторое логическое условие, позволяющее описать подмножество данных, допустимых для данного домена,

  4. домен несет определенную смысловую нагрузку.

Например, домен STATUS имеющий смысл “статус поставщика” можно описать как подмножество множества натуральных чисел: STATUS={n О N: nі10 and n<=30}

Если тип данных можно считать множеством всех возможных значений данного типа, то домен напоминает подмножество в этом множестве.

Отличие домена от понятия подмножества состоит именно в том, что домен отражает семантику, определенную предметной областью. Может быть несколько доменов, совпадающих как подмножества, но несущие различный смысл. Например, домены WEIGHT (вес) и QTY (количество) можно одинаково описать как множество неотрицательных целых чисел, но смысл этих доменов будет различным, и это будут различные домены.

Основное значение доменов состоит в том, что домены ограничивают сравнения.

Некорректно, с логической точки зрения, сравнивать значения из различных доменов, даже если они имеют одинаковый тип. В этом проявляется смысловое ограничение доменов. Синтаксически правильный запрос "выдать список всех товаров, у которых вес детали больше имеющегося количества" не соответствует смыслу понятий "количество" и "вес".

Понятие домена помогает правильно моделировать предметную область. При работе с реальной системой в принципе возможна ситуация когда требуется ответить на запрос, приведенный выше. Система даст ответ, но, вероятно, он будет бессмысленным.

Не все домены обладают логическим условием, ограничивающим возможные значения домена. В таком случае множество возможных значений домена совпадает с множеством возможных значений типа данных.Например, type Day = (Sun, Mon, Tue, Wed, Thu, Fri, Sat); var Today : Day;Здесь определенный пользователем тип данных – Day (имеющий 7 допустимых значений) и переменную Today, принадлежащую этому типу данных, а значит и ограниченную этими 7 значениями. Очевидно, это аналогично ситуации в БД, когда мы имеем домен Day и атрибут Today. Именно в этом контексте коммерческие СУБД поддерживают домены, то есть в самом примитивном смысле.

Не всегда очевидно, как задать логическое условие, ограничивающее возможные значения домена. Например, какое будет условие на строковый тип данных, задающий домен “Фамилия сотрудника”? Ясно, что строки, являющееся фамилиями не должны начинаться с цифр. Трудности такого рода возникают потому, что смысл реальных явлений далеко не всегда можно формально описать.

Оператор создания домена (К. Дейт): CREATE DOMAIN ИмяДомена ТипДанных;