
- •Курсовой проект на тему
- •Дисциплина
- •Введение
- •1. Постановка задачи
- •1.1 Описание предметной области
- •1.2 Функциональные требования
- •2.Физическая модель
- •2.1. Фрагмент бд "Учет водоисточников"
- •2.2. Фрагмент бд "Учет неисправностей"
- •2.3. Фрагмент бд "Учет отправленных писем"
- •2.4.Используемая субд
- •3.Обеспечение целостности бд
- •4. Создание таблиц и ограничений.
- •5.Хранимые процедуры
- •6. Выходные формы
- •7. Обеспечение безопасности
- •8. Оптимизация
- •9. Тестирование
- •Заключение
- •Библиографический список
- •Приложение 6 – создание ограничений на таблицы
- •Приложение 7 –процедуры добавления
- •Приложение 8 – процедуры обновления
- •Приложение 9 – процедуры удаления
- •Приложение 10 – триггеры
- •Приложение 11 – отчетные формы
- •Приложение 12 – безопасность Роли
- •Праванароли
- •Пользователи
- •Добавлениепользователейкролям
- •Приложение 13 – оптимизация
- •Приложение 14 – тестирование
4. Создание таблиц и ограничений.
На основе спецификаций сущностей и словаря данных, сформулированных в пятом семестре, были созданы таблицы, в которых находятся описания всех атрибутов сущностей и ограничения, накладываемые на эти атрибуты.
Для удобства запуска базы данных сначала были созданы таблицы без ограничений (приложение 5), затем с помощью функции ALTER были наложены все необходимые ограничения (приложение 6).
Таблицы базы данных именуются в соответствии с их содержимым и на английском языке, т.к. он является интернациональным.Именование процедур и функций осуществляется по следующему шаблону: добавление <имя таблицы>INCERT, удаление-<имя таблицы>Delete, обновление -<имя таблицы>Update.
Таблица Гидрант (Hydrant) |
|||
Атрибут |
Наименование атрибута |
Тип |
Ограничение |
Сеть |
Net |
BIT |
NOT NULL |
Диаметр |
Caliber |
INT |
NOT NULL |
ID водоисчтоника |
ID WaterSource |
INT |
NOT NULL FOREIGN KEY |
CREATE TABLE Hydrant --(Описаниегидранта)
(Net BIT NOT NULL,
Caliber INT NOT NULL,
IDWaterSource INT NOT NULL,
);
Для атрибута Сеть был выбран тип данных BIT, так как существует два типа
сети: кольцевая (0)итупиковая (1).
ALTERTABLEHydrant
WITH CHECK
ADD
CONSTRAINT HydrantCaliber CHECK (Caliber>0),
CONSTRAINT HydrantWaterSourceForeign FOREIGN KEY (IDWaterSource) REFERENCES WaterSource
ONUPDATECASCADE;
Таблица Водоем (Pond) |
|||
Атрибут |
Наименование атрибута |
Тип |
Ограничение |
Объем |
Size |
INT |
NOT NULL |
ID водоисчтоника |
ID WaterSource |
INT |
NOT NULL FOREIGN KEY |
CREATE TABLE Pond --(Описание водоема)
(Size INT NOT NULL,
IDWaterSource INT NOT NULL);
ALTER TABLE Pond
WITH CHECK ADD
CONSTRAINT PondSize CHECK (Size>0),
CONSTRAINT PondWaterSourceForeign FOREIGN KEY (IDWaterSource) REFERENCES WaterSource ON UPDATE CASCADE;
Таблица Улица (Street) |
|||
Атрибут |
Наименование атрибута |
Тип |
Ограничение |
ID Улицы |
IDStreet |
INT |
NOT NULL PRIMARY KEY |
Название улицы |
NameStreet |
VARCHAR(40) |
NOT NULL UNIQUE |
В таблице «Улица»был выделен уникальный ключ «ID Улицы».
Таблица «Улица» является справочником, поэтому на название улиц было наложено ограничение уникальности, чтобы исключить дублирование записей в таблице.
CREATE TABLE Street --(Описаниеулицы)
(IDStreet INT IDENTITY NOT NULL,
NameStreet VARCHAR(40) NOT NULL);
ALTER TABLE Street
WITH CHECK ADD
CONSTRAINT StreetPrimary PRIMARY KEY (IDStreet),
CONSTRAINT NameStreetUnique UNIQUE(NameStreet);
Таблица Вид организации (TypeOfOrganization) |
|||
Атрибут |
Наименование атрибута |
Тип |
Ограничение |
ID Вида организации |
IDTypeOfOrganization |
INT |
NOT NULL PRIMARY KEY |
Название вида организации |
NameTypeOfOrganization |
VARCHAR(50) |
NOT NULL |
CREATE TABLE TypeOfOrganization --(Вид организации)
(IDTypeOfOrganization INT IDENTITY NOT NULL,
NameTypeOfOrganization VARCHAR(50) NOT NULL);
ALTER TABLE TypeOfOrganization
WITH CHECK ADD
CONSTRAINT IDTypeOfOrganizationPrimary PRIMARY KEY (IDTypeOfOrganization);
Таблица Организация (Organization) |
|||
Атрибут |
Наименование атрибута |
Тип |
Ограничение |
ID организации |
IDOrganization |
INT |
NOT NULL PRIMARY KEY |
Название вида организации |
NameOrganization |
VARCHAR(50) |
NOT NULL UNIQUE |
Дата расформирования |
Dissolution |
DATE |
NULL |
ID вида организации |
IDTypeOfOrganization |
INT |
NOT NULL FOREIGN KEY |
CREATETABLEOrganization--(Организации)
(IDOrganization INT IDENTITY NOT NULL,
NameOrganization VARCHAR(50) NOT NULL,
Dissolution DATETIME NULL, --(датарасформированияорганизации)
IDTypeOfOrganization INT NOT NULL);
ALTER TABLE Organization
WITH CHECK ADD
CONSTRAINT IDOrganizationPrimary PRIMARY KEY (IDOrganization),
CONSTRAINT NameOrganizationUnique UNIQUE (NameOrganization),
CONSTRAINT OrganizationTypeForeign FOREIGN KEY (IDTypeOfOrganization) REFERENCES TypeOfOrganization ON UPDATE CASCADE;
Таблица Водоисточник (WaterSource) |
|||
Атрибут |
Наименование атрибута |
Тип |
Ограничение |
ID водоисточника |
IDWaterSource |
INT |
NOT NULL PRIMARY KEY |
Название водоисточника |
NameWaterSource |
VARCHAR(10) |
NOT NULL
|
Номер дома |
Building |
VARCHAR(10) |
NOT NULL |
ID улицы |
IDStreet |
INT |
NOT NULL FOREIGN KEY |
ID организации |
IDOrganization |
INT |
NOT NULL FOREIGN KEY |
Атрибут «название водоисточника» взят длиной 10 символов, т.к. название составляется по следующей схеме: ПВ-23. То есть вначале идет обозначение состоящее из 2-х букв (ПВ – для водоемов и ПГ – для гидрантов), а далее номер гидранта или водоема.
Также атрибут «номер дома» является символьной величиной, т.к. номер дома может содержать букву (22а) или другие символы (45/2).
CREATETABLEWaterSource--(Водоисточник)
(IDWaterSource INT IDENTITY NOT NULL,
NameWaterSource VARCHAR(10) NOT NULL DEFAULT 'ПГ-',
Building VARCHAR(10) NOT NULL,
IDStreet INT NOT NULL,
IDOrganization INT NOT NULL);
ALTER TABLE WaterSource
WITH CHECK ADD
CONSTRAINT IDWaterSourcePrimary PRIMARY KEY (IDWaterSource),
CONSTRAINT WaterSourceStreetForeign FOREIGN KEY (IDStreet) REFERENCES Street,
CONSTRAINT WaterSourceOrganizationForeign FOREIGN KEY (IDOrganization) REFERENCES Organization;
Таблица Проверка (Inspection) |
|||
Атрибут |
Наименование атрибута |
Тип |
Ограничение |
ID проверки |
IDInspection |
INT |
NOT NULL PRIMARY KEY |
Дата проверки |
DateInspection |
DATE |
NOT NULL
|
ID водоисточника |
IDWaterSource |
INT |
NOT NULL FOREIGN KEY |
CREATE TABLE Inspection --(Проверка)
(IDInspection INT IDENTITY NOT NULL,
DateInspection DATETIME NOT NULL,
IDWaterSource INT NOT NULL);
ALTER TABLE Inspection
WITH CHECK ADD
CONSTRAINT IDInspectionPrimary PRIMARY KEY (IDInspection),
CONSTRAINT InspectionOrganizationForeign FOREIGN KEY (IDWaterSource) REFERENCES WaterSource;
Таблица Неисправность (Defect) |
|||
Атрибут |
Наименование атрибута |
Тип |
Ограничение |
ID неисправности |
IDDefect |
INT |
NOT NULL PRIMARY KEY |
Название неисправности |
NameDefect |
VARCHAR(100) |
NOT NULL
|
Время устранения неисправности |
RepairTime |
INT |
NOT NULL |
Работоспособность |
Serviceability |
BIT |
NOT NULL |
ID вида организации |
IDTypeOfOrganization |
INT |
NOT NULL FOREIGN KEY |
CREATE TABLE Defect --(Неисправность)
(IDDefect INT IDENTITY,
NameDefect VARCHAR(100) NOT NULL,
RepairTime INT NOT NULL,
Serviceability BIT NOT NULL,
IDTypeOfOrganization INT NOT NULL);
ALTER TABLE Defect
WITH CHECK ADD
CONSTRAINT IDDefectPrimary PRIMARY KEY (IDDefect),
CONSTRAINT DefectTypeOrgForeign FOREIGN KEY (IDTypeOfOrganization) REFERENCES TypeOfOrganization;
Таблица Письмо-запрос (Letter) |
|||
Атрибут |
Наименование атрибута |
Тип |
Ограничение |
ID письма |
IDLetter |
INT |
NOT NULL PRIMARY KEY FOREIGN KEY |
Дата отправки |
DataSend |
DATE |
NULL
|
Номер письма |
LetterNumber |
INT |
NULL |
Дата следующей проверки |
DateNextInspection |
DATE |
NULL |
Тип письма |
TypeOfLetter |
VARCHAR(30) |
NOT NULL
|
ID организации |
IDOrganization |
INT |
NOT NULL FOREIGN KEY |
ID проверки |
IDInspection |
INT |
NOT NULL FOREIGN KEY |
CREATE TABLE Letter --(Письмо-запрос)
(IDLetter INT IDENTITY NOT NULL,
DataSend DATETIME NULL,
LetterNumber INT NULL,
DateNextInspection DATETIME NULL ,
TypeOfLetter VARCHAR(30) NOT NULL,
IDOrganization INT NOT NULL,
IDInspection INT NOT NULL);
ALTER TABLE Letter
WITH CHECK ADD
CONSTRAINT IDLetterPrimary PRIMARY KEY (IDLetter),
CONSTRAINT LetterOrganizationForeign FOREIGN KEY (IDOrganization) REFERENCES Organization,
CONSTRAINT LetterInspectionForeign FOREIGN KEY (IDInspection) REFERENCES Inspection,
CONSTRAINT LetterLetterForeign FOREIGN KEY (IDLetter) REFERENCES Letter;
Таблица Проверка неисправности (TestDefect) |
|||
Атрибут |
Наименование атрибута |
Тип |
Ограничение |
ID неисправности |
IDDefect |
INT |
NOT NULL FOREIGN KEY |
ID проверки |
IDInspection |
INT |
NOT NULL FOREIGN KEY |
ID письма |
IDLetter |
INT |
NOT NULL FOREIGN KEY |
CREATE TABLE TestDefect --(проверка неисправности)
(IDDefect INT NOT NULL,
IDInspection INT NOT NULL,
IDLetter INT NOT NULL);
ALTER TABLE TestDefect
WITH CHECK ADD
CONSTRAINT DefectTestDefectForeign FOREIGN KEY (IDDefect) REFERENCES Defect,
CONSTRAINT TestDefectInspectionForeign FOREIGN KEY (IDInspection) REFERENCES Inspection,
CONSTRAINT LetterTestDefectForeign FOREIGN KEY (IDLetter) REFERENCES Letter;