Автор работы: Пользователь скрыл имя, 20 Декабря 2012 в 13:51, курсовая работа
Объект исследования и разработки – автоматизированная система по учету доставки почты.
Цель работы – получить навыки разработки информационной и даталогической моделей для конкретной предметной области, освоить основные принципы работы в СУБД Microsoft Visual FoxPro и InterBase.
Разработаны инфологическая и даталогическая модели базы данных. На их основе разработана и реализована база данных для персональной СУБД Visual FoxPro и серверной SQL-ориентированной СУБД InterBase.
Для поддержки ссылочной целостности в Visual FoxPro можно выбрать следующие правила:
а) при изменении в родительской таблице значения ключа, использующегося для связи (Rules for Updating):
- Cascade. При изменении значений полей ключа в родительской таблице автоматически осуществляется каскадное изменение всех соответствующих значений в дочерней таблице.
- Restrict. Запрещается изменять значения полей ключа в родительской таблице, если в дочерней таблице имеется хотя бы одна запись, содержащая ссылку на изменяемую запись.
- Ignore. Разрешается изменять значения полей ключа в родительской таблице, независимо от существования связанных записей в дочерней таблице. Целостность связей в этом случае не поддерживается.
б) при удалении записи в родительской таблице (Rules for Deleting):
- Cascade. При удалении записи в родительской таблице автоматически осуществляется каскадное удаление всех записей из дочерней таблицы, связанных с удаляемой записью.
- Restrict. Запрещается удалять записи в родительской таблице, если в дочерней таблице имеется хотя бы одна запись, содержащая ссылку на удаляемую запись.
- Ignore. Разрешается удалять записи в родительской таблице независимо от существования связанных записей в дочерней таблице. Целостность связей в этом случае не поддерживается.
в) при добавлении новой записи в дочернюю таблицу или редактировании в дочерней таблице значения индексного выражения, использующегося для связи (Rules for Inserting):
- Restrict. Запрещается принимать запись, если значение индексного выражения связи дочерней таблицы не соответствует одной из записей в родительской таблице.
- Ignore. Разрешаются любые значения индексного выражения связи в дочерней таблице. Целостность связей в этом случае не поддерживается.
В таблице 4.4 приведены данные, задающие правила поддержки ограничений ссылочной целостности.
Таблица 4.4 – Правила поддержки ссылочной целостности
Родительская таблица |
Дочерняя таблица |
Изменение в родитель- -ской таблице |
Удаление в родитель- -ской таблице |
Добавление и изменение в дочерней таблице |
Индекс в родительской таблице |
Индекс в дочерней таблице |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
usluga |
tarif |
Cascade |
Restrict |
Restrict |
kod_usl |
kod_usl |
tarif |
pocht_otpr |
Cascade |
Restrict |
Restrict |
kod_tarif |
kod_tarif |
otpravitel |
pocht_otpr |
Cascade |
Restrict |
Restrict |
num_otpravitel |
num_otpravitel |
poluchatel |
pocht_otpr |
Cascade |
Restrict |
Restrict |
num_poluchatel |
num_poluchatel |
spr_mest_op |
otsl_pocht_otpr |
Cascade |
Restrict |
Restrict |
kod_ops |
kod_ops |
pocht_otpr |
otsl_pocht_otpr |
Cascade |
Restrict |
Restrict |
pocht_id |
pocht_id |
Для всех таблиц базы данных выбрана одна политика поддержки ссылочной целостности: при модификации записи в родительской сущности происходит каскадное изменение в дочерней. Удаление записи из родительской сущности запрещается, если в дочерней сущности есть ссылки на эту запись. Добавление записи в дочернюю сущность запрещается, если ее идентификатор не соответствует ни одному из родительской сущности.
Это связано с тем, что данные, хранимые в данной базе данных, являются важными с точки зрения их длительного хранения, так как они будут использованы бухгалтерией (для отчетности) и сотрудниками организации в случае повторного обращения заявителя (чтобы не заполнять данные каждый раз, а только при необходимости изменить или добавить).
4.2 Физическое проектирование для СУБД InterBase
Скрипт, реализующий спроектированную БД, может быть представлен с комментариями в следующем виде:
CREATE DATABASE "d:\KR.gdb"
USER "SYSDBA" PASSWORD "masterkey";
/*****************************
/* Таблица «usluga»
/* по набору имеющихся
услуг по доставке почты
/*****************************
CREATE TABLE usluga (
/* код услуги */
kod_usl INTEGER NOT NULL PRIMARY KEY,
/* название услуги */
nazv_usl CHAR(30) NOT NULL,
/* описание услуги */
opisanie_u VARCHAR(5000) NOT NULL
);
/*****************************
/* Таблица «tarif»
/* по набору имеющихся
тарифов, входящих в услугу
/*****************************
CREATE TABLE tarif (
/* код тарифа */
kod_tarif INTEGER NOT NULL PRIMARY KEY,
/* название тарифа */
nazv_t CHAR(30) NOT NULL,
/* название гороlа */
gorod CHAR(20) NOT NULL,
/* срок доставки */
srok_dost CHAR(10) NOT NULL,
/* тип отправления */
tip_otpravl CHAR(20) NOT NULL,
/* стоимость */
stoimost NUMERIC(10,2) NOT NULL,
/* код услуги */
kod_usl INTEGER NOT NULL REFERENCES usluga
ON DELETE NO ACTION ON UPDATE CASCADE
);
/*****************************
/* Таблица «otpravitel » предназначается для хранения общих данных*/
/* по набору имеющихся
отправителей почты
/*****************************
CREATE TABLE otpravitel (
/* номер отправителя */
num_otpravitel NUMERIC(10,0) NOT NULL PRIMARY KEY,
/* Ф.И.О. отправителя */
fio_otpr CHAR(30) NOT NULL,
/* адрес отправителя */
adres_otpr VARCHAR(5000) NOT NULL,
/* индекс отправителя */
idx_otpr NUMERIC(6,0) NOT NULL
);
/*****************************
/* Таблица «poluchatel»
/* по набору имеющихся
получателей почты
/*****************************
CREATE TABLE poluchatel (
/* номер получателя */
num_poluch NUMERIC(10,0) NOT NULL PRIMARY KEY,
/* Ф.И.О. получателя */
fio_poluch CHAR(30) NOT NULL,
/* адрес получателя */
adres_poluch VARCHAR(5000) NOT NULL,
/* индекс получателя */
idx_poluch NUMERIC(6,0) NOT NULL
);
/*****************************
/* Таблица «pocht_otpr»
/* по набору имеющихся
поточвых отправлений
/*****************************
CREATE TABLE pocht_otpr (
/* почтовый идентификатор */
pocht_id NUMERIC(14,0) NOT NULL PRIMARY KEY,
/* вес */
ves NUMERIC(10,0) NOT NULL,
/* дата отправки */
date_otpr DATE NOT NULL,
/* объявленная ценность */
cennost NUMERIC(10,0) NOT NULL,
/* номер отправителя */
num_otpravitel NUMERIC(10,0) NOT NULL REFERENCES otpravitel
ON DELETE NO ACTION ON UPDATE CASCADE,
/* номер получателя */
num_poluch NUMERIC(10,0) NOT NULL REFERENCES poluchatel
ON DELETE NO ACTION ON UPDATE CASCADE,
/* код тарифа */
kod_tarif INTEGER NOT NULL REFERENCES tarif
ON DELETE NO ACTION ON UPDATE CASCADE
);
/*****************************
/* Таблица «spr_mest_op»
/* по набору имеющихся ОПС */
/*****************************
CREATE TABLE spr_mest_op (
/* код ОПС */
kod_ops NUMERIC(10,0) NOT NULL PRIMARY KEY,
/* название ОПС */
nazv_ops CHAR(30) NOT NULL,
/* тип ОПС */
tip_ops CHAR(30) NOT NULL,
/* телефон ОПС */
telephon NUMERIC(10,0),
/* режим работы ОПС */
rejim_rab CHAR(50),
/* индекс ОПС */
idx_ops NUMERIC(6,0) NOT NULL,
/* адрес ОПС */
adres_ops CHAR(50) NOT NULL
);
/*****************************
/* Таблица «otsl_pocht_otpr»
/* об отслеживании почтовых отправлений */
/*****************************
CREATE TABLE otsl_pocht_otpr (
/* операция */
operachiya CHAR(20) NOT NULL,
/* атрибут операции */
atribut_op CHAR(10) NOT NULL,
/* дата проведения операции */
date_op DATE NOT NULL,
/* код ОПС */
kod_ops NUMERIC(10,0) NOT NULL REFERENCES spr_mest_op
ON DELETE NO ACTION ON UPDATE CASCADE,
/* почтовый идентификатор */
pocht_id NUMERIC(14,0) NOT NULL REFERENCES pocht_otpr
ON DELETE NO ACTION ON UPDATE CASCADE,
UNIQUE (operachiya, atribut_op, date_op, kod_ops, pocht_id)
);
COMMIT;
Информация о работе Разработка базы данных по доставке почты