Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
ЗАДАНИЕ
Разработать информационную подсистему СНАБЖЕНИЕ МАГАЗИНОВ для оптовой базы. В каждый момент времени должны иметься точные данные о названии товаров, их количестве на складе базы, о названии магазиновполучателей товара, о названии и количестве каждого вида товара в каждом магазине, о заявках магазинов на этот год. Обратить внимание на то, что количество товара измеряется в разных единицах (штуки, литры, килограммы и др.). Требуются следующие операции: включить новый товар в список товаров на складе, скорректировать или удалить ненужный товар из складского списка, включить новый магазин в список магазинов, скорректировать или удалить ненужный магазин из списка, выполнить поступление некоторого товара на склад, просмотреть информацию о товарах на складе, просмотреть информацию о товарах по магазинам, провести инвентаризацию склада и каждого магазина, выдать магазину товар со склада и отпечатать накладную, ввести заявку магазина на текущий год.
ПРИМЕР ПРОЕКТИРОВАНИЯ РЕЛЯЦИОННОЙ БАЗЫ ДАННЫХ
В качестве примера возьмем базу данных проектной организации. Основной вид деятельности такой организации выполнение проектов по договорам с заказчиками.
Анализ предметной области
База данных создаётся для информационного обслуживания руководства организации, руководителей проектов и участников проектов. БД должна содержать данные об отделах организации, сотрудниках и проектах.
В соответствии с предметной областью система строится с учётом следующих особенностей: Каждый сотрудник работает в определённом отделе, в каждом отделе могут работать несколько сотрудников.
Каждый проект относится к определённому отделу, каждый отдел может отвечать за выполнение нескольких проектов.
Каждый сотрудник может принимать участие в выполнении нескольких проектов, над каждым проектом может трудиться несколько сотрудников.
Для каждого проекта назначается руководитель из числа сотрудников того отдела, к которому относится проект.
Каждый проект должен быть выполнен в заданные сроки, каждый проект может состоять из нескольких этапов. Если проект состоит из одного этапа, то сроки его выполнения должны совпадать со сроками выполнения проекта в целом.
Оклад сотрудника зависит от занимаемой должности, за участие в проектах сотрудник получает дополнительное вознаграждение.
Виды участия сотрудников в проектах: руководитель, консультант, исполнитель.
Каждый отдел занимает одно или несколько помещений (комнат), в каждом помещении может быть один или несколько стационарных телефонов.
Примечание. Описания особенностей ПрО должно быть достаточно для того, чтобы создать ERдиаграмму.
Для создания ER-модели необходимо выделить сущности предметной области:
1) Отделы. Атрибуты: название, аббревиатура, комнаты, телефоны.
2) Сотрудники. Атрибуты: ФИО, паспортные данные, дата рождения, пол, ИНН (индивидуальный номер налогоплательщика), номер пенсионного страхового свидетельства, адреса, телефоны (рабочий, домашний, мобильный), данные об образовании (вид образования (высшее, среднеспециальное и т.д.), специальность, номер диплома, дата окончания учебного заведения), должность, оклад, логин (имя пользователя).
Примечания: 1. Логин потребуется нам для назначения дифференцированных прав доступа.
2. В нашем задании не предусмотрена полная информационная поддержка сотрудников отдела кадров, поэтому мы не будем отражать в БД такие сведения как дату поступления сотрудника на работу, его переводы с одной должности на другую, уходы в отпуска и т.п.
3) Проекты. Атрибуты: номер договора; полное название проекта; сокращённое название проекта; дата подписания договора; заказчик; контактные данные заказчика; дата начала проекта; дата завершения проекта; сумма по проекту; дата реальной сдачи проекта; сумма, полученная по проекту на текущую дату.
4) Этапы проекта. Атрибуты: номер по порядку, название, дата начала этапа, дата завершения этапа, форма отчетности, сумма по этапу, дата реальной сдачи этапа; сумма, полученная по этапу на текущую дату.
Исходя из выявленных сущностей, построим ERдиаграмму (рис.). Напомним, что пометки у линий означают степень связи: 1:1, 1:N и N:M.
Рис. ERдиаграмма ПрО «Проектная организация»
Анализ информационных задач и круга пользователей системы
Определим группы пользователей, их основные задачи и запросы к БД:
1. Руководители организации:
Примечание. Архивирование данных в этом пособии подробно не рассматривается. Это сделано для того, чтобы не перегружать схему БД.
2. Руководитель проекта:
3. Сотрудники отдела кадров:
4. Бухгалтеры:
5. Сотрудники участники проектов:
Логическое проектирование реляционной БД
База данных создаётся на основании схемы базы данных. Для преобразования ERдиаграммы в схему БД приведём уточнённую ERдиаграмму, содержащую атрибуты сущностей (рис.).
Рис. Уточнённая ERдиаграмма проектной организации
Примечание. Многозначные атрибуты на рисунке выделены подчеркиванием.
Преобразование ERдиаграммы в схему БД выполняется путем сопоставления каждой сущности и каждой связи, имеющей атрибуты, отношения (таблицы) БД. Связь типа 1:n (один-ко-многим) между отношениями реализуется через внешний ключ. Ключ вводится для того отношения, к которому осуществляется множественная связь. Внешнему ключу должен соответствовать первичный или уникальный ключ основного (родительского) отношения.
Связь участвовать между ПРОЕКТАМИ и СОТРУДНИКАМИ принадлежит к типу n:m (многие-ко-многим). Этот тип связи реализуется через вспомогательное отношение Участие, которое содержит комбинации первичных ключей соответствующих исходных отношений.
Для схемы БД будем использовать обозначения, представленные на рис.
Рис. . Обозначения, используемые на схеме базы данных
Полученная схема реляционной базы данных (РБД) приведена на рис. .
Рис. Схема РБД, полученная из ERдиаграммы проектной организации
Бинарная связь между отношениями не может быть обязательной для обоих отношений. Такой тип связи означает, что, например, прежде чем добавить новый проект в отношение ПРОЕКТЫ, нужно добавить новую строку в отношение ЭТАПЫ, и наоборот. Поэтому для такой связи необходимо снять с одной стороны условие обязательности. Так как все эти связи будут реализованы с помощью внешнего ключа, снимем условие обязательности связей для отношений, содержащих первичные ключи.
Схема на рис. содержит три цикла: "сотрудникипроектыучастиесотрудники", "отделысотрудникипроектыотделы" и "отделысотрудникиучастиепроектыотделы". Цикл допустим только в том случае, если связи, входящие в него, независимы друг от друга. Например, для нашей ПрО справедливо такое правило: сотрудник любого отдела может быть участником (исполнителем или консультантом) проекта любого отдела. Эти связи независимы, поэтому цикл "отделысотрудникиучастиепроектыотделы" не будет приводить к нарушению логической целостности данных.
Составление реляционных отношений
Каждое реляционное отношение соответствует одной сущности (объекту ПрО) и в него вносятся все атрибуты этой сущности. Для каждого отношения определяются первичный ключ и внешние ключи (в соответствии со схемой БД). В том случае, если базовое отношение не имеет потенциальных ключей, вводится суррогатный первичный ключ, который не несёт смысловой нагрузки и служит только для идентификации записей.
Отношения приведены в табл. 1. Для каждого отношения указаны атрибуты с их внутренним названием, типом и длиной. Типы данных обозначаются так: N числовой, C символьный тип фиксированной длины, V символьный тип переменной длины, D дата (этот тип имеет стандартную длину, зависящую от СУБД, поэтому она не указывается).
Потенциальными ключами отношения ОТДЕЛЫ являются атрибуты Аббревиатура и Название отдела. Первый занимает меньше места, поэтому мы выбираем его в качестве первичного ключа.
Таблица 1. Схема отношения ОТДЕЛЫ (Departs)
Содержание поля Имя поля Тип, длина Примечания
Аббревиатура отдела D_ID С(10) первичный ключ
Название отдела D_NAME V(100) обязательное поле
Комнаты D_ROOMS V(20) обязательное многозначное поле
Телефоны D_PHONE V(40) обязательное многозначное поле
Потенциальными ключами отношения СОТРУДНИКИ являются поля Паспортные данные, ИНН и Номер страхового пенсионного свидетельства.
Все они занимают достаточно много места, а паспортные данные кроме того могут меняться. Введём суррогатный первичный ключ Номер сотрудника.
Таблица 2. Схема отношения СОТРУДНИКИ (Employees)
Содержание поля Имя поля Тип, длина Примечания
Номер E_ID N(4) суррогатный первичный ключ
Фамилия, имя, отчество E_NAME V(50) обязательное поле
Дата рождения E_BORN D обязательное поле
Пол E_SEX C(1) обязательное поле, 'м' или 'ж'
Паспортные данные E_PASP V(50) обязательное поле
ИНН E_INN С(12) обязательное уникальное поле
Номер пенсионного стра-
хового свидетельства
E_PENS С(14) обязательное уникальное поле
Отдел E_DEPART C(10) внешний ключ (к Departs)
Должность E_POST V(30) обязательное поле
Оклад E_SAL N(8,2) обязательное поле, > 4500 руб.
Данные об образовании E_EDU V(200) обязательное многозначное поле
Адреса E_ADDR V(100) многозначное поле
Телефоны E_PHONE V(30) многозначное поле
Логин E_LOGIN V(30)
Примечание. Суррогатный первичный ключ также может вводиться в тех случаях, когда потенциальный ключ имеет большой размер (например, длинная символьная строка) или является составным (не менее трёх атрибутов).
В отношении ПРОЕКТЫ три потенциальных ключа: Номер проекта, Название проекта и Сокращённое названиие. Меньше места занимает первый из них, но он малоинформативен. Зато сокращённое название, используемое в качестве внешнего ключа в других таблицах, позволит специалисту идентифицировать проект без необходимости соединения с отношением ПРОЕКТЫ.
Таблица 3. Схема отношения ПРОЕКТЫ (Projects)
Содержание поля Имя поля Тип, длина Примечания
Номер проекта P_ID N(6) обязательное уникальное поле
Название проекта P_TITLE V(100) обязательное поле
Сокращённое название P_ABBR С(10) первичный ключ
Отдел P_DEPART C(10) внешний ключ (к Departs)
Заказчик P_COMPANY V(40) обязательное поле
Данные заказчика P_LINKS V(200) обязательное поле
Руководитель P_CHIEF N(4) внешний ключ (к Employees)
Дата начала проекта P_BEGIN D обязательное поле
Дата окончания проекта P_END D обязательное поле
Реальная дата окончания P_FINISH D
Стоимость проекта P_COST N(10) обязательное поле
Полученная сумма P_SUM N(10) обязательное поле, значение
по умолчанию 0
Потенциальным ключом отношения ЭТАПЫ является комбинация внешнего ключа и номера этапа, а потенциальным ключом вспомогательного отношения УЧАСТИЕ является комбинация первых трёх полей этого отношения.
Можно вообще не вводить первичный ключ для данных отношений, т.к. на них никто не ссылается. Но уникальность этих комбинации является в данном случае ограничением целостности данных, поэтому мы возьмём эти комбинации в качестве первичных ключей соответствующих отношений.
Таблица 4. Схема отношения ЭТАПЫ ПРОЕКТА (Stages)
Содержание поля Имя поля Тип, длина Примечания
Проект S_PRO C(10) внешний ключ
Номер этапа S_NUM N(2) составной первичный ключ
Название этапа S_TITLE V(200) обязательное поле
Дата начала этапа S_BEGIN D обязательное поле
Дата окончания этапа S_END D обязательное поле, > даты начала
Реальная дата окончания S_FINISH D больше даты начала этапа
Стоимость этапа S_COST N(10) обязательное поле
Полученная сумма по
этапу S_SUM N(10) обязательное поле,
значение по умолчанию 0
Форма отчётности S_FORM V(100) обязательное поле
Таблица 5. Схема отношения УЧАСТИЕ (Job)
Содержание поля Имя поля Тип, длина Примечания *
Проект J_PRO C(10) внешний ключ (к Projects)
Сотрудник J_EMP N(4) внешний ключ (к Employees)
Роль J_ROLE V(20) обязательное поле
Доплата J_BONUS N(2)
Нормализация полученных отношений (до 4НФ)
Механизм нормализации подразумевает определённую последовательность преобразования отношений к третьей нормальной форме. Для приведения таблиц к 1НФ требуется составить прямоугольные таблицы (одно значение атрибута одна ячейка таблицы) и разбить сложные атрибуты на простые.
Примечание. В реальных БД сложные атрибуты разбиваются на простые, если:
а) этого требует внешнее представление данных;
б) в запросах поиск может осуществляться по отдельной части атрибута.
Разделим атрибут Фамилия, имя, отчество на два атрибута Фамилия и Имя, отчество, Паспортные данные на Номер паспорта (уникальный), Дата выдачи и Кем выдан, а Данные об образовании на Вид образования, Специальность, Номер диплома и Год окончания учебного заведения.
Многозначные атрибуты Комнаты и Телефоны из отношения ОТДЕЛЫ вынесем в отдельное отношение КОМНАТЫ, а домашние и мобильные телефоны и адреса сотрудников в отношение АДРЕСА-ТЕЛЕФОНЫ. Так как в комнате может не быть телефона, первичный ключ отношения КОМНАТЫ не определен (ПК не может содержать nullзначения), но на этих атрибутах можно определить составной уникальный ключ. В отношении АДРЕСА-ТЕЛЕФОНЫ также нет потенциальных ключей: оставим это отношение без первичного ключа, т.к. на это отношение никто не ссылается. Данные об образовании сотрудников также вынесем в отдельное отношение.
Что касается рабочих телефонов сотрудников, то один из этих номеров основной определяется рабочим местом сотрудника (рассматриваются только стационарные телефоны). Будем хранить этот номер в атрибуте Рабочий телефон. Наличие других номеров зависит от того, есть ли в том же помещении (комнате) другие сотрудники, имеющие стационарные телефоны.
Добавим в отношение СОТРУДНИКИ атрибут Номер комнаты, чтобы дополнительные номера телефонов сотрудника можно было вычислить из других кортежей с таким же номером комнаты.
Связь между отношениями СОТРУДНИКИ и КОМНАТЫ реализуем через составной внешний ключ (Номер комнаты, Рабочий телефон).
Мы также удалим вычислимый атрибут Полученная сумма из отношения ПРОЕКТЫ, т.к. он является суммой значений аналогичного атрибута из отношения ЭТАПЫ ПРОЕКТОВ. Но атрибут Стоимость проекта оставим, т.к. она фигурирует в документации по проекту. А для обеспечения логической целостности данных предусмотрим в приложении проверку того, что сумма по всем этапам совпадает со стоимостью проекта.
2НФ. В нашем случае составные первичные ключи имеют отношения ЭТАПЫ ПРОЕКТА и УЧАСТИЕ. Неключевые атрибуты этих отношений функционально полно зависят от составных первичных ключей.
3НФ. В отношении ПРОЕКТЫ атрибут Данные заказчика зависит от атрибута Заказчик, а не от первичного ключа, поэтому его следует вынести в отдельное отношение ЗАКАЗЧИКИ. Но при этом первичным ключом нового отношения станет атрибут Заказчик, т.е. длинная символьная строка. Целесообразнее перенести в новое отношение атрибуты Заказчик и Данные заказчика и ввести для него суррогатный ПК. Так как с каждым заказчиком может быть связано несколько проектов, связь между отношениями ПРОЕКТЫ и ЗАКАЗЧИКИ будет 1:n и суррогатный ПК станет внешним ключом для отношения ПРОЕКТЫ.
В отношении СОТРУДНИКИ атрибут Оклад зависит от атрибута Должность. Поступим с этой транзитивной зависимостью так же, как в предыдущем случае: создадим отношение ДОЛЖНОСТИ, перенесём в него атрибуты Должность и Оклад, а первичным ключом сделаем название должности. В отношениях СОТРУДНИКИ и ОБРАЗОВАНИЕ атрибуты (Дата выдачи и Кем выдан) и (Номер диплома и Год окончания учебного заведения) зависят не от первичного ключа, а от атрибутов соответственно Номер паспорта и Специальность. Но если мы выделим их в отдельное отношение, то получим
связи типа 1:1. Следовательно, здесь декомпозиция нецелесообразна.
4НФ. Отношение АДРЕСА-ТЕЛЕФОНЫ нарушают 4НФ, т.к. не всякий телефон привязан к конкретному адресу (т.е. мы имеем две многозначных зависимости в одном отношении). Но выделять Телефоны в отдельное отношение не стоит, т.к. эти сведения носят справочный характер и не требуется их автоматическая обработка.
Отношения, полученные после нормализации, приведены в табл.
Таблицы ОБРАЗОВАНИЕ и АДРЕСА-ТЕЛЕФОНЫ не имеют потенциальных ключей, но мы не будем вводить суррогатные первичные ключи, т.к. на эти таблицы никто не ссылается.
Определение дополнительных ограничений целостности
Перечислим ограничения целостности, которые не указаны в табл. 615.
1. Атрибут Вид образования может принимать одно из следующих значений: 'начальное', 'среднее', 'средне-специальное', 'высшее'.
2. Атрибут Роль может принимать одно из двух значений: 'исполнитель' или 'консультант'.
3. В поле Доплата хранится величина доплаты сотруднику за участие в проекте (в процентах к его окладу). Значение поля больше либо равно 0.
4. Нумерация в поле Номер этапа начинается с 1 и является непрерывной для каждого проекта. 5. Дата начала первого этапа проекта должна соответствовать началу проекта в целом, дата завершения последнего этапа должна соответствовать завершению проекта в целом. Этапы не должны пересекаться по времени и между ними не должно быть разрывов.
6. Стоимость проекта должна быть равна сумме стоимостей всех этапов этого проекта. Ограничения 4-6 нельзя реализовать в схеме отношения. В реальных БД подобные ограничения целостности реализуются вручную или программно (через внешнее приложение или специальную процедуру контроля данных триггер).
Рис. Окончательная схема БД проектной организации