Основной идеей является выделение трехуровневой абстракции в описании данных. Цель – отделение пользовательского представления БД от ее физического представления.
Причины, по которым желательно такое разделение:
- каждый пользователь должен иметь возможность обращаться к общим данным, используя собственное представление о них;
- пользователи не должны иметь дело с подробностями физического хранения данных;
- администратор БД должен иметь возможность изменять структуру БД, не оказывая влияние на представления пользователей;
- внутренняя структура БД не должна зависеть от изменений физических аспектов хранения информации, таких как переключение на новое устройство и т.д.;
Выделяются три уровня архитектуры БД – внешний, концептуальный и внутренний.
Внешний уровень – представление БД с точки зрения пользователей, состоит из нескольких внешних представлений, обычно соответствующих группам пользователей. Различные представления могут по-разному отображать одни и те же данные, также они могут включать вычисляемые данные, не хранящиеся в БД.
Концептуальный уровень – обобщенное представление схемы БД. Уровень описывает, какие данные хранятся в БД и какие связи хранятся между ними. Концептуальная схема – это полное представление требований к данным со стороны организации, оно не зависит от способа хранения данных. На концептуальном уровне представлены следующие компоненты:
1. Все элементы данных.
2. Ограничения, накладываемые на элементы данных.
3. Семантическая информация о данных.
4. Информация о мерах обеспечения безопасностей и поддержки целостности данных.
Внутренний уровень – описывает реализацию БД и предназначен для обеспечения оптимальной производительности системы и экономного использования ее ресурсов с учетом конкретной СУБД.
Внутреннему уровню соответствует следующая информация:
1. Описание подробностей хранения с указанием реальных размеров сохраняемых элементов.
2. Распределение дискового пространства для хранения данных и индексов.
3. Сведения о физической организации данных.
4. Сведения о сжатии данных и методах их шифрования.
Ниже внутреннего уровня лежит физический, который контролируется операционной системой под руководством СУБД, их функции на этом уровне четко не разделены.
Два подхода к концептуальному проектированию: восходящий и нисходящий.
При восходящем подходе проектирование начинается с самого нижнего уровня с выделения атрибутов. После этого выявляются взаимосвязи между ними, то есть функциональные зависимости, затем с использованием специальных алгоритмов, основанных на функциональных зависимостях, строятся схемы БД.
Восходящий подход лучше использовать для проектирования простых БД, так как с ростом числа атрибутов установить все взаимосвязи между ними затруднительно, кроме того, на начальных стадиях проектирования больших систем трудно выделить все атрибуты.
Нисходящий подход начинается с выявления нескольких высокоуровневых сущностей и связей между ними. После этого в несколько этапов производится уточнение модели, при этом появляются новые сущности, связи и атрибуты.
Также существует смешанная стратегия проектирования, в этом случае восходящий и нисходящий подход используются для различных частей системы, а затем результаты сводятся воедино.
Понятие сущности.
При описании любой предметной области человек пользуется понятиями отдельных предметов, фактов или событий, которые он выделяет из окружающего мира, отличая их от всех остальных и идентифицируя определенным образом. Поэтому основной составляющей семантической модели являются сущности.
Сущность (entity) – «предмет», который может быть идентифицирован некоторым способом, отличающим его от других предметов. Предмет используется в широком смысле, например в системе управления учебным процессом в качестве предметов используются реальные предметы (учебный корпус, аудитория, преподаватели, факты, сессия и т.д.).
Характеристики сущности. Проблема уникальности сущности.
В общем случае, сущность – тип или класс различимых объектов. Основанием отнесения сущности к определенному классу является наличие у сущности характеристик (атрибутов), присущих классу. Отличие сущности от остальных сущностей класса производится на основании значений этих же характеристик.
Значения большинства характеристик сущности меняются с течением времени, но это не означает исчезновение сущности и появление новой → возникает необходимость выявления характеристик сущности, которые не меняются во времени и однозначно идентифицируют сущность.
Проблема состоит в том, что на практике неизменные атрибуты найти невозможно. Даже в случае, если такие атрибуты находятся (№ зачетки и № паспорта), то в процессе эксплуатации системы может возникнуть необходимость модификации этих атрибутов, например, для исправления сделанных ошибок.
С точки зрения реального мира, такое исправление может соответствовать как модификации данного атрибута (первичного ключа), так и создания новой сущности. Одним из решений подобной проблемы может быть введение суррогатных ключей сущности. Недостаток данного подхода – удаление модели от реального мира, то есть модель содержит информацию, отсутствующую в предметной области.
Таким образом, концептуальное проектирование начинают в выявления в предметной области сущностей, определения характеристик этих сущностей, определения наборов атрибутов, уникально определяющих сущности; из этих наборов выбирают первичный ключ или вводят суррогат.
В формате IDEFX сущность определяют следующим образом:
Все наборы атрибутов, которые могли рассматриваться как ключи, помечаются АК (альтернативный ключ).
Связи. Понятие связи.
Предметы, события и личности в предметной области находятся в определенных взаимосвязях. При построении семантической модели необходимо выявить эти взаимосвязи. Включение взаимосвязи в модель приводит к появлению новых атрибутов или сущностей, в зависимости от типов взаимодействия.
Пусть в предметной области существует факт – «студент обучается в группе». Это означает наличие взаимосвязи между сущностями студент и группа. При более детальном анализе выявляются дополнительные факты: студент одновременно может учиться только в одной группе, группа может состоять из многих студентов.
Такие взаимодействия отражаются как связи «один ко многим» и в стандарте IDEFX отражаются следующим образом:
В результате построения связи у сущности «студент» появился новый атрибут, помеченный FK (foreign key). Значение этого атрибута должно совпадать со значением первичного ключа сущности «группа».
В стандарте IDEFX связи «один ко многим» классифицируют по следующим признакам:
1) по возможности null-значения;
2) по степени зависимости связываемых сущностей;
3) по кардинальности;
1. Классификация связи по возможности null-значения. Продолжим пример со студентом. В какой-то момент времени студент может не принадлежать группе, например, когда студент находится в академическом отпуске или при переводе со специальности на специальность. Таким образом, атрибут «номер группы» в сущности «студент», кроме значения первичного ключа сущности «группа», может принимать null-значение.
Такая связь (с возможностью null-значения внешнего ключа) отмечается ромбом у сущности-предка.
Рассмотрим другой пример – «сотрудник работает в отделе». Проводим рассуждения, аналогичные предыдущему примеру. Если «каждый сотрудник должен работать в отделе», то между сущностями «сотрудник» и «отдел» имеется связь «один ко многим» без возможности неопределенного значения внешнего ключа. Она отображается также, только ромб у сущности-предка отсутствует.
2. Классификация связи по степени зависимости связываемых сущностей. Иногда при идентификации предмета реального мира используются характеристики, присущие другим предметам, например, специализация идентифицируется кодом специальности, которой она принадлежит и собственным номером.
071901 – первые 4 цифры – номер специальности, остальные – номер специализации. При этом номер специализации уникален в рамках специальности.
Сущности, подобные сущности «специализация», называются слабыми или зависимыми, и отображаются прямоугольниками со скругленными углами:
Связь называются идентифицирующей связью «один ко многим» и отображается не пунктирной линией и переносом первичного ключа сущности-предка в состав первичного ключа сущности-потомка. Разумеется, идентифицирующая связь не может допускать неопределенного значения внешнего ключа.
Ранее описанные связи являлись не идентифицирующими, отображались пунктирной линией, и первичный ключ сущности-предка переносится в состав не ключевых атрибутов.
3. Классификация связи по кардинальности. Стандарт IDEFX поддерживает следующие кардинальности связи (рис 4):
Например, на факультете может не быть ни одной специальности, а может быть 1, 2 и так далее специальностей.
Например, в группе должен быть хотя бы 1 студент.
Например, у группы может быть только один куратор. С другой стороны, преподаватель может быть куратором только для одной группы. Таким образом, на схеме должны присутствовать связи «преподаватель» и «группа», между ними существует связь «1 к 0 или к 1», при этом внешний ключ может присутствовать у любой из этих сущностей.
Обычно при реализации базы данных сущности, между которыми есть связи «1 к 1», решаются в виде общей таблицы. Однако с семантической точки зрения объединять такие таблицы нельзя, так как получается сущность с непонятным значением.
Роль внешнего ключа.
Иногда для более точного описания предметной области вводится понятие роли атрибута для внешнего ключа. Роль – значение, которое атрибут несет, в сущности. Например, в примере о кураторе группы атрибут «табельный номер преподавателя» в сущности «группа» может играть роль «куратор». Если связь построена в обратном направлении, то внешний ключ играет роль «курируемая группа».
Бывают ситуации, когда введение роли внешнего ключа обязательно.
1) Например, когда между двумя сущностями присутствуют две или более связи → опишем бухгалтерскую проводку, которая характеризуется номером в пределах одной даты и суммой. Счет характеризуется номером, названием и разделом баланса. Между сущностями можно выделить две связи:
– «проводка кредитует счет» - один и тот же счет может кредитоваться различными проводками, а проводка кредитует только один счет → связь «один ко многим»; проводка не может не иметь счета кредитования, то есть связь не допускает неопределенного значения внешнего ключа; счет кредитования не участвует в идентификации проводки, поэтому связь не идентифицирующая;
- «проводка дебетует счет» - первичный ключ к сущности «счет» должен дважды войти в состав не ключевых атрибутов сущности «проводка», то есть обойтись без роли внешнего ключа нельзя:
2) в случае рекурсивной связи - когда родитель и потомок совпадают. Пример – иерархия подчинения в организации, когда для данного работника необходимо учитывать его непосредственного начальника: