Курсовое_проектир методич указания. Методические указания к курсовому проектированию по курсу "Базы данных" Составитель
Скачать 340.75 Kb.
|
2.2. Определение требований к операционной обстановке Для выполнения этого этапа необходимо знать (хотя бы ориентировочно) объём работы организации (т.е. количество проектов и сотрудников), а также иметь представление о характере и интенсивности запросов. Объём внешней памяти, необходимый для функционирования системы, складывается из двух составляющих: память, занимаемая модулями СУБД (ядро, утилиты, вспомогательные программы), и память, отводимая под данные (МД). Для реальных баз данных обычно наиболее существенным является МД. На основе результатов анализа ПрО можно приблизительно оценить объём памяти, требуемой для хранения данных. Примем ориентировочно, что: одновременно осуществляется около десяти проектов, работа над проектом продолжается в среднем год (по 1К на каждый проект); каждый проект состоит в среднем из четырёх этапов (по 0,5К на этап); в компании работают 100 сотрудников (по 0,5К на каждого сотрудника); в выполнении каждого проекта в среднем участвуют 10 сотрудников (по 0,2К); устаревшие данные переводятся в архив (накапливаются в архиве БД). Тогда объём памяти для хранения данных за первый год примерно составит: Mд = 2(10*1+10*4*0,5+100*0,5+(10*10*0,2)) = 200 К, Коэффициент 2 необходим для того, чтобы учесть необходимость выделения памяти под дополнительные структуры (например, индексы). Объём памяти будет увеличиваться ежегодно на столько же при сохранении объёма работы. Требуемый объём оперативной памяти определяется на основании анализа интенсивности запросов и объёма результирующих данных. Для нашей БД требуемый объём памяти мал, поэтому никаких специальных требований к объёму внешней и оперативной памяти компьютера не предъявляется. 2.3. Выбор СУБД и других программных средств Анализ информационных задач показывает, что для реализации требуемых функций подходят почти все СУБД для ПЭВМ (MS Access, Firebird, MySQL и др.). Все они поддерживают реляционную модель данных и предоставляют разнообразные возможности для работы с данными. Объём внешней и оперативной памяти, требующийся для функционирования СУБД, обычно указывается в сопроводительной документации. Для того чтобы в учебном примере не привязываться к конкретной СУБД, выполним описание логической схемы БД на SQL-92. Примечание. При выполнении курсового проекта необходимо обосновать выбор конкретной СУБД для реализации проекта и реализовать базу данных под управлением выбранной СУБД. 2.4. Логическое проектирование реляционной БД 2.4.1. Преобразование ER–диаграммы в схему базы данных База данных создаётся на основании схемы базы данных. Для преобразования ER–диаграммы в схему БД приведём уточнённую ER–диаграмму, содержащую атрибуты сущностей (рис. 3). Рис. 3. Уточнённая ER–диаграмма проектной организации Примечание. Многозначные атрибуты на рисунке выделены подчеркиванием. Преобразование ER–диаграммы в схему БД выполняется путем сопоставления каждой сущности и каждой связи, имеющей атрибуты, отношения (таблицы) БД. Связь типа 1:n (один-ко-многим) между отношениями реализуется через внешний ключ. Ключ вводится для того отношения, к которому осуществляется множественная связь. Внешнему ключу должен соответствовать первичный или уникальный ключ основного (родительского) отношения. Связь участвовать между ПРОЕКТАМИ и СОТРУДНИКАМИ принадлежит к типу n:m (многие-ко-многим). Этот тип связи реализуется через вспомогательное отношение Участие, которое содержит комбинации первичных ключей соответствующих исходных отношений. Более подробно о принципах преобразования ER-диаграммы в схему БД рассказано в [1]. Для схемы БД будем использовать обозначения, представленные на рис. 4. Рис. 4. Обозначения, используемые на схеме базы данных Полученная схема реляционной базы данных (РБД) приведена на рис. 5. Рис. 5. Схема РБД, полученная из ER–диаграммы проектной организации Бинарная связь между отношениями не может быть обязательной для обоих отношений. Такой тип связи означает, что, например, прежде чем добавить новый проект в отношение ПРОЕКТЫ, нужно добавить новую строку в отношение ЭТАПЫ, и наоборот. Поэтому для такой связи необходимо снять с одной стороны условие обязательности. Так как все эти связи будут реализованы с помощью внешнего ключа, снимем условие обязательности связей для отношений, содержащих первичные ключи. Схема на рис. 5 содержит три цикла: "сотрудники–проекты–участие–сотрудники", "отделы–сотрудники–проекты–отделы" и "отделы–сотрудники–участие–проекты–отделы". Цикл допустим только в том случае, если связи, входящие в него, независимы друг от друга. Например, для нашей ПрО справедливо такое правило: сотрудник любого отдела может быть участником (исполнителем или консультантом) проекта любого отдела. Эти связи независимы, поэтому цикл "отделы–сотрудники–участие–проекты–отделы" не будет приводить к нарушению логической целостности данных. С другой стороны, только сотрудник отдела, отвечающего за выполнение проекта, может быть руководителем проекта. Но система не помешает нам назначить руководителем проекта сотрудника любого отдела. При добавлении проекта с внешним ключом Руководитель система проверит только, что такой человек есть в таблице СОТРУДНИКИ. А значение внешних ключей Отдел в таблицах СОТРУДНИКИ и ПРОЕКТЫ сравнивать не будет. Таким образом, остальные циклы могут приводить к возможности нарушения логической целостности данных. Существует несколько подходов для разрешения ситуаций, в которых связи, входящие в цикл, зависят друг от друга. Рассмотрим эту ситуацию в общем случае. Сначала слегка упростим схему: реализуем связь "руководить" через таблицу УЧАСТИЕ – это позволит не отвлекаться на малозначительные детали. Будем считать, что в выполнении проекта могут участвовать только сотрудники, работающие в том же отделе, к которому относится проект (рис. 6,а). При циклической схеме СУБД не сможет гарантировать логическую целостность данных без использования дополнительных средств. Один из способов разрешения таких ситуаций – разорвать цикл, исключив одну из связей (рис. 6,б) или введя промежуточное отношение (рис. 6,в). В нашем случае можно было бы разорвать связь "сотрудники–проекты", если бы каждый сотрудник участвовал во всех проектах своего отдела. Промежуточное отношение можно было бы использовать, если бы существовала общая связь между сущностями, входящими в цикл. Например, если бы каждый сотрудник заключал договор с отделом на выполнение работ в рамках проекта, то отношение ДОГОВОРЫ отражало бы связь между отделом, сотрудником и проектом. Другой способ разрешения цикла заключается в том, что в промежуточное отношение СОТРУДНИКИ – ПРОЕКТЫ, которое реализует связь многие-ко-многим, добавляются (мигрируют) внешние ключи Код отдела (D_id) из отношений СОТРУДНИКИ и ПРОЕКТЫ (рис. 6,г). Эти ключи проверяются на равенство друг другу с помощью соответствующего ограничения целостности (check). Использование этого способа возможно в том случае, когда соответствующие связи (отдел–проект и отдел–сотрудник) имеют тип один-ко-многим и являются обязательными. В тех ситуациях, когда все эти способы непригодны, логическая целостность контролируется программно или вручную. Если принято решение переложить обязанности по контролю за логической целостностью данных на пользователя, то эти обязанности должны быть отражены в документации (в руководстве пользователя). Рис.6. Некоторые способы разрешения циклов в схеме базы данных Примем для нашей ПрО, что руководитель проекта может одновременно выполнять и другие обязанности в этом проекте, чтобы цикл "сотрудники–проекты–участие–сотрудники" не приводил к возможности нарушения логической целостности данных. Зато цикл "отделы–сотрудники (руководители)–проекты–отделы" включает зависимые связи: руководитель проекта назначается из того отдела, который отвечает за выполнение проекта в целом. Здесь можно было бы применить разрыв связи "отделы–проекты" и определять, к какому отделу относится проект через руководителя (по отделу руководителя проекта). Но такой подход в данном случае имеет существенный недостаток. Заменив руководителя проекта сотрудником другого отдела, можно одновременно изменить отдел, отвечающий за выполнение проекта, т.е. объединить в одно действие два независимых изменения, а это недопустимо. Исходя из вышесказанного мы не будем разрывать связь, а примем решение реализовать эту проверку программно. Приложение должно будет при назначении руководителя проекта выдавать список сотрудников того отдела, который отвечает за выполнение данного проекта. Руководителя можно будет выбрать только из этого списка, а не вводить вручную. 2.4.2. Составление реляционных отношений Каждое реляционное отношение соответствует одной сущности (объекту ПрО) и в него вносятся все атрибуты этой сущности. Для каждого отношения определяются первичный ключ и внешние ключи (в соответствии со схемой БД). В том случае, если базовое отношение не имеет потенциальных ключей, вводится суррогатный первичный ключ, который не несёт смысловой нагрузки и служит только для идентификации записей. Отношения приведены в табл. 1-5. Для каждого отношения указаны атрибуты с их внутренним названием, типом и длиной. Типы данных обозначаются так: N – числовой, C – символьный тип фиксированной длины, V – символьный тип переменной длины, D – дата (этот тип имеет стандартную длину, зависящую от СУБД, поэтому она не указывается). О правилах выбора типов данных подробно рассказано в [1]. Потенциальными ключами отношения ОТДЕЛЫ являются атрибуты Аббревиатура и Название отдела. Первый занимает меньше места, поэтому мы выбираем его в качестве первичного ключа. Таблица 1. Схема отношения ОТДЕЛЫ (Departs)
|