Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка 1. Внешние модели данных.doc
Скачиваний:
7
Добавлен:
16.08.2019
Размер:
724.48 Кб
Скачать

1.3. Целостность иерархической модели

Обсудим теперь весьма важный вопрос о том, как в мо­дели «сложная таблица» отражаются ограничения целост­ности базы данных2.

Неявные ограничения целостности (Implicit Integrity Constraint)3, естественным образом присущие иерархи­ческой модели данных и не требующие от разработчи­ка каких-либо дополнительных спецификаций, фактиче­ски уже обсуждались выше. Это ограничение единствен­ной сущности, а также ограничение иерархической орга­низации множества атрибутов: атрибут или агрегат может непосредственно входить только в один агрегат (что, ко­нечно же, не препятствует древовидной вложенности агре­гатов).

Явные ограничения целостности (Explicit Integrity Constraint), которые должен задать разработчик базы дан­ных в дополнение к неявным ограничениям, можно разде­лить на два вида:

  • стандартные, которые можно отразить средствами языка модели (в данном случае — графическими);

  • нестандартные, для отражения которых отсутствуют возможности в языке модели и которые приходится зада­вать с помощью дополнительных словесных (вербальных) формулировок.

Далее рассматриваются основные классы стандартных и нестандартных ограничений.

2 Целостность базы данных (Database Integrity) — свойство состо­яния базы данных, характеризующееся отсутствием таких значений данных или их сочетаний, которые невозможны в соответствующей предметной области. Например, в предметной области — учебном про­цессе — невозможен студент, обучающийся, скажем, на седьмом курсе, в то время как в базе данных атрибуту «курс» вполне можно приписать значение «7». Поэтому модель данных должна задавать ограничения целостности (Integrity Constraint) базы данных.

3 Синоним — генетические (Native) ограничения целостности.

Уникальность

Ограничения уникальности связаны с запретом дубли­катов, т. е. одинаковых значений атрибутов или совокуп­ностей атрибутов в для множества или определенного под­множества экземпляров сущности. В первую очередь тре­буется, чтобы дубликаты отсутствовали во всей совокуп­ности экземпляров сущности, т. е. чтобы совокупность эк­земпляров сущности являлась множеством в математическом смысле1. Более тонкие нюансы уникальности связа­ны с понятиями идентификатора и ключа.

Идентификатор сущности (Entity Identifier) — совокуп­ность атрибутов сущности (или отдельный атрибут), ко­торые уникально идентифицируют отдельные экземпля­ры сущности на множестве всех возможных экземпляров. Иными словами, среди всех возможных экземпляров сущ­ности не должно быть двух с одинаковыми значениями идентификатора. Например, если в реальной недопусти­мы два студента с одинаковым кодом (очевидно, так оно и есть), то атрибут «код» является идентификатором сущ­ности «Студент». Идентификатор в данном примере содер­жит единственный атрибут; такой идентификатор называ­ется простым.

Составной идентификатор (Compaund Identifier) содер­жит более одного атрибута. Говоря о составных идентифи­каторах, необходимо учитывать то обстоятельство, что из имеющегося идентификатора можно сделать другой про­стым добавлением к нему еще одного атрибута сущно­сти. Если атрибут «код» является идентификатором, то пара атрибутов — «код» и, скажем, «фио» — тоже явля­ется идентификатором согласно определению, приведен­ному выше. Такая ситуация создает неудобства, поэтому обычно пользуются более строгим определением составно­го идентификатора, как минимальной совокупности атри­бутов, уникально идентифицирующей сущность. Мини­мальная совокупность означает, что при удалении любого атрибута из списка идентификатора остаток уже не явля­ется идентификатором. Далее мы будем основываться на таком понимании идентификатора.

Пример составного идентификатора. Если дополнить сущность «Студент» атрибутами «спец» — код специаль­ности, на которой обучается студент, «группа» — поряд­ковый номер группы студента на специальности, «нпп» — номер по порядку студента в группе, то, очевидно, такая совокупность атрибутов образует идентификатор.

Несколько идентификаторов одной сущности — вполне допустимая и часто встречающаяся на практике ситуация. Для сущности «Студент» помимо рассмотренных иденти­фикаторами могли бы быть атрибуты: «зачетка» — но­мер зачетной книжки, «паспорт» — серия и номер паспор­та; «иин» — индивидуальный идентификационный номер и т. п. В связи с этим на практике возникает необходимость выбора того или иного идентификатора в качестве стан­дартного средства идентификации экземпляров сущности.

Первичный ключ (Primary Key) сущности (или просто ключ сущности) — идентификатор сущности, выбранный среди остальных идентификаторов для идентификации эк­земпляров в некоторых стандартных ситуациях. Для сущ­ности можно задать, таким образом, только один первич­ный ключ и именно он используется по умолчанию для до­ступа к экземплярам сущности. Остальные идентификато­ры в этом плане называются возможными (Candidate) клю­чами2.

Первичный ключ на диаграмме модели бу­дем отображать с по­мощью квадратов на конце выносных линий, ведущих к атрибу­там, которые являются компонентами ключа (рис. 1.5). Таким обра­зом, первичный ключ является стандартным ограничением целост ности. Что касается возможных ключей, то, чтобы не загромождать диаграмму, отнесем их к разряду нестан­дартных и будем задавать с помощью дополнительных формулировок.

Уникальность в многозначных агрегатах подразумева­ет отсутствие дублирования значений атрибутов в множе­стве экземпляров многозначных агрегатов, соответствую­щих одному экземпляру сущности или одному экземпляру родительского агрегата. В качестве примера рассмотрим совокупность экземпляров агрегата «Предмет» в модели на рис. 1.2. Если рассматривать эту совокупность для всего множества студентов, то среди них вполне могут оказать­ся дубликаты — несколько студентов сдали один и тот же предмет в один день с одной оценкой. Однако, если рассмо­треть совокупность экземпляров «Предмет», соответству­ющих одному экземпляру сущности «Студент», то дубли­катов быть не должно, поскольку в этой модели конкрет­ный студент сдает конкретный предмет только один раз, т.е. не может быть двух экземпляров «Предмет» с одина­ковым значением атрибута «код». Атрибут «Предмет.код» в этом случае выступает в качестве идентификатора агрегата.

Идентификатор агрегата (мно­гозначного), таким образом, — это совокупность атрибутов, которая од­нозначно идентифицирует экземпляр этого агрегата в совокупности его экземпляров, принадлежащих либо эк­земпляру ближайшего охватывающего многозначного агрегата (если таковой имеется), либо экземпляру сущности (в противном случае). Вообще говоря, возможно несколько идентификаторов агрегата; один из них назначается в качестве ключа агрегата.

Изображение ключей агрегатов на диаграмме модели такое же как при изображении первич­ного ключа сущности — с помощью квадратиков на вы­носных линиях. На рис. 1.6 атрибут «Студент.код» поме­чен символом ключа; это ключ сущности, запрещающий возможность любых двух студентов с одинаковым кодом. Атрибут «Студент.Предмет.код» также помечен символом ключа; это ключ агрегата «Предмет», запрещающий в лю­бом экземпляре сущности «Студент» возможность двух эк­земпляров «Предмета» с одним и тем же кодом. Наконец, атрибут «Студент.Предмет.Сдача.нпп» — номер по поряд­ку попытки сдачи данным студентом данного предмета2 — тоже является ключом; это ключ агрегата «Сдача», запре­щающий в любом экземпляре агрегата «Предмет» возмож­ность двух экземпляров «Сдачи» с одинаковым «нпп».

Иерархический идентификатор/ключ агрегата — это последовательность идентификаторов/ключей, однознач­но идентифицирующая экземпляр агрегата, первым в ко­торой стоит идентификатор/ключ сущности, а далее в по­рядке старшинства следуют идентификаторы/ключи вло­женных многозначных агрегатов. Например, последова­тельность «Студент.код, Предмет.код, Сдача.нпп» есть иерархический ключ агрегата «Сдача» в модели на рис. 1.6. Первая компонента иерархического ключа селектирует одного из студентов, вторая — один из предметов, сдавав­шихся этим студентом, третья — одну из попыток сдачи предмета студентом.

1Множество (set) – неупорядоченная совокупность отличных друг от друга элементов

2Применение термина «первичный» предполагает, что должны су­ществовать и «вторичные» (а может быть «третичные» и т.д.) клю­чи. Вторичным ключом (Secondary Key) называют атрибут или сово­купность атрибутов, используемых для неуникального доступа к эк­земплярам сущности. Например, в запросе на извлечение экземпляров сущности «Студент», получивших отличные оценки по физике, атри­буты «Предмет.оцен» и «Предмет.назв» выступают в роли вторичного ключа, а в результате может быть извлечено множество экземпляров. Термин «третичный ключ», как нам известно, еще никем не использо­вался.

2 Нам пришлось ввести этот атрибут (ср. рис. 1.4) для того, чтобы можно было однозначно идентифицировать экземпляры «Сдачи», поскольку, вообще говоря, некоторый студент может сделать несколько попыток сдать некоторый предмет в один и тот же день с одним и тем же результатом.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]