Диго С.М. Базы данных проектирование и использование (1084447), страница 27
Текст из файла (страница 27)
При проектировании БД необходимо оценить, с одной стороны, предметную область относительно ее изменчивости, а с другой - проект БД с точки зрения затрат на отображение возможных изменений в предметной области в информационной системе.
Рассмотрим еще один пример, иллюстрирующий оценку проектного решения по некоторым из перечисленных выше критериев.
При ручной организации учета успеваемости в вузах обычно ведется «Книга баллов», в которой каждой группе соответствует своя страница, по строкам которой размещен список студентов, по столбцам - названия дисциплин, которые они изучают в данном семестре. На пересечении строки и столбца проставляется соответствующая отметка.
Если подобную систему перенести без перепроектирования в машинную форму, то это повлечет за собой необходимость создания по меньшей мере стольких файлов/таблиц с разной структурой, сколько имеется разных учебных планов. Число полей в каждом файле будет велико. Без знания учебного плана спроектировать структуру такой БД нельзя. Общее число файлов БД будет еще больше, поскольку для каждого семестра придется делать свой файл, так как в противном случае надо указывать где-то семестр, в котором студент сдавал экзамен; особенно это важно, если по одному и тому же предмету сдается несколько экзаменов.
Каждый раз, когда в учебный план вводятся новые дисциплины, придется менять структуру БД. Обрабатывать БД с такой структурой чрезвычайно тяжело. Например, чтобы знать, какие оценки у студента X по физике, нужно знать, в какой группе учится данный студент, какая (какие) таблица содержит сведения об его успеваемости, сколько оценок по физике он имеет и как называются соответствующие поля, в которых отражены эти оценки. Многие другие запросы также сформулировать будет сложно. Таким образом, это решение представляется неудовлетворительным по всем основным показателям: плохие адаптивные свойства, велика сложность структуры и обработки. Универсальность системы равна нулю.
Если предложить другой вариант, а именно создать таблицу «Успеваемость» с полями «Код_студента», «Предмет», «Семестр», «Оценка», то все указанные недостатки, отмеченные для первого проектного решения, будут устранены.
Недостатком же второго варианта по сравнению с первым будет большая степень дублирования данных: в первом варианте «ФИО/ Код_студента» фиксируется только один раз как значение поля, а названия предметов вообще фиксируются только в описании структуры, а во втором варианте они будут повторены как значения соответствующих полей при фиксации каждого факта сдачи экзамена. Но, несмотря на указные недостатки, предпочтение все равно должно быть отдано этому варианту.
Значимость критериев для каждого конкретного проекта будет зависеть от многих объективных и субъективных факторов. Прежде всего она зависит от самого критерия. Среди них есть такие, значимость которых не только никогда не понижается, а наоборот, постоянно растет (например, адекватное отображение действительности, удовлетворение разнообразных потребностей пользователей и т.п.). Актуальность других критериев становится менее существенной с ростом возможностей техники и программного обеспечения (например, занимаемый базой данных объем памяти).
На значимость критерия оценки влияют особенности ИС, для которой создается проект (например, для систем, работающих в реальном масштабе времени, очень важна скорость реакции системы на запросы, для банковских систем - защита информации и надежность системы).
3.2. Особенности даталогических моделей
3.2.1. Внутризаписная структура
В базах данных со структурированными моделями следует различать внутризаписную и межзаписную структуры. Внутризаписная структура может быть либо линейной, либо иерархической. При линейной структуре запись состоит из простых элементов, часто называемых полями, которые следуют в записи одно за другим, т.е. структура записи является нормализованной.
В иерархической внутризаписной структуре в состав записи могут входить не только простые, но и составные компоненты. Это могут быть векторы (когда повторяются однотипные элементы), повторяющиеся группы (когда в записи может присутствовать несколько экземпляров составных единиц информации, включающих в себя несколько разнотипных элементов), а также неповторяющиеся составные единицы информации внутри записи. Например, если имеется запись «Личность», то в ее состав могут входить простые элементы, такие, как «Табельный_номер», «Фамилия» и т.д., вектор «Иностранный_язык» (предполагается, что человек может владеть несколькими иностранными языками), повторяющаяся группа «Послужной_список», включающая элементы: «Дата_назначения», «Дата_увольнения»,
«Место_работы», «Должность», а также неповторяющаяся группа «Адрес», состоящая из элементов «Город», «Улица», «Дом», «Квартира».
Иерархическая структура записи может быть как одноуровневой, так и многоуровневой. Принципиально возможны довольно сложные структуры, например, когда в состав повторяющейся группы в качестве составляющего компонента входит другая повторяющаяся группа. Однако по разным причинам (в частности, из-за сложности реализации) в конкретных СУБД имеются различные ограничения (например, повторяющаяся группа может существовать только на первом уровне иерархии, ограничивается число уровней иерархии и т.п.).
Записи могут быть с постоянным и переменным составом. Последнее обычно понимается так: если значение какого-либо компонента записи отсутствует для конкретного объекта, то и сам этот компонент в данной записи отсутствует. Например, если один из сотрудников окончил вуз, имеет ученую степень и ученое звание, то название вуза, год его окончания, ученая степень, ученое звание и даты их присвоения хранятся в записи, соответствующей данному сотруднику. Если у другого сотрудника все эти признаки отсутствуют, то в соответствующей ему записи эти поля также отсутствуют. Если записи имеют постоянный состав, то все поля, описанные в структуре записи, всегда присутствуют в каждом экземпляре записи, но некоторые из этих полей могут быть пустыми.
Другой характеристикой записи является тип ее длины. По этому признаку различают записи с фиксированной (постоянной), переменной и неопределенной длиной. Запись может иметь переменную длину в результате того, что переменную длину имеют ее поля, или возможно отсутствие каких-либо полей, или допускается разное число экземпляров для повторяющихся компонентов.
Поле является наименьшим семантически значимым элементом записи. Основными характеристиками поля являются его тип и длина. Существующие СУБД различаются по набору поддерживаемых типов полей, но наблюдается тенденция к расширению этого набора. Большинство современных СУБД кроме привычных полей символьного и числового типа допускают использование полей типа даты, логических полей, а также полей денежного типа. Некоторые системы позволяют вводить определяемые пользователем типы полей. В последнее время все большее распространение получают мультимедийные формы представления данных.
3.2.2. Межзаписная структура
Традиционное деление СУБД по типу модели данных на реляционные, иерархические и сетевые основывается на характере связей между записями. При всей разнице в терминологии можно считать, что основными компонентами любой из этих моделей являются файлы, которые состоят из записей.
Иерархические модели. В классических иерархических моделях имеется один файл, который является входом в структуру (корень дерева). Остальные файлы связаны друг с другом таким образом, что каждый из них, за исключением корневой вершины, имеет ровно одну исходную вершину («родитель») и любое число подчиненных вершин («детей»). Между записью файла-родителя и записями порожденного файла имеется отношение 1:М (как частный случай может быть и отношение 1:1). Имеются и другие разновидности иерархических моделей, но они менее распространены.
Сетевые модели. Если на сетевые модели не накладывается никаких ограничений, в принципе любой файл может быть точкой входа в БД, каждый из файлов может быть связан с произвольным числом других файлов и между записями связанных файлов могут быть любые отношения (1:1, 1:М, М:М). Однако в реальных СУБД на модель накладываются различные ограничения. Так, имеются сетевые СУБД с разнотипными файлами. В них все файлы разделены на два типа: основные и зависимые. В таких СУБД входом в базу данных Могут служить только основные файлы, а связываться между собой могут только разнотипные файлы.
Во многих сетевых СУБД не поддерживается непосредственно отношение М:М. В таких моделях каждая связь между парой файлов определяется отдельно, и для каждой из них один файл в этой паре объявляется владельцем, а другой - членом. Отношение между записью-владельцем и записями-членами - 1:М.
Связи между файлами в иерархических и сетевых моделях определяются при описании структуры базы данных и физически чаще всего передаются с помощью различных указателей.
Реляционные модели. В таких моделях используется своеобразная терминология, но это не меняет сущности модели. Часто даже в рамках одной модели в разных СУБД используется разная терминология. Так, на логическом уровне элемент чаще всего называют атрибутом; кроме того, для него используются термины «колонка», «столбец», «поле». Совокупность атрибутов образует строку (синонимичные термины - «ряд», «запись», «кортеж»). Совокупность строк образует отношение («таблицу», «файл базы данных»). Понятие базы данных как множества отношений поддерживается далеко не всеми реляционными СУБД (т.е. при создании БД описываются отдельные отношения (файлы, таблицы), а для всей базы данных как самостоятельной информационной единицы никакого описания не предусмотрено). Однако следует отметить, что в последнее время новые версии даже тех настольных СУБД, которые раньше не поддерживали понятие БД, сейчас его включают.
Связи между файлами в реляционной модели в явном виде могут не описываться. Они устанавливаются динамически в момент обработки данных по равенству значений соответствующих полей.
В сетевых и иерархических моделях структура записи в принципе может быть любой, хотя многие СУБД накладывают различные ограничения на структуру записи. В реляционных моделях структура записи должна быть линейной.
Каждое отношение по определению имеет ключ, т.е. атрибут (простой ключ) или совокупность атрибутов (составной ключ), однозначно идентифицирующих кортеж. В некоторых случаях в отношении могут быть несколько возможных (вероятных, альтернативных) ключей.
К сожалению, не все реляционные СУБД поддерживают концепцию ключа, поскольку в этом случае многие проблемы (в частности, обеспечение проверки на уникальность ключа и соблюдение некоторых других ограничений целостности) возлагаются на пользователя (проектировщика ИС). Вне зависимости от того, требует ли СУБД явного указания ключей при описании отношений или нет, проектировщик базы данных должен понимать, что является ключом каждого отношения.
В случае если СУБД поддерживает концепцию ключа, при наличии нескольких вероятных ключей один из них выбирается и описывается как первичный, остальные — как альтернативные (обычно для этих целей используется либо уникальный индекс, либо описатель UNIQUE при определении таблицы).
Атрибут (или группа атрибутов), который в рассматриваемом отношении не является ключом, а в другом отношении - является, называется внешним ключом.
Если какая-либо таблица содержит внешний ключ, то она логически связана с таблицей, содержащей соответствующий первичный ключ; эта связь имеет характер «один ко многим» (таблица, содержащая внешний ключ, находится на стороне «много» в этой связи). В частном случае это может быть связь 1:1. Связь М:М в реляционной базе данных непосредственно не поддерживается.
По сути, понятия «родитель» - «ребенок» в иерархических моделях, «файл-владелец» - «файл-член» в сетевых моделях и связь «ключ» - «внешний ключ» в реляционных моделях передают одно и то же явление — наличие связи 1 :М между записями соответствующих файлов.
В реляционных СУБД часто используется понятие взгляд (view). Оно трактуется как виртуальная таблица, часто полученная в результате логического соединения нескольких связанных по значениям общих столбцов таблиц и, возможно, включающая некоторое подмножество из всей совокупности строк, отобранное по заданному условию. Это понятие расширяет традиционное для банков данных понятие «подсхема».
Понимание различий и общности моделей разных классов позволяет использовать общий подход при проектировании структуры баз данных, осуществлять преобразование одних моделей в другие, использовать средства, в частности языковые, предназначенные для работы с одним классом моделей, при работе с другим.
Системы, построенные на основе инвертированных файлов. Это еще одна разновидность моделей данных. Относительно логической структуры БД такие модели следует отнести к сетевым. Более того, это единственный вид моделей, которые в явном виде поддерживают отношение М:М между файлами БД. Особенности этих моделей заключены в способе отражения связей между информационными единицами. В системах, построенных на основе инвертированных файлов, собственно хранимые данные и информация о связях между информационными единицами логически и физически отделены друг от друга. Основные данные в этих системах хранятся в файлах, записи которых могут иметь многоуровневую иерархическую структуру. Вся управляющая информация сосредоточена в так называемом ассоциаторе. Логическая связь между файлами устанавливается посредством компонента ассоциатора, называемого сетью связи. Отделение ассоциативной информации от собственно хранимых данных позволяет изменять связи, не изменяя при этом самих файлов.
3.3. Проектирование логической структуры реляционной базы данных
3.3.1. Вводные положения
Для реляционной базы данных проектирование логической структуры заключается в том, чтобы разбить всю информацию по файлам (или в терминах реляционной модели - по отношениям, таблицам), а также определить состав полей (в терминах реляционной теории -атрибутов) для каждого файла. Определение ключа каждого из отношений также является задачей логического проектирования реляционной БД.
Сейчас многие реляционные СУБД позволяют декларативно задавать связи между таблицами при описании БД, а также определять необходимость контроля и способы обеспечения целостности по связям для БД. Решение этих вопросов также следует отнести к даталогическому проектированию. Другие ограничения целостности (кроме ограничения на уникальность и ограничения по связи) в данном разделе рассматриваться не будут.
Часто при описании логической структуры реляционной БД сразу же указывается, по каким полям надо индексировать соответствующий файл, а для ключевых полей автоматически предусматривается индексация. Индексация занимает промежуточное положение между логической и физической структурой данных: с одной стороны, она определяет способ упорядочения данных и доступ к ним, а с другой - это способ «логического упорядочения», при котором создаются вспомогательные индексные файлы, что меняет общую структуру БД. Вопросы индексирования будут частично рассмотрены в данном разделе.
Существуют разные методы проектирования логической структуры реляционных баз данных. Среди них есть и строгие математические методы, обычно базирующиеся на теории нормализации. Они имеют очень большое значение в качестве теоретической основы проектирования БД, но в связи с вычислительной сложностью алгоритмов практически не используются в реальном проектировании систем.