Н. 3, Елманова. C++Builder 3.0, архитектура "клиент/сервер" и Internet
и о физическом проектировании, представляющем собой описание таблиц, индексов", а также триггеров, хранимых процедур, представлений (Views), если таковые поддерживаются данной СУБД.
Не вдаваясь в подробности теории реляционных СУБД (этой теме посвящено немало книг и статей), перечислим некоторые термины, применяющиеся при проектировании, и основные принципы проектирования данных.
4.1     Терминология, используемая при проектировании баз данных
Когда говорят о логическом проектировании, употребляют такие термины, как "сущность", "связь" и "атрибут".
Сущность - это множество однотипных объектов, называемых экземплярами, при этом каждый экземпляр индивидуален и отличается от всех остальных экземпляров. Типичными примерами сущностей могут быть сущности "врач", "пациент", "специальность", а примерами экземпляров -"Иванов", "Петров", "терапевт". Как правило, сущности именуются в единственном числе. Сущности рекомендуется снабжать текстовым описанием.
Атрибут - это характеристика сущности. Атрибут выражает одно законченное и определенное свойство сущности (например, дату рождения пациента). При проектировании данных рекомендуется создавать атомарные атрибуты (например, выделение страны и города в отдельные атрибуты при описании адреса в дальнейшем позволит анализировать экземпляры сущности по признаку принадлежности к той или иной стране или тому или иному городу).
Связь - это логическое отношение между сущностями, выражающее некоторое ограничение или бизнес-правило. Связь обычно именуется глаголом.
Связи обладают свойством, называемым кардинальностью. Например: "заказчик может иметь 0,1 или много заказов" (связь типа "0,1 или много"), "заказ содержит 1 или много товаров" (связь типа "1 или много"), "у автомобиля ровно 4 колеса" (связь типа "ровно п"), "билет резервируется для О или 1 пассажира (связь типа "О или 1"). Наиболее типичным является первый случай, называемый иногда связью "один ко многим".
При логическом проектировании нередко также создаются связи "многие ко многим". Типичный пример такой связи - связь врач - пациент, когда любой пациент может лечиться у любого врача. В случае такой связи в общем случае невозможно определить, какой экземпляр одной сущности соответствует выбранному экземпляру другой сущности, что делает неосуществимой физическую (на уровне индексов и триггеров) реализацию такой
60
О проектировании данны.
связи между соответствующими таблицами. Поэтому перед переходо]^ к физической модели всё "связи "многие ко многим" должны быть переопределены (некоторые CASE-средства, если таковые используются при проектировании данных, делают это автоматически). Обычно для этой цели вводится промежуточная сущность, обладающая ассоциативными атрибутами. В нашем примере такой сущностью может являться посещение пациентом врача (отметим, что этой сущности соответствует реальное событие и регистрирующий его документ - статистический талон), а ассоциативными атрибутами, отличающими, по существу, один ее экземпляр от другого, могут быть дата посещения, цель посещения и иные содержащиеся в статистическом талоне сведения.
Говоря о связях, нельзя не остановиться на понятиях "ключ" и "ключевой атрибут". Первичным ключом называется атрибут или группа атрибутов, однозначно идентифицирующих каждый экземпляр сущности. Нередко возможно несколько вариантов выбора первичного ключа. Например, в небольшой организации первичными ключами могут быть как табельный номер, так и комбинация фамилии, имени и отчества (при уверенности, что в организации нет полных тезок) либо номер и серия паспорта (если паспорта есть у всех сотрудников). В таких случаях предпочтение отдается наиболее простым ключам (в данном примере - табельному номеру). Другие кандидаты на роль первичного ключа называются альтернативными ключами.
Отметим, что обязательным требованием, предъявляемым к первичному ключу, является его уникальность - два экземпляра сущности не должны иметь_одинаковых значений первичного ключа. Другим важным требованием является компактность - сложный первичный ключ не должен содержать ни одного атрибута, удаление которого не приводило бы к утрате уникальности. Помимо этого первичный ключ не должен содержать пустых значений. При выборе первичного ключа рекомендуется выбирать атрибут, зна-! чение которого не меняется в течение всего времени существования экземпляра (в этом случае табельный номер предпочтительнее фамилии - ее можно сменить, вступив в брак).
При создании связей между сущностями (например, "один ко многим") в дочернюю сущность передаются атрибуты, составляющие первичный ключ в родительской сущности. Эти атрибуты образуют в дочерней сущности внешний ключ.
4.2     Нормализация данных
Одним из основополагающих принципов проектирования данных является нормализация, позволяющая существенно сократить объем хранимой
61