Разработка базы данных по доставке почты
Введение.
Настоящая курсовая работа (далее КР) посвящена вопросам разработки базы данных (далее БД) по доставке почты.
Основными проблемами данной предметной области является:
- большой объём информации (информация о почтовых отправлениях, отправителях, получателях, услугах, тарифах и т.д.), который храниться в частной организации по доставке почты;
- не удобства при работе с хранимыми документами (поиск, снятие копий, резервное копирование).
Актуальность темы КР обусловлена тем, что в настоящее время наблюдается активное использование фирмами и другими учреждениями информационного обеспечения и в частности БД и систем управления ими (далее СУБД).
Большое разнообразие СУБД требует различные подходы к процессу разработки и реализации БД. В КР для реализации БД будем использовать следующие СУБД: Visual FoxPro и InterBase.
Основными проблемами при разработке и реализации БД являлось отсутствие:
- знания предметной области;
- навыков работы с Visual FoxPro и InterBase.
Целью данной КР является формирование навыков разработки БД по доставке почты и реализации его в СУБД.
Для достижения поставленной цели требуется решит следующие задачи:
- описание предметной области;
- инфологическое проектирование;
- даталогическое проектирование;
- реализация БД для СУБД Visual FoxPro;
5) Реализация БД для СУБД InterBase.
1 Описание предметной области
Организация занимается доставкой почты и имеет набор услуг (стандартная доставка писем и грузов по России, срочная доставка посылок и документов по России и др.). Каждая услуга включает в себя несколько тарифов. Описание тарифа состоит из следующих пунктов: название города для доставки, срок доставки в днях, тип отправления (документы, посылка, бандероль) и цена.
Для отправления почты необходимо указать информацию об отправителе и получателе, а именно Ф.И.О., адрес и почтовый индекс.
О каждом почтовом отправлении так же содержится следующая информация: вес, дата отправления, объявленная ценность и почтовый идентификатор, который состоит из 14-ти символов и является уникальным среди всех почтовых отправлений.
Организация бесплатно предоставляет услугу по отслеживанию почтовых отправлений. Для отслеживания отправлений хранится следующая информация: название операции (приём, обработка, экспорт и др.), атрибут операции (прибытие в место международного обмена, вручение адресату), дата проведения операции, ОПС (отделение почтовой службы), тип объекта почтовой связи, номер телефона, режим работы и адрес.
В БД должны содержаться сведения об отправителе, получателе, почтовом отправлении, услугах и тарифах, и сведения для отслеживания отправлений.
2 Инфологическое проектирование
2.1 Построение инфологической модели
Как уже отмечалось ранее, инфологическая модель строится на основе приведенной предметной области.
Названия сущностей возьмем такими, чтоб они совпадали с названиями объектов.
В результате получим ER-модель, изображенную на рисунке 2.1
Рисунок 2.1 – Полная ER-диаграмма
2.2 Разработка текстового описания
2.2.1 Определение сущностей и их свойств
При анализе определенной выше предметной области можно выделить набор сущностей проектируемой базы данных.
Сущность «Почтовое отправление» определяет данные о почтовом отправлении и содержит свойства:
а) Почтовый идентификатор. Свойство предназначено для хранения уникального номера почтового отправления, уникально на всем множестве почтовых отправлений, обязательно для заполнения;
б) Вес. Свойство предназначено для хранения информации о массе почтового отправления, единицами измерения массы в данном случае являются килограммы (округление до трех знаков после запятой); свойство обязательно для заполнения;
в) Дата отправления. Свойство предназначено для хранения даты отправления, датой отправления считается день приема посылки; свойство также является обязательным для заполнения;
г) Ценность. Свойство предназначено для хранения информации об объявленной ценности почтового отправления в рублях, обязательно для заполнения.
Сущность «Отправитель» содержит следующие свойства:
а) Номер отправителя. Свойство предназначено для хранения уникального номера отправителя, уникально на всем множестве отправителей, обязательно для заполнения;
б) Ф.И.О. Свойство содержит информацию о фамилии, имени и отчестве отправителя;
в) Адрес. Свойство предназначено для хранения полного адреса отправления; свойство также является обязательным для заполнения;
г) Индекс. Свойство предназначено для хранения почтового индекса, обязательно для заполнения.
Сущность «Получатель» содержит следующие свойства:
а) Номер получателя. Свойство предназначено для хранения уникального номера получателя, уникально на всем множестве получателей, обязательно для заполнения;
б) Ф.И.О. Свойство содержит информацию о фамилии, имени и отчестве получателя;
в) Адрес. Свойство предназначено для хранения полного адреса получателя; свойство также является обязательным для заполнения;
г) Индекс. Свойство предназначено для хранения почтового индекса, обязательно для заполнения.
Сущность «Услуга» определяет общие данные о предоставляемой услуге по доставке почтовых отправлений и содержит свойства:
а) Название услуги. Свойство предназначено для хранения текстового наименования услуги, обязательно для заполнения;
б) Код услуги. Свойство предназначено для хранения уникального номера услуги, уникально на всем множестве услуг, обязательно для заполнения;
в) Описание услуги. Свойство предназначено для хранения текстового описания услуги, обязательно для заполнения.
Сущность «Тариф» определяет общие данные о предоставляемой услуге по доставке почтовых отправлений и содержит свойства:
а) Название тарифа. Свойство предназначено для хранения текстового наименования тарифа, обязательно для заполнения;
б) Код тарифа. Свойство предназначено для хранения уникального номера тарифа, уникально на всем множестве тарифов, обязательно для заполнения;
в) Название города. Свойство обязательно для заполнения;
г) Срок доставки. Свойство предназначено для хранения срока доставки почтового отправления, срок задается в днях; обязательно для заполнения;
д) Тип отправления. Свойство предназначено для хранения типа отправления (посылка, бандероль, документы), обязательно для заполнения;
е) Цена. Свойство предназначено для хранения информации о стоимости тарифа, обязательно для заполнения.
Сущность «Справочник мест проведения операций» определяет общие данные о предоставляемой услуге по доставке почтовых отправлений и содержит свойства:
а) Название ОПС. Свойство предназначено для хранения текстового наименования ОПС, обязательно для заполнения;
б) Код ОПС. Свойство предназначено для хранения уникального номера ОПС, уникально на всем множестве ОПС, обязательно для заполнения;
в) Тип ОПС. Свойство обязательно для заполнения;
г) Адрес. Свойство предназначено для хранения полного адреса ОПС; свойство также является обязательным для заполнения;
д) Индекс. Свойство предназначено для хранения почтового индекса, обязательно для заполнения;
е) Телефон. Свойство является необязательным;
ж) Режим работы. Свойство является необязательным;
2.2.2 Установление связей, определение ассоциаций
Рассмотрим сформированные объекты на предмет выявления связей различной природы между ними.
Связь «Тариф – Почтовое отправление» один ко многим, необязательная с главной стороны. Обозначает, что для одного конкретного почтового отправления обязательно нужно выбрать тариф и, причем только один. На один тариф может приходиться одно или несколько почтовых отправлений, или не приходиться вовсе.
Связь «Услуга – Тариф» один ко многим, обязательная с обеих сторон. Обозначает, что одна конкретная позиция тарифов обязательно относится к услуге и, причем только к одной. Одна услуга должна объединять в себе один или несколько тарифов.
Связь «Отправитель – Почтовое отправление» один ко многим, необязательная с главной стороны. Обозначает, что одно конкретное почтовое отправление обязательно имеет отправителя и, причем только одного. Один отправитель может отправлять одно или несколько почтовых отправлений, или не отправлять вовсе.
Связь «Получатель – Почтовое отправление» один ко многим, необязательная с главной стороны. Обозначает, что одно конкретное почтовое отправление обязательно предназначено получателю и, причем только одному. Один получатель может получать одно или несколько почтовых отправлений, или не получать вовсе.
Связь «Почтовое отправление – Отслеживание почтовых отправлений» один ко многим, необязательная с главной стороны. Обозначает, что одна позиция отслеживания почтовых отправлений обязательно относиться к почтовому отправлению и, причем только к одному. По одному почтовому отправлению может проводиться одна или несколько операций, или не проводиться вовсе.
Связь «Справочник мест проведения операций – Отслеживание почтовых отправлений» один ко многим, необязательная с главной стороны. Обозначает, что операция над почтовым отправлением в конкретный день, месяц и год обязательно проводится в конкретном ОПС и, причем только в одном. В одном ОПС может проводиться одна или несколько операций над почтовыми отправлениями, или не проводиться вовсе.
Ассоциация «Отслеживание почтовых отправлений» связывает сущность «Почтовое отправление» и «Справочник мест проведения операций», и предназначена для занесения данных об операциях и датах по почтовому отправлению и включает следующие свойства:
а) Операция. Свойство предназначено для хранения текстового наименования операции, обязательно для заполнения;
б) Атрибут операции. Свойство обязательно для заполнения;
в) Дата. Свойство предназначено для хранения даты проведения операции по почтовому отправлению, обязательно для заполнения.
2.2.3 Описание ограничений целостности
Укажем требования по способу поддержки целостности связей. При модификации записи в родительской сущности происходит каскадное изменение в дочерней. Удаление записи из родительской сущности запрещается, если в дочерней сущности есть ссылки на эту запись. Добавление записи в дочернюю сущность запрещается, если ее идентификатор не соответствует ни одному из родительской сущности.
2.2.4 Описание информационных запросов
Сформулируем информационные запросы, которые будут предъявляться при работе с БД. Таких запросов можно привести достаточно большое количество. Приведём основные: вывести информацию о тарифах по конкретной услуге, вывести список почтовых отправлений какого-либо получателя, вывести список услуг т.д.
3 Даталогическое моделирование
3.1 Модификация инфологической модели
Для модификации инфологической модели, полученной в пункте 2.1, необходимо заменить ассоциации сущностями, условные свойства на безусловные.
После проведения описанных преобразований получим инфологическую модель пригодную для прямого преобразования в реляционную логическую модель. Полученная модель приведена на рисунке 3.1.
Рисунок 3.1 – Модифицированная инфологическая модель
3.2 Построение логической модели
На основе инфологической модели разрабатывается логическая модель реляционного типа.
Для получения из инфологической модели даталогической выполним:
- преобразование всех сущностей в одноименные отношения, в которых атрибуты сущностей будут являться заголовком отношения, а идентификаторы – первичными ключами;
- добавление идентификаторов родительских сущностей, для поддержки связи.
Полученная даталогическая модель приведена на рисунке 3.2.
Рисунок 3.2 – Даталогическая модель
3.3 Нормализация логической модели
Все отношения полученной реляционной модели удовлетворяют требованиям третьей нормальной формы, т.к. выполняются требования атомарности значений и уникальности кортежей, все не ключевые атрибуты зависят от первичного ключа и отсутствуют транзитивные зависимости.
3.4 Описание логической модели
3.4.1 Описание атрибутов
Все атрибуты, их описание и тип, приведем в виде таблиц.
Таблица 3.1 – Почтовое отправление
Содержание атрибутов |
Тип |
Уникальность |
Обязательность для заполнения |
Прочие ограничения |
Почтовый идентификатор |
Числовой |
+ |
+ |
|
Вес |
Числовой |
- |
+ |
|
Дата отправления |
Дата |
- |
+ |
|
Ценность |
Числовой |
- |
+ |
|
Номер отправителя |
Числовой |
- |
+ |
|
Номер получателя |
Числовой |
- |
+ |
|
Код тарифа |
Целый |
- |
+ |
Таблица 3.2 – Отправитель
Содержание атрибутов |
Тип |
Уникальность |
Обязательность для заполнения |
Прочие ограничения |
Номер отправителя |
Числовой |
+ |
+ |
|
Ф.И.О. |
Текстовый |
- |
+ |
|
Адрес |
Текстовый |
- |
+ |
|
Индекс |
Числовой |
- |
+ |
Таблица 3.3 – Получатель
Содержание атрибутов |
Тип |
Уникальность |
Обязательность для заполнения |
Прочие ограничения |
Номер получателя |
Числовой |
+ |
+ |
|
Ф.И.О. |
Текстовый |
- |
+ |
|
Адрес |
Текстовый |
- |
+ |
|
Индекс |
Числовой |
- |
+ |
Таблица 3.4 – Тариф
Содержание атрибутов |
Тип |
Уникальность |
Обязательность для заполнения |
Прочие ограничения |
Код тарифа |
Числовой |
+ |
+ |
|
Название тарифа |
Текстовый |
- |
+ |
|
Название города |
Текстовый |
- |
+ |
|
Срок доставки |
Текстовый |
- |
+ |
|
Тип отправления |
Текстовый |
- |
+ |
|
Цена |
Числовой |
- |
+ |
|
Код услуги |
Целый |
- |
+ |
Таблица 3.5 – Услуга
Содержание атрибутов |
Тип |
Уникальность |
Обязательность для заполнения |
Прочие ограничения |
Код услуги |
Целый |
+ |
+ |
|
Название услуги |
Текстовый |
- |
+ |
|
Описание услуги |
Текстовый |
- |
+ |
Таблица 3.6 – Отслеживание почтовых отправлений
Содержание атрибутов |
Тип |
Уникальность |
Обязательность для заполнения |
Прочие ограничения |
Операция |
Текстовый |
- |
+ |
|
Атрибут операции |
Текстовый |
- |
+ |
|
Дата |
Дата |
- |
+ |
|
Код ОПС |
Числовой |
- |
+ |
|
Почтовый идентификатор |
Числовой |
- |
+ |
Таблица 3.7 – Справочник мест проведения операций
Содержание атрибутов |
Тип |
Уникальность |
Обязательность для заполнения |
Прочие ограничения |
Код ОПС |
Целый |
+ |
+ |
|
Название ОПС |
Текстовый |
- |
+ |
|
Тип ОПС |
Текстовый |
- |
+ |
|
Телефон |
Числовой |
- |
- |
|
Режим работы |
Текстовый |
- |
- |
|
Индекс |
Числовой |
- |
+ |
|
Адрес |
Текстовый |
- |
+ |
3.4.2 Правила поддержки ссылочной целостности для связей
Ссылочная целостность требует правильности значений внешнего ключа (совпадение со значением первичного ключа или пустое значение). В правилах поддержки ссылочной целостности задается реакция на попытки нарушения этих требований. Основными реакциями являются:
- Запрет. Операция добавления, изменения, удаления запрещается, если приведет к нарушению ссылочной целостности
- Каскад. При изменении (удалении) в родительском отношении, приводящем к нарушению ссылочной целостности, выполняются аналогичные изменения (удаления) в дочернем отношении
- Сброс. Значения внешнего ключа, переставшие соответствовать значениям первичного ключа родительского отношения, очищаются (сбрасываются в NULL)
- Переключение. Значения внешнего ключа, переставшие соответствовать значениям первичного ключа родительского отношения, заменяются на задаваемые указанным образом допустимые значения.
Зададим способ поддержки обязательных связей в виде таблицы.
Таблица 3.8 – Способ поддержки обязательных связей
Родительская сущность |
Дочерняя сущность |
Тип действия при | ||
модификации записи в родительской сущности |
удалении записи из родительской сущности |
добавлении записи в дочернюю сущность | ||
1 |
2 |
3 |
4 |
5 |
Услуга |
Тариф |
каскадное изменение в дочерней сущности |
Запрещается удалять записи в родительской таблице, если в дочерней таблице имеется хотя бы одна запись, содержащая ссылку на удаляемую запись |
запрещается новая запись, если ее идентификатор не соответствует ни одному из родительской |
|
Тариф |
Почтовое отправление |
каскадное изменение в дочерней сущности |
Запрещается удалять записи в родительской таблице, если в дочерней таблице имеется хотя бы одна запись, содержащая ссылку на удаляемую запись |
запрещается новая запись, если ее идентификатор не соответствует ни одному из родительской |
|
Почтовое отправление |
Отслеживание почтовых отправлений |
каскадное изменение в дочерней сущности |
Запрещается удалять записи в родительской таблице, если в дочерней таблице имеется хотя бы одна запись, содержащая ссылку на удаляемую запись |
запрещается новая запись, если ее идентификатор не соответствует ни одному из родительской |
|
Отправитель |
Почтовое отправление |
каскадное изменение в дочерней сущности |
Запрещается удалять записи в родительской таблице, если в дочерней таблице имеется хотя бы одна запись, содержащая ссылку на удаляемую запись |
запрещается новая запись, если ее идентификатор не соответствует ни одному из родительской |
Продолжение Таблицы 3.8 – Способ поддержки обязательных связей
1 |
2 |
3 |
4 |
5 |
|
Получатель |
Почтовое отправление |
каскадное изменение в дочерней сущности |
Запрещается удалять записи в родительской таблице, если в дочерней таблице имеется хотя бы одна запись, содержащая ссылку на удаляемую запись |
запрещается новая запись, если ее идентификатор не соответствует ни одному из родительской |
|
Справочник мест проведения операции |
Отслеживание почтовых отправлений |
каскадное изменение в дочерней сущности |
Запрещается удалять записи в родительской таблице, если в дочерней таблице имеется хотя бы одна запись, содержащая ссылку на удаляемую запись |
запрещается новая запись, если ее идентификатор не соответствует ни одному из родительской |
4 Физическое проектирование
4.1 Физическое проектирование для СУБД Visual FoxPro
Графическое представление БД Visual FoxPro (распечатка окна Конструктора БД) представлено на рисунке 4.1.
Рисунок 4.1 – Графическое представление БД в Visual FoxPro
В таблице 4.1 приведены данные, введенные для описания полей созданных таблиц.
Таблица 4.1 – Описание полей таблиц
Таблица |
Описания полей | ||
Name |
Type |
Width | |
1 |
2 |
3 |
4 |
|
pocht_otpr (Почтовое отправление |
pocht_id |
Numeric |
14 |
ves |
Numeric |
10 | |
date_otpr |
Date |
8 | |
cennost |
Numeric |
10 | |
num_otpravitel |
Numeric |
10 | |
num_poluchatel |
Numeric |
10 | |
kod_tarif |
Integer |
4 | |
|
otpravitel (Отправитель) |
num_otpravitel |
Numeric |
10 |
fio_otpr |
Character |
50 | |
adres_otpr |
Character |
50 | |
idx_otpr |
Numeric |
6 | |
|
poluchatel (Получатель) |
num_poluch |
Numeric |
10 |
fio_poluch |
Character |
5 | |
adres_poluch |
Character |
50 | |
idx_poluch |
Numeric |
6 | |
usluga (Услуга) |
kod_usl |
Integer |
4 |
nazv_usl |
Character |
50 | |
opisanie_u |
Memo |
||
|
tarif (Тариф) |
kod_tarif |
Integer |
4 |
nazv_t |
Character |
30 | |
gorod |
Character |
20 | |
srok_dost |
Character |
10 | |
tip_otpravl |
Character |
20 | |
stoimost |
Numeric |
10 | |
kod_usl |
Integer |
4 | |
otsl_pocht_otpr (Отслеживание почтовых |
operachiya |
Character |
20 |
atribut_op |
Character |
10 | |
date_op |
Date |
8 | |
kod_ops |
Numeric |
10 | |
pocht_id |
Numeric |
14 | |
|
spr_mest_op (Справочник мест проведения операций) |
kod_ops |
Numeric |
10 |
nazv_ops |
Character |
30 | |
tip_ops |
Character |
10 | |
telephon |
Numeric |
10 | |
rejim_rab |
Character |
50 | |
idx_ops |
Numeric |
6 | |
adres_ops |
Character |
50 | |
В таблице 4.2 приведены данные, задающие индексы для создаваемых таблиц.
Таблица 4.2 – Описание индексов таблиц
Таблица |
Описания индексов | ||
Name |
Type |
Expression | |
|
pocht_otpr |
pocht_id |
Primary |
pocht_id |
date_otpr |
Regular |
date_otpr | |
num_poluchatel |
Regular |
num_poluchatel | |
num_otpravitel |
Regular |
num_otpravitel | |
kod_tarif |
Regular |
kod_tarif | |
otpravitel |
num_otpravitel |
Primary |
num_otpravitel |
poluchatel |
num_poluchatel |
Primary |
num_poluchatel |
usluga |
kod_usl |
Primary |
kod_usl |
spr_mest_op |
kod_ops |
Primary |
kod_ops |
otsl_pocht_otpr |
pocht_id |
Regular |
pocht_id |
kod_ops |
Regular |
kod_ops | |
tarif |
kod_usl |
Regular |
kod_usl |
kod_tarif |
Primary |
kod_tarif | |
В таблице 4.3 приведены данные, описывающие реализованные ограничения целостности данных в таблицах.
Таблица 4.3 – Описание ограничений целостности данных в таблицах
Таблица |
Содержание ограничения |
Вкладка задания ограничения |
Задание ограничения |
1 |
2 |
3 |
4 |
|
pocht_otpr |
Наличие всех данных обязательно |
Fields |
Rule: .NOT. empty
Message: "Введите данные" |
|
otpravitel |
Наличие всех данных обязательно |
Fields |
Rule: .NOT. empty
Message: "Введите данные" |
|
poluchatel |
Наличие всех данных обязательно |
Fields |
Rule: .NOT. empty
Message: "Введите данные" |
|
usluga |
Наличие всех данных обязательно |
Fields |
Rule: .NOT. empty
Message: "Введите данные" |
|
spr_mest_op |
Наличие всех данных обязательно, кроме номера телефона и режима работы |
Fields |
Rule: .NOT. empty
Message: "Введите данные" |
|
otsl_pocht_otpr |
Наличие всех данных обязательно |
Fields |
Rule: .NOT. empty
Message: "Введите данные" |
|
tarif |
Наличие всех данных обязательно |
Fields |
Rule: .NOT. empty
Message: "Введите данные" |