Имя столбца
|
Содержательное
описание
|
Тип данных
|
Размерность
|
Область
допустимых значений
|
Возможность
значения Null
|
Роли
|
Пример
|
Примечание
|
CodeDol
|
Код должности
|
целый
|
3
|
001-500
|
нет
|
PK
|
231
|
|
NameDol
|
Название
должности
|
символьный
|
30
|
‘А - Я’
|
нет
|
|
главный
ремонтник
|
|
Oklad
|
Оклад
|
символьный
|
7
|
‘00000-99999’,’А-Я’
|
нет
|
|
15000 рублей
|
|
1.5
Программная реализация проекта базы данных
Программная реализация проекта базы данных выполнена с
помощью операторов языка SQL CREATE DATABASES, CREATE TABLE.
Текст программы создания базы данных приведен в приложении А.
Для спроектированной базы данных средствами СУБД Microsoft SQL Server 2008 построена
диаграмма, которая приведена в приложении Б.
Текст программы ввода тестовых данных приведен в приложении
В.
1.6
Разработка триггеров для поддержки сложных ограничений целостности в базе
данных
1. Триггер на команду вставки
Данный триггер добавляет сведения о пассажире, при этом
проверяет правильность ввода данных.
create trigger name_valemployeeinsert, update@@rowcount=1@p
char (30), @i int, @s char@p=FIOra from employee@i=1@i<=len (@p)@s=substring
(@p, @i, 1)not ( (@s between 'À' and 'ß') or (@s between 'à' and 'ÿ') or (@s=' ') or (@s='-')(@s between 'A' and 'Z') or (@s between
'a' and 'z'))'Отмена: неправильно указана фамилия
сотрудника'tran@i=@i+1'Добавление/изменение выполнено'
Результат работы триггера для данного примера приведен на
рисунках 2, 3
Рисунок 2.
Вызов триггера осуществляется запросами вида:
into employee values (10, 'Ульянов Петр Петрович',3);
Рисунок 3.
. Триггер на команду удаления
Данный триггер удаляет все данные о пассажире.
Такой триггер необходим для очистки ненужных данных.
TRIGGER delemployee FOR INSERT@FIO char (40), @Cod int@Fio =
employee. FIORa from deleted employee@Cod = employee. FIORa from deleted
employeeemployee. FIORa = @FIO@Cod is not null@Codfrom employee where employee.
CodeRa = @Cod;;
Вызов триггера осуществляется запросами вида:
delete from employee where CodeRa = 3;
Результат работы триггера для данного примера приведен на
рисунках 3,4.
Рисунок 4.
Рисунок 5. Работа триггера на команду удаления
. Триггер на команду обновления
Данный тригер меняет стоимость работы.
TRIGGER repDobrepairs FOR INSERT@@ROWCOUNT = 1@bc INTEGER,
@cm INTEGER@bc = i. Stoim, @cm = i. CodeVRinserted i@bc > 55500'Ошибка!
Указанная стоимость превышает максимум. 'TRANrepairsrepairs. Stoim =
@bcrepairs. CodeVR = @cm
Вызов триггера осуществляется запросами вида:
update repairsrepairs. Stoim = 500repairs. CodeVR = 3;
Результат работы триггера для данного примера приведен на
рисунке 4.
Рисунок 6.
Рисунок 7. Работа триггера на команду обновления.
1.7 Запросы
Все запросы на получение практически любого количества данных
из одной или нескольких таблиц выполняются с помощью предложения SELECT.
В общем случае результатом реализации предложения SELECT
является другая таблица. В курсовой работе разработаны следующие запросы:
Простые запросы
• Найти все коды вида ремонта
• По коду вида ремонта определить стоимость.
• Показать все станки марки "Янтарь’.
Сложные запросы
• . По коду станка определить стоимость его вида
ремонта.
• Узнать марку станка по коду вида ремонта.
• Найти все ФИО работников, имеющих оклад 20000
рублей.
• . Определить все марки станков, находящихся в 1
цеху.
• Показать фамилию работника, который выполнял самый
продолжительный ремонт.
• Найти должность работников, выполняющих самый
дорогостоящий вид ремонта.
Найти все марки станков, которые обслуживал Иванов Иван Иванович.
Программная реализация запросов приведена в приложении Д.
1.8
Представления
. Необновляемое представление, маскирующее
строки и столбцы. Задать новые имена для столбцов.
VIEW data ASAS [Дата начала],As [Дата окончания]repair WHERE
DataN <> '2011-08-10' AND DataO <> '2011-08-11';* FROM data WHERE
[Дата начала] = '2011-08-14';
Рисунок 8.
2. Агрегирующее представление.
VIEW CAShs AS(DISTINCT Stoim) AS [Общая стоимость]repairs;*
FROM CAShs;
Рисунок 9.
3. Представление, основанное на нескольких
таблицах.
· create VIEW Dates AS
AS [Название должности],AS [ФИО]post, employeeCodeDol =
a_CodeDol;* FROM Dates;
Рисунок 10.
· create VIEW Mon AS
AS [Оклад],AS [ФИО]post, employeeCodeDol = a_CodeDol;* FROM
Mon;
Рисунок 11.
· create VIEW smotr AS
AS [Название Станка],AS [ФИО],AS [Стоимость работы]machines,
employee, repair, repairsCodeSt = a_CodeStCodeRa = a_CodeRaCodeVR = a_CodeVR;*
FROM smotr;
Рисунок 12.
Заключение
В ходе курсового проектирования создана база
данных для предметной области "Система учета технического обслуживания
станков".
Разработана структура базы данных, состоящей из 6 таблиц.
Разработано 3 триггера, 3 представления.
Изучены основы языка программирования TRANSACT SQL.
Список
использованных источников
1. Грофф
Дж., Вайнберг П. SQL: Полное
руководство. / 2-е изд. - К., 2001.
2. Казакова
И.А. Основы языка Transact
SQL, учебное пособие. - Издательство
ПГУ, г. Пенза, 2010 г.
Приложения
Программа
создания базы данных
. Запрос создания базы данных "Система учета
технического обслуживания станков":
CREATE DATABASE repair_of_machines;
2. Запрос создания отношения Станки:
create table machines
(INT NOT NULL CHECK (CodeSt BETWEEN 0 AND 9999) PRIMARY
KEY,(40) NOT NULL,DATETIME NOT NULL,VARCHAR (11) NOT NULL,
);
3. Запрос создания отношения Виды ремонта:
create table repairs
(INT NOT NULL CHECK (CodeVR BETWEEN 0 AND 500) PRIMARY
KEY,(20) NOT NULL,(5) NOT NULL,(1000),
);
4. Запрос создания отношения Должность:
create table post
(INT NOT NULL CHECK (CodeDol BETWEEN 0 AND 500) PRIMARY KEY,VARCHAR
(30) NOT NULL,(7) NOT NULL,
);
5. Запрос создания отношения Работник:
create table employee
(INT NOT NULL CHECK (CodeRa BETWEEN 0 AND 9999) PRIMARY
KEY,VARCHAR (30) NOT NULL,INT NOT NULLa_CodeDolFOREIGN KEY REFERENCES post
(CodeDol),
);
6. Запрос создания отношения Ремонт:
create table repair
(NULL(CodeRe BETWEEN 1 AND 500) PRIMARY KEY,INT NOT
NULLCodeStFOREIGN KEY REFERENCES machines (CodeSt),INT NOT NULLCodeRaFOREIGN
KEY REFERENCES employee (CodeRa),DATETIME NOT NULL,DATETIME NOT NULL,INT NOT NULLCodeVRFOREIGN
KEY REFERENCES repairs (CodeVR),VARCHAR (1000),
);
Приложение Б
Диаграмма
базы данных
Рисунок 13. Диаграмма базы данных
Приложение В
Текст
программы ввода текстовых данных
Отношение Работник:
insert into employee values (1, 'Петров Василий Николаевич', 1);into
employee values (2, 'Сидорова Елена Петровна',
);into employee values (3, 'Мазурков Роман Олегович',
);into employee values (4, 'Онегина Василиса Сергеевна',
);into employee values (5, 'Прокин Александр Иванович',
)into employee values (6, 'Копьева Ольга Сергеевна',
);into employee values (7, 'Грланова Кристина Сергеевна',
);into employee values (8, 'Каширов Александр Олегович',
);into employee values (9, 'Красов Игорь Сергеевич',
);
Отношение Станки:into machines values (1, '1-й цех', '2011-08-10', 'Янтарь');into machines values
(2, '2-й цех',
'2011-08-11', 'Ячмень');into machines values (3, '3-й цех', '2011-08-12', 'Клинцы');into machines values
(4, '4-й цех',
'2011-08-13', 'Магр');into machines values (5, '5-й цех', '2011-08-14', 'Авангард');into machines values
(6, '6-й цех',
'2011-08-15', 'Кедр');into machines values (7, '7-й цех', '2011-08-16', 'Атлант');into machines values
(8, '8-й цех',
'2011-08-17', 'Полюс');into machines values (9, '9-й цех', '2011-08-18', 'Скиф');
Отношение Должность:
insert into post values (1, 'Главный ремонтник',
'10000');
insert into post values (2, 'Охранник',
'15000');into post values (3, 'Инженер', '12000');into post values (4, 'Главный инженер',
'20000');into post values (5, 'Ремонтник', '7000');into post values (6, 'Бригадир',
'11000');into post values (7, 'Бухгалтер', '5000');into post values (8, 'Рабочий',
'6000');into post values (9, 'Финансовый директор', '30000');
Отношение Ремонт:into repair values (1, 1, 1, '2011-08-10', '2011-08-11', 1,
' ');into repair values (2, 2, 2, '2011-08-11', '2011-08-12', 2, ' ');into
repair values (3, 3, 3, '2011-08-12', '2011-08-13', 3, ' ');into repair values
(4, 4, 4, '2011-08-13', '2011-08-14', 4, ' ');into repair values (5, 5, 5,
'2011-08-14', '2011-08-15', 5, ' ');into repair values (6, 6, 6, '2011-08-15',
'2011-08-16', 6, ' ');into repair values (7, 7, 7, '2011-08-16', '2011-08-17',
7, ' ');into repair values (8, 8, 8, '2011-08-17', '2011-08-18', 8, ' ');into
repair values (9, 9, 9, '2011-08-18', '2011-08-19', 9, ' ');
Отношение Виды ремонта:into repairs
values (1, '10 дней', '100', ' ');into repairs values (2, '12 дней', '120', '
');into repairs values (3, '20 дней', '200', ' ');into repairs values (4, '13 дней', '130', '
');into repairs values (5, '14 дней', '140', ' ');into repairs values (6, '15 дней', '150', '
');into repairs values (7, '16 дней', '160', ' ');into repairs values (8, '18 дней', '180', '
');into repairs values (9, '17 дней', '170', ' ');
Приложение
Г
Реализация
запросов на языке SQL
Простые запросы:
1. Найти все названия видов ремонта
SELECT CodeVR AS Код_вида_ремонтаrepairs
Рисунок 14.
2. По продолжительности работы, определить
стоимость
SELECT Stoim AS Стоимость, Prod AS
ПродолжительностьrepairsProd = '12 дней';
Рисунок 15.
3. Показать все станки марки "Янтарь’
SELECT Marca AS Марка, CodeSt AS Код_станкаmachinesMarca =
'Янтарь';
Рисунок 16.
Сложные запросы:
. По названию станка определить стоимость его вида
ремонта
SELECT Marca AS Название_станка, Stoim AS Стоимость, CodeVR
AS Код_вида_ремонтаrepairs, machinesMarca = 'Клинцы';
Рисунок 17.
. Узнать марку станка по названию вида ремонта
SELECT CodeVR AS Код_вида_ремонта, Marca AS
Марка_станкаrepairs, machinesCodeVR = 9;
Рисунок 18.
. Найти всех работников, имеющих оклад 20000 рублей
SELECT Oklad AS Оклад, FIORa AS ФИОpost, employeeOklad =
'20000';
Рисунок 19.
. Определить все ФИО работников, находящихся в 1 цеху
SELECT Mesto AS Место, FIORa AS ФИОmachines, employeeMesto =
'1-й цех';
Рисунок 20.
. Показать ФИО работника, который выполнял ремонт
сроком 20 дней
SELECT FIORa AS ФИО, Prod AS Время_ремонтаemployee,
repairsProd = '20 дней';
Рисунок 21.
. Найти должность работников, выполняющих ремонт,
стоимостью 150
SELECT NameDol AS Название_должности, Stoim AS
Стоимость_ремонтаpost, repairsStoim = '150'NameDol <> 'Бухгалтер'NameDol
<> 'Финансовый директор'NameDol <> 'Охранник';
Рисунок 22.
. Найти все марки станков, которые обслуживал Прокин
Александр Иванович
SELECT Marca AS Марка_станка, FIORa AS ФИОemployee,
machinesFIORa = 'Прокин Александр Иванович';
Рисунок 23.