Разработка серверной части информационной системы для сопровождения процесса выдачи заработной платы
Министерство
образования, науки, молодежи и спорта Украины
Сумской
государственный университет
Кафедра
компьютерных наук
Курсовая
работа
по
дисциплине «Базы данных»
тема:
«Разработка серверной части информационной системы для сопровождения процесса
выдачи заработной платы»
Подготовила: студентка группы ИН-82
Данечкина Яна
Проверил:Чекалов А. П.
Сумы
Постановка
задачи
Отдел кадров и бухгалтерия некоторой компании:
сотрудники: ФИО, паспортные данные, дом. и моб. телефоны;
отдел: комната, раб. телефоны (в т.ч. местный), подчинённые
сотрудники, должность, тип(ы) работы, задание(я), проект(ы), размер зарплаты,
форма зарплаты (почасовая, фиксированная).
Построение use case диаграммы
На первом этапе предпроектного исследования выяснено, что основная
задача разрабатываемой системы - сопровождение процесса выдачи заработной
платы.
Use case диаграмма:
Рисунок 2.1 - Концептуальная модель 0-уровня
1.
Бухгалтерия запрашивает список сотрудников и данных о них в отделе кадров и
получает его.
. Далее бухгалтерия проводит расчет заработной платы.
. Передача расчетов и списков сотрудников в кассу.
. В кассе происходит проверка паспорта и выдача
заработной платы.
Следовательно, диаграмма вариантов использования- это диаграмма
на которой показываются отношения между актёрами и вариантами использования. С
помощью этой диаграммы мы обозначили общие границы моделируемой предметной
области на начальном уровне проектирования системы. С помощью этой модели мы
можем детализировать нашу систему и на её основе создаём диаграмму, на которой
показано более детальная последовательность действий.
Построение концептуальной модели 1-уровня (диаграмма
последовательности действий)
Во время предпроектного исследования составлено следующее
описание событий, происходящих при выдаче заработной платы:
. Бухгалтерия запрашивает список сотрудников и данных
о них в отделе кадров и получает его.
. Далее бухгалтерия проводит расчет заработной платы.
. Передача расчетов и списков сотрудников в кассу.
. В кассе происходит проверка паспорта и выдача
заработной платы.
Рисунок 2.2 - Концептуальная модель 1-го уровня (диаграмма
последовательности действий)
С помощью диаграммы последовательности мы обозначили объекты
и субъекты, которые есть основными составляющими проектированной системы,
которые выполняют определённые действия, именно они и будут составлять классы.
Диаграмма классов
Исходя из диаграммы последовательности действий, мы получим 5
классов: Отделы, Сотрудник, Штатное_расписание, Выполняемая_работа и Контактная_инфо.
Диаграмма классов состоит из таких элементов:
1. Отделы - класс, который совмещает в себе отделы
предприятия, имеет атрибуты: ID_отдела, название отдела, помещение, телефонный
номер.
2. Сотрудник - класс, характеризующий
сотрудников данной фирмы, имеет атрибуты: ID_сотрудника, паспортные
данные, ФИО, стаж. Сотрудник приходит в кассу, предъявляет паспорт и получает
заработную плату.
3. Штатное расписание - класс, описывающий
имеющуюся информацию о должностях, окладах данной фирмы. Имеет атрибуты: ID, должность, оклад.
Штатное расписание требуется для расчета заработной платы каждого сотрудника.
4. Выполняемая работа - класс, описывающий
задание и тип работы конкретного сотрудника, плату за его выполнение и форму
платы (почасовая или фиксированная). Имеет атрибуты: задание, размер_зарпл.,
тип_работы, форма_зарпл. Требуется для расчета заработной платы каждого
сотрудника.
5. Контактная инфо - класс, описывающий
контактные данные каждого сотрудника. Имеет атрибуты: e-mail, телефон, адресс,
другое. Нужен при необходимости связаться с конкретным сотрудником.
Проектирование базы данных
Возьмем за правило считать классы сущностями. Объектной
модели можно сопоставить модели данных из-за постоянного характера классов.
Стойкие классы могут выступать в качестве постоянного хранения данных во время
работы приложения. Следовательно, для всех постоянных классов можно применить
утверждение, что они могут использовать однозначное отображение в сущностях.
Этот процесс называется маппированием.
Отношения Отделы, Сотрудник и Штатное
расписание, Выполняемая_работа и Контактная_инфо выявленные
на этапе построения концептуальной модели характеризуются следующими атрибутами
(табл. 3.1).
Таблица 3.1 Атрибуты отношения Отделы
Атрибут
|
Описание
|
Number
|
Номер отдела
|
Name
|
Название отдела
|
Room
|
Помещения, где расположены
отдел кадров и бухгалтерия
|
Phone
|
Контактный телефон
|
Отношению Отделы соответствует полная ФЗ Number →
Name, Room, Phone.
Таблица 3.2 Атрибуты отношения Сотрудник
Атрибут
|
Описание
|
fio
|
ФИО сотрудника
|
ID_s
|
Идентификатор сотрудника
|
Pasport
|
Паспортные данные
|
Spesiallity
|
Профессия сотрудника
|
Years
|
Стаж работы
|
Отношению Сотрудник соответствует полная ФЗ ID →
Pasport, Info, Contact_Info, Spesiallity, Years.
Таблица 3.3 Атрибуты отношения Штатное расписание
Атрибут
|
Описание
|
Идентификатор сотрудника
|
Post
|
Должность сотрудника
|
Salary
|
Ставка (оклад) по должности
|
Отношению Штатное расписание соответствует полная ФЗ
ID → Dolzhnost, Money.
Таблица 3.4 Атрибуты отношения Выполняемая работа
Атрибут
|
Описание
|
Task
|
Задание
|
Salary
|
Плата зазадание
|
Kind_of_work
|
Тип работы
|
Kind_of_salary
|
Тип платы
|
Отношению Выполняемая работа соответствует полная ФЗ
Task → Salary, Kind_of_work, Kind_of_salary.
Таблица 3.5 Атрибуты отношения Контактная инфо
Атрибут
|
Описание
|
ID
|
Идентификационный номер
|
Phone
|
Телефон
|
Address
|
Адрес
|
E-mail
|
Электронная почта
|
Others
|
Другое
|
Отношению Контактная инфо соответствует полная ФЗ ID →
Phone, Address, E-mail, Others.
Анализ функциональных зависимостей, которые имеют место для
отношений Отделы, Сотрудник, Штатное расписание, Выполняемая
работа, Контактная инфо показывают, что они полные. Следовательно,
универсальное отношение Заработная плата нормализовано.
Логическая реализация базы данных
Реализуем таблицу Отделы. Для идентификации записей
введем первичный ключ Number.
Таблица 4.1 Обоснование типов полей табл. Отделы
Атрибут
|
Столбец
|
Тип данных
|
Мотивация
|
Примечание
|
ID_отдела
|
Number
|
NUMBER(2)
|
ИН отдела
|
Primary Key
|
Помещение
|
Room
|
NUMBER(4,0)
|
Номер занимаемого помещения
|
|
Раб_телефон
|
Phone
|
VARCHAR2(20)
|
Рабочий телефон
|
|
Название_отдела
|
Name
|
VARCHAR2(30)
|
Название отдела
|
|
Реализуем таблицу Сотрудник. Для идентификации записей
введем первичный ключ ID_s.
Таблица 4.2 Обоснование типов полей табл. Сотрудник
Атрибут
|
Столбец
|
Тип данных
|
Мотивация
|
Примечание
|
ID _сотрудника
|
ID_s
|
NUMBER (2)
|
ИН сотрудника
|
Primary Key
|
Паспортные_данные
|
VARCHAR2 (50)
|
Серия, номер паспорта, кем
выдан и прописка
|
|
Профессия
|
Spesiallity
|
VARCHAR2 (20)
|
Специальность сотрудника
|
|
Стаж
|
Years
|
TIMESTAMP
|
Дата первого трудового дня
|
|
ID_отдела
|
Number
|
NUMBER(2)
|
ИН отдела
|
Foreign Key
|
Реализуем таблицу Штатное расписание. Для
идентификации записей введем первичный ключ ID.
Таблица 4.3 Обоснование типов полей табл. Штатно_
расписание
Атрибут
|
Столбец
|
Тип данных
|
Мотивация
|
Примечание
|
ID
|
ID
|
NUMBER(2)
|
ИН должности
|
Primary Key
|
Должность
|
Post
|
VARCHAR2 (20)
|
Должность сотрудника
|
|
Оклад
|
Salary
|
NUMBER(8,3)
|
Ставка по занимаемой
должности
|
|
ID_отдела
|
Number
|
NUMBER(2)
|
ИН отдела
|
Foreign Key
|
Реализуем таблицу Выполняемая работа. Для
идентификации записей введем первичный ключ Task.
Таблица 4.4 Обоснование типов полей табл. Выполняемая_работа
Атрибут
|
Столбец
|
Тип данных
|
Мотивация
|
Примечание
|
Задание
|
Task
|
VARCHAR2 (100)
|
Задание
|
Primary Key
|
Плата
|
Salary
|
NUMBER(8,3)
|
Плата за выполнение задания
|
|
Тип работы
|
Kind_of_work
|
VARCHAR2 (20)
|
Тип выполняемой работы
|
|
Тип платы
|
Kind_of_salary
|
VARCHAR2 (20)
|
Тип платы
|
|
ID _сотрудника
|
ID_s
|
NUMBER (2)
|
ИН сотрудника
|
Foreign Key
|
Реализуем таблицу Контактная инфо. Для идентификации
записей введем мигрирующий первичный ключ ID_s.
Атрибут
|
Столбец
|
Тип данных
|
Мотивация
|
Примечание
|
Телефон
|
Phone
|
VARCHAR2 (20)
|
Телефон сотрудника
|
|
Адрес
|
Address
|
VARCHAR2 (30)
|
Адрес сотрудника
|
|
Электронная почта
|
E-mail
|
VARCHAR2 (30)
|
Электронная почта
сотрудника
|
|
Другое
|
Others
|
VARCHAR2 (100)
|
Другие контакты сотрудника
|
|
ID _сотрудника
|
ID_s
|
NUMBER (2)
|
ИН сотрудника
|
PFK
|
Сущности Отделы и Сотрудник, Отделы и
Штатное расписание соединены связями «один-ко-многим». При этом происходит
мигрирование первичного ключа ID_отдела и преобразование его во внешний. Сущности
Сотрудник и Выполняемая работа, Сотрудник и Контактная инфо
соединены связями «один-к-одному». При этом происходит мигрирование первичного
ключа ID_сотрудника и преобразование его во внешний ключ (Выполняемая
работа) или PFK (Контактная инфо).
Окончательная реляционная модель базы данных выглядит следующим
образом:
Физическая реализация базы данных
Скрипты
Create table Department (
Nоmer Number NOT NULL , --ИН отдела Number, --Номер занимаемого помещения
Phone Varchar2(20), --Рабочий телефон
Name Varchar2(100)) --Название отдела
Create table Worker ( Varchar2(50), --ФИО сотрудника
Pasport Varchar2(200), --Серия, номер паспорта, кем выдан и
пропискаVarchar2(40), --Специальность сотрудникаTimestamp(8), --Дата первого
трудового дня
ID_s Number NOT NULL , --ИН сотрудникаNumber NOT NULL
) --ИН отдела
table List_of_memb (Number
NOT NULL , --ИН должности Varchar2(40), --Должность
сотрудника
Salary Number(8,3), --Ставка по занимаемой должности
Nоmer Number NOT NULL ) --ИН отдела
table Work (Varchar2(200), --Задание сотрудника Number(8,3), --Плата за
выполненное задание
kind_of_work Varchar2(20), --Тип выполняемой работы_of_salary
Varchar2(20), --Тип оплаты_s Number NOT
NULL ) -- ИН сотрудника
table Contact_info (Varchar2(20), --Телефон сотрудника Varchar2(50), --Адрес сотрудника
e_mail Varchar2(30), --Электронная почта
others Varchar2(100), --Другие контакты сотрудника
ID_s Number NOT NULL ) -- ИН сотрудника
Alter table Department add Constraint
pk_Department primary key (Nоmer)table Worker add Constraint pk_Worker primary key
(ID_s)table List_of_memb add Constraint pk_List_of_memb primary key (ID)table
Work add Constraint pk_Work primary key (ID_s)table Contact_info add Constraint
pk_Contact_info primary key (ID_s)
table List_of_memb add foreign key (Nоmer) references
Department (Nоmer)table
Worker add foreign key (Nоmer) references Department (Nоmer)table Contact_info add foreign key (ID_s)
references Worker (ID_s)table Work add foreign key (ID_s) references Worker
(ID_s)
;
Заполнение таблиц
--DepartmentINTO Department VALUES (1, 21,
'(0542)236-743', 'Бухгалтерия');INTO Department VALUES (2, 143,
'(0542)298-756', 'Отдел кадров');INTO Department VALUES (3, null,
'(0542)255-733', 'Пропускн_пункт');INTO Department VALUES (4, 32,
'(0542)278-736', 'Тех_отдел');INTO Department VALUES (5, 24, '(0542)243-721',
'Тест_отдел');
-WorkerINTO Worker VALUES ('Костюк А.
О.','MB347856, Сумским ГРО УМВД 20.09.03, прописка - г. Сумы', 'Бухгалтер',
TO_DATE ('2007-02-22', 'YYYY-MM-DD'), 1, 1);INTO Worker VALUES ('Миненко В. А.','MB836472,
Сумским ГРО УМВД 15.05.96, прописка - г. Сумы', 'Бухгалтер', TO_DATE
('2002-04-12', 'YYYY-MM-DD'), 2, 1);INTO Worker VALUES ('Чешкин Б.
В.','MB917382, Конотопским ГРО УМВД 20.03.93, прописка - г. Конотоп',
'Менеджер', TO_DATE ('2005-02-12', 'YYYY-MM-DD'), 3, 2);INTO Worker VALUES
('Синь Е. Р.','MB153728, Сумским ГРО УМВД 17.04.76, прописка - г. Сумы',
'Вахтер', TO_DATE ('2010-07-30', 'YYYY-MM-DD'), 4, 3);INTO Worker VALUES
('Ешеренев П. Г.','MB153728, Белопольским ГРО УМВД 28.08.74, прописка - г.
Ворожба', 'Вахтер', TO_DATE ('2009-05-20', 'YYYY-MM-DD'), 5, 3);INTO Worker
VALUES ('Соломкина А. А.','MB635217, Сумским ГРО УМВД 25.06.71, прописка - г.
Сумы', 'Вахтер', TO_DATE ('2004-06-18', 'YYYY-MM-DD'), 6, 3);INTO Worker VALUES
('Масько П. Л.','MB762534, Ахтырским ГРО УМВД 20.09.95, прописка - г. Ахтырка',
'Менеджер', TO_DATE ('2007-10-29', 'YYYY-MM-DD'), 7, 4);INTO Worker VALUES
('Кучер Ф. Г.','MB453277, Харьковским ГРО УМВД 10.09.96, прописка - г.
Харьков', 'Тестер', TO_DATE ('2001-10-22', 'YYYY-MM-DD'), 8, 5);INTO Worker
VALUES ('Шинкарюк Л. Д.','MB256346, Киевским ГРО УМВД 05.06.92, прописка - г.
Киев', 'Тестер', TO_DATE ('2002-11-28', 'YYYY-MM-DD'), 9, 5);INTO Worker VALUES
('Воронная Н. Д.','MB736488, Сумским ГРО УМВД 20.09.98, прописка - г. Сумы',
'Тестер', TO_DATE ('2003-12-01', 'YYYY-MM-DD'), 10, 5);
-List_of_membINTO List_of_memb VALUES (1,
'Бухгалтер', 2000, 1);INTO List_of_memb VALUES (2, 'Менеджер o/к', 1800,
2);INTO List_of_memb VALUES (3, 'Вахтер', 800, 3);INTO List_of_memb VALUES (4,
'Менеджер т/o', 2500, 4);INTO List_of_memb VALUES (5, 'Тестер', 2300, 5);
-WorkINTO Work VALUES (null, 2000, 'на предпр.',
'почасовая', 1);INTO Work VALUES (null, 2000, 'на предпр.', 'почасовая',
2);INTO Work VALUES (null, 1800, 'на предпр.', 'почасовая', 3);INTO Work VALUES
(null, 800, 'на предпр.', 'почасовая', 4);INTO Work VALUES (null, 800, 'на
предпр.', 'почасовая', 5);INTO Work VALUES (null, 800, 'на предпр.',
'почасовая', 6);INTO Work VALUES (null, 2500, 'на предпр.', 'почасовая', 7); INTO Work VALUES ('тестирование офисного
прогр. обесп.', 2300, 'на предпр.', 'фиксир.', 8);
INSERT INTO Work VALUES ('тестирование
пользовательского прогр. обесп.', 2300, 'на дому', 'фиксир.', 9);
INSERT INTO Work VALUES ('тестирование
системного прогр. обесп.', 2300, 'на предпр.', 'фиксир.', 10);
--Contact_infoINTO Contact_info VALUES
('(0542)736-839', 'ул. Ахтырская, 3', 'jhsdfjskl@yandex.ru', null, 1);
INSERT INTO Contact_info VALUES ('(0542)745-859',
'ул. Кирова,
32', '123mjhj@yandex.ru', null, 2);
INSERT INTO Contact_info VALUES
('(05456)5-36-34', 'ул. Ленина, 257', 'loigerg@mail.ru', 'ICQ - 456789', 3);
INSERT INTO Contact_info VALUES ('(0542)674-256',
'ул. Октября,
3', 'vcmhdl@bk.ru', null, 4);
INSERT INTO Contact_info VALUES
('(05423)7-36-89', 'ул. Колпака, 34', 'oehcpspss@yandex.ru', null, 5);INTO
Contact_info VALUES ('(0542)648-820', 'ул. Харьковска, 23', 'juise@yandex.ru', null, 6);
INSERT INTO Contact_info VALUES
('(05446)2-49-88', 'ул. Шевченка, 2', 'lidufklasjd@mail.ru', null, 7);
INSERT INTO Contact_info VALUES
('(065)473-68-39', 'ул. Курская, 18', 'isdkasd@yandex.ru', null, 8);
INSERT INTO Contact_info VALUES
('(044)273-61-21', 'ул. О.Вишни, 78', 'lskdjflskdj@yandex.ru', null, 9);INTO
Contact_info VALUES ('(0542)836-358', 'ул. Береговая, 104', 'kudfkjdkdldd@yandex.ru', null, 10);
Department
Worker
List_of_memb
проектирование база данных логический метамодель
Contact_info
Создание
выборок
1. SELECT fio, spesiallity, EXTRACT
(YEAR FROM SYSDATE) - EXTRACT (YEAR FROM years) AS stazh
FROM Worker; -- выводит
сотрудников, их специальности и стаж работы (использование функции - EXTRACT)
2. SELECT w.fio, w.spesiallity,
w.pasport, l.salary
FROM Worker w, List_of_memb l
WHERE w.ID_s=l.ID_s AND w.nomer=l.nomer; -- выводит
ФИО, специальность, паспортные данные и заработную плату сотрудников (выборка)
3. SELECT DISTINCT post
FROM List_of_memb; -- выводит уникальные записи
должностей штатного расписания (проекция)
4. SELECT d. nomer, w.ID_s,
w.fio
FROM Worker w, Department d
WHERE w. nomer =d. nomer; -- выводит номера
сотрудников и их ФИО с учетом номеров отделов (пересечение)
5. SELECT salary
FROM List_of_memb
WHERE salary NOT IN (SELECT
salary FROM List_of_memb WHERE salary<2000); -- выводит ставки по заработной плате выше 2000 грн. (разность)
Мапирование реляционной модели в метамодель
Классической методикой проектирования баз данных является
создание отдельной таблицы для каждой описываемой моделью данных сущности.
Такой подход хорошо работает для БД с относительно небольшим количеством
описываемых объектов и при несложных и статичных связях между ними. Однако
любое изменение структуры хранимых данных приводит к внесению изменений в
структуру таблиц, отображающих эти данные. Несложная на этапе разработки, эта
операция становится крайне проблематичной при больших объемах данных и при
отсутствии у разработчика непосредственного доступа к БД (например, если она
находится у заказчика).
Пять основных тезисов, на которых должна строиться
проектируемая база данных:
. Каждая сущность, информация о которой хранится в БД,
- это объект.
. Каждый объект уникален в пределах БД и имеет
уникальный идентификатор.
. Объект имеет свойства (строковые, числовые,
временные, перечислимые), которые описывают атрибуты сущности.
. Объекты могут быть связаны между собой произвольным
образом. Связь характеризуется связанными объектами и типом связи.
. Объект может быть хранилищем. В этом случае
допускается хранение в нем других объектов.
Такая структура базы данных не привязана ни к какой
бизнес-модели и позволяет реализовать на этой основе практически любую
бизнес-логику.
Построение диаграммы классов для метамодели
Исходя из описанных выше утверждений, была спроектирована
диаграмма классов, которая удовлетворяет этим тезисам (рис. 4.1).
Как видно из диаграммы классов она состоит из 4 классов: Типы,
Объекты, Атрибуты и Параметры. В каждом классе, кроме
класса Параметры, имеется 3 атрибута, из которых один - это
идентификатор данного класса. В классы Объекты и Атрибуты
мигрирует идентификатор из класса Типы. Класс Параметры не имеет своего
идентификатора, но в него мигрируют идентификаторы из классов Атрибуты и
Объекты.
Рисунок 4.1 - Диаграмма классов
Проектирование метамодели базы данных
Отношения Типы, Объекты, Атрибуты и Параметры, выявленные на
этапе построения концептуальной модели характеризуются следующими атрибутами
(табл. 3.1).
Таблица 3.1 Атрибуты отношения «Типы»
Атрибут
|
Описание
|
ID_типа_объекта
|
Первичный ключ
|
Название
|
Название типа
|
Описание
|
Описание типа
|
Таблица 3.2 Атрибуты отношения
«Объекты»
Атрибут
|
Описание
|
ID_объекта
|
Первичный ключ
|
ID_типа_объекта
|
Внешний ключ отношения
«Типы»
|
Название_объекта
|
Название объекта
|
Таблица 3.3 Атрибуты отношения «Атрибуты»
Атрибут
|
Описание
|
ID_атрибута
|
Первичный ключ
|
ID_типа_объекта
|
Внешний ключ отношения
«Типы»
|
Название_атрибута
|
Название атрибута
|
Таблица 3.3 Атрибуты отношения «Параметры»
Атрибут
|
Описание
|
ID_объекта
|
Внешний ключ отношения
«Объекты»
|
ID_отношения ID_атрибута
|
Показывает отношение между
объектами Внешний ключ отношения «Атрибуты»
|
Текстовое значение Номерное
значение
|
Поле для текстовых данных
Поле для числовых данных
|
Отношение Параметры играет роль связи «Многие ко Многим», а
атрибут ID_отношения показывает эту связь.
Логическая реализация метамодели
Реализуем таблицу object_types. Для идентификации записей введем первичный ключ
object_type_id.
Таблица 5.1 Обоснование типов полей таблицы object_types:
Столбец
|
Тип данных
|
Мотивация
|
Примечание
|
ID_типа_объекта
|
object_type_id
|
NUMBER
|
|
Primary Key
|
Название
|
name
|
VARCHAR2(50)
|
Название
|
|
Описание
|
description
|
VARCHAR2(100)
|
Описание
|
|
Реализуем таблицу objects. Для идентификации записей введем первичный ключ
object_id.
Таблица 5.2 Обоснование типов полей таблицы objects:
Атрибут
|
Столбец
|
Тип данных
|
Мотивация
|
Примечание
|
ID_объекта
|
object_id
|
NUMBER
|
|
Primary Key
|
ID_типа_объекта
|
object_type_id
|
NUMBER
|
|
Foreign Key
|
Название_объекта
|
name
|
VARCHAR2(150)
|
Название объекта
|
|
Реализуем таблицу attributes. Для идентификации записей введем
первичный ключ attr_id.
Таблица 5.3 Обоснование типов полей таблицы attributes:
Атрибут
|
Столбец
|
Тип данных
|
Мотивация
|
Примечание
|
ID_атрибута
|
attr_id
|
NUMBER
|
|
Primary Key
|
ID_типа_объекта
|
object_type_id
|
NUMBER
|
|
Foreign Key
|
Название_атрибута
|
name
|
VARCHAR2(50)
|
Название атрибута
|
|
Реализуем таблицу cf_par. Первичных ключей таблица не имеет.
Таблица 5.4 Обоснование типов полей таблицы params:
Атрибут
|
Столбец
|
Тип данных
|
Мотивация
|
Примечание
|
ID_объекта
|
object_id
|
NUMBER
|
Номер объекта
|
Foreign Key
|
ID_атрибута
|
attr_id
|
NUMBER
|
Номер атрибута
|
Текстовое_значение
|
text_value
|
VARCHAR2(150)
|
Поле для текстовых данных
|
|
Номерное_значение
|
number_value
|
NUMBER
|
Поле для цифровых данных
|
|
Дата
|
date_value
|
DATE
|
Поле для дат
|
|
Схема метамодели была реализована так:
Физическая реализация метамодели
Скрипты
drop table params;
drop table attributes;table objects;table
object_types;
- Create tablestable object_types (_type_id
Number NOT NULL ,Varchar2(100),Varchar2(1000));
table objects (_id Number NOT NULL ,_type_id
Number NOT NULL ,Varchar2(100));
table attributes (_id Number NOT NULL ,_type_id
Number NOT NULL ,Varchar2(100));
table params (_id Number NOT NULL ,_id Number NOT
NULL ,_value Varchar2(1000),_value Number,_value DATE);
- Create primary keystable object_types add
primary key (object_type_id);table objects add primary key (object_id);table
attributes add primary key (attr_id);
- Create foreign keystable objectsConstraint r_5
foreign key (object_type_id)object_types (object_type_id) on delete cascade;
table attributesforeign key
(object_type_id)object_types (object_type_id) ;
table paramsConstraint r_6 foreign key
(object_id)objects (object_id) ;
table paramsConstraint r_7 foreign key
(attr_id)attributes (attr_id) ;;
Заполнение таблиц
delete from params;from objects;from
attributes;from object_types;
-object_types (object_type_id, name,
description)into object_types values (1, 'Department', null);into object_types
values (2, 'Worker', null);into object_types values (3, 'List_of_memb',
'List_of_members');into object_types values (4, 'Work', null);into object_types
values (5, 'Contact_info', 'Contact_information');
-attributes (attr_id, object_type_id, name)into
attributes values (1, 1, 'Room');into attributes values (2, 1, 'Phone');into
attributes values (3, 2, 'Pasport');into attributes values (4, 2,
'Spesiallity');into attributes values (5, 2, 'Years');into attributes values
(6, 3, 'Salary');into attributes values (7, 4, 'Task');into attributes values
(8, 4, 'Salary');into attributes values (9, 4, 'Kind_of_work');into attributes
values (10, 4, 'Kind_of_salary');into attributes values (11, 5, 'Phone');into
attributes values (12, 5, 'Address');into attributes values (13, 5,
'E-mail');into attributes values (14, 5, 'Others');
-objects (object_id, object_type_id, name)
-Departmentinto objects values (10, 1, 'Бухгалтерия');into
objects values (20, 1, 'Отдел кадров');into
objects values (30, 1, 'Пропускн_пункт');into objects values (40, 1, 'Тех_отдел');into
objects values (50, 1, 'Тест_отдел');
-Workerinto objects values (11, 2, 'Костюк А. О.');into objects values
(12, 2, 'Миненко В. А.');into objects values
(13, 2, 'Чешкин Б. В.');into objects values
(14, 2, 'Синь Е. Р.');into objects values
(15, 2, 'Ешеренев П. Г.');into objects values
(16, 2, 'Соломкина А. А.');into objects values
(17, 2, 'Масько П. Л.');into objects values
(18, 2, 'Кучер Ф. Г.');into objects values
(19, 2, 'Шинкарюк Л. Д.');into objects values
(21, 2, 'Воронная Н. Д.');
-List_of_membinto objects values (1, 3, 'Бухгалтер');into
objects values (2, 3, 'Менеджер о\к');into objects values
(3, 3, 'Вахтер');into
objects values (4, 3, 'Менеджер т\о');into objects values
(5, 3, 'Тестер');
-params (object_id, attr_id, text_value,
number_value, date_value)
-Department => Roominto params (object_id,
attr_id, number_value) values (10, 1, 21);into params (object_id, attr_id,
number_value) values (20, 1, 143);into params (object_id, attr_id,
number_value) values (30, 1, null);into params (object_id, attr_id,
number_value) values (40, 1, 32);into params (object_id, attr_id, number_value)
values (50, 1, 24);
-Department => Phoneinto params (object_id,
attr_id, text_value) values (10, 2, '(0542)236-743');into params (object_id,
attr_id, text_value) values (20, 2, '(0542)298-756');into params (object_id,
attr_id, text_value) values (30, 2, '(0542)255-733');into params (object_id,
attr_id, text_value) values (40, 2, '(0542)278-736');into params (object_id,
attr_id, text_value) values (50, 2, '(0542)243-721');
-Worker => Pasportinto params (object_id,
attr_id, text_value) values (11, 3, 'MB347856, Сумским ГРО УМВД 20.09.03, прописка - г. Сумы');into params
(object_id, attr_id, text_value) values (12, 3, 'MB836472, Сумским ГРО УМВД 15.05.96, прописка - г. Сумы');into params
(object_id, attr_id, text_value) values (13, 3, 'MB917382, Конотопским ГРО УМВД 20.03.93, прописка - г. Конотоп');into params
(object_id, attr_id, text_value) values (14, 3, 'MB153728, Сумским ГРО УМВД 17.04.76, прописка - г. Сумы');into params
(object_id, attr_id, text_value) values (15, 3, 'MB153728, Белопольским ГРО УМВД 28.08.74, прописка - г. Ворожба');into params
(object_id, attr_id, text_value) values (16, 3, 'MB635217, Сумским ГРО УМВД 25.06.71, прописка - г. Сумы');into params
(object_id, attr_id, text_value) values (17, 3, 'MB762534, Ахтырским ГРО УМВД 20.09.95, прописка - г. Ахтырка');into params
(object_id, attr_id, text_value) values (18, 3, 'MB453277, Харьковским ГРО УМВД 10.09.96, прописка - г. Харьков');into params
(object_id, attr_id, text_value) values (19, 3, 'MB256346, Киевским ГРО УМВД 05.06.92, прописка - г. Киев');into params
(object_id, attr_id, text_value) values (21, 3, 'MB736488, Сумским ГРО УМВД 20.09.98, прописка - г. Сумы');
-Worker => Spesiallityinto params (object_id,
attr_id, text_value) values (11, 4, 'Бухгалтер');into params
(object_id, attr_id, text_value) values (12, 4, 'Бухгалтер');into params
(object_id, attr_id, text_value) values (13, 4, 'Менеджер');into params (object_id,
attr_id, text_value) values (14, 4, 'Вахтер');into params (object_id, attr_id,
text_value) values (15, 4, 'Вахтер');into params (object_id, attr_id, text_value)
values (16, 4, 'Вахтер');into params (object_id, attr_id, text_value) values (17,
4, 'Менеджер');into params
(object_id, attr_id, text_value) values (18, 4, 'Тестер');into params
(object_id, attr_id, text_value) values (19, 4, 'Тестер');into params
(object_id, attr_id, text_value) values (21, 4, 'Тестер');
-Worker => Yearsinto params (object_id,
attr_id, date_value) values (11, 5, TO_DATE('2007-02-22', 'YYYY-MM-DD'));into
params (object_id, attr_id, date_value) values (12, 5, TO_DATE('2002-04-12',
'YYYY-MM-DD'));into params (object_id, attr_id, date_value) values (13, 5,
TO_DATE('2005-02-12', 'YYYY-MM-DD'));into params (object_id, attr_id,
date_value) values (14, 5, TO_DATE('2010-07-30', 'YYYY-MM-DD'));into params
(object_id, attr_id, date_value) values (15, 5, TO_DATE('2009-05-20',
'YYYY-MM-DD'));into params (object_id, attr_id, date_value) values (16, 5,
TO_DATE('2004-06-18', 'YYYY-MM-DD'));into params (object_id, attr_id,
date_value) values (17, 5, TO_DATE('2007-10-29', 'YYYY-MM-DD'));into params
(object_id, attr_id, date_value) values (18, 5, TO_DATE('2001-10-22',
'YYYY-MM-DD'));into params (object_id, attr_id, date_value) values (19, 5,
TO_DATE('2002-11-28', 'YYYY-MM-DD'));into params (object_id, attr_id,
date_value) values (21, 5, TO_DATE('2003-12-01', 'YYYY-MM-DD'));
-List_of_memb => Salaryinto params (object_id,
attr_id, number_value) values (1, 6, 2000);into params (object_id, attr_id,
number_value) values (2, 6, 1800);into params (object_id, attr_id,
number_value) values (3, 6, 800);into params (object_id, attr_id, number_value)
values (4, 6, 2500);into params (object_id, attr_id, number_value) values (5,
6, 2300);
-Work => Taskinto params (object_id, attr_id,
text_value) values (11, 7, null);into params (object_id, attr_id, text_value)
values (12, 7, null);into params (object_id, attr_id, text_value) values (13,
7, null);into params (object_id, attr_id, text_value) values (14, 7, null);into
params (object_id, attr_id, text_value) values (15, 7, null);into params
(object_id, attr_id, text_value) values (16, 7, null);into params (object_id,
attr_id, text_value) values (17, 7, null);into params (object_id, attr_id,
text_value) values (18, 7, 'тестирование офисного прогр. обесп.');into
params (object_id, attr_id, text_value) values (19, 7, 'тестирование пользовательского прогр. обесп.');into
params (object_id, attr_id, text_value) values (21, 7, 'тестирование системного прогр. обесп.');
-Work => Salaryinto params (object_id,
attr_id, number_value) values (11, 8, 2000);into params (object_id, attr_id,
number_value) values (12, 8, 2000);into params (object_id, attr_id,
number_value) values (13, 8, 1800);into params (object_id, attr_id,
number_value) values (14, 8, 800);into params (object_id, attr_id,
number_value) values (15, 8, 800);into params (object_id, attr_id,
number_value) values (16, 8, 800);into params (object_id, attr_id, number_value)
values (17, 8, 2500);into params (object_id, attr_id, number_value) values (18,
8, 2300);into params (object_id, attr_id, number_value) values (19, 8,
2300);into params (object_id, attr_id, number_value) values (21, 8, 2300);
-Work => Kind_of_workinto params (object_id,
attr_id, text_value) values (11, 9, 'на предпр.');into params (object_id, attr_id, text_value)
values (12, 9, 'на предпр.');into
params (object_id, attr_id, text_value) values (13, 9, 'на предпр.');into
params (object_id, attr_id, text_value) values (14, 9, 'на предпр.');into
params (object_id, attr_id, text_value) values (15, 9, 'на предпр.');into
params (object_id, attr_id, text_value) values (16, 9, 'на предпр.');into
params (object_id, attr_id, text_value) values (17, 9, 'на предпр.');into
params (object_id, attr_id, text_value) values (18, 9, 'на предпр.');into
params (object_id, attr_id, text_value) values (19, 9, 'на дому');into params
(object_id, attr_id, text_value) values (21, 9, 'на предпр.');
-Work => Kind_of_salaryinto params (object_id,
attr_id, text_value) values (11, 10, 'почасовая');into params
(object_id, attr_id, text_value) values (12, 10, 'почасовая');into params
(object_id, attr_id, text_value) values (13, 10, 'почасовая');into params
(object_id, attr_id, text_value) values (14, 10, 'почасовая');into params
(object_id, attr_id, text_value) values (15, 10, 'почасовая');into params
(object_id, attr_id, text_value) values (16, 10, 'почасовая');into params
(object_id, attr_id, text_value) values (17, 10, 'почасовая');into params
(object_id, attr_id, text_value) values (18, 10, 'фиксир.');into
params (object_id, attr_id, text_value) values (19, 10, 'фиксир.');into
params (object_id, attr_id, text_value) values (21, 10, 'фиксир.');
-Contact_info
-Phoneinto params (object_id, attr_id,
text_value) values (11, 11, '(0542)736-839');into params (object_id, attr_id,
text_value) values (12, 11, '(0542)736-839');into params (object_id, attr_id,
text_value) values (13, 11, '(05456)5-36-34');into params (object_id, attr_id,
text_value) values (14, 11, '(0542)674-256');into params (object_id, attr_id,
text_value) values (15, 11, '(05423)7-36-89');into params (object_id, attr_id,
text_value) values (16, 11, '(0542)648-820');into params (object_id, attr_id,
text_value) values (17, 11, '(05446)2-49-88');into params (object_id, attr_id,
text_value) values (18, 11, '(065)473-68-39');into params (object_id, attr_id,
text_value) values (19, 11, '(044)273-61-21');into params (object_id, attr_id,
text_value) values (21, 11, '(0542)836-358');
-Addressinto params (object_id, attr_id,
text_value) values (11, 12, 'г. Сумы, ул. Ахтырская, 3');into params (object_id, attr_id,
text_value) values (12, 12, 'г. Сумы, ул. Кирова, 32');into params (object_id, attr_id, text_value) values
(13, 12, 'г. Конотоп, ул. Ленина, 257');into
params (object_id, attr_id, text_value) values (14, 12, 'г. Сумы, ул. Октября, 3');into
params (object_id, attr_id, text_value) values (15, 12, 'г. Ворожба, ул. Колпака, 34');into
params (object_id, attr_id, text_value) values (16, 12, 'г. Сумы, ул. Харьковска, 23');into
params (object_id, attr_id, text_value) values (17, 12, 'г. Ахтырка, ул. Шевченка, 2');into
params (object_id, attr_id, text_value) values (18, 12, 'г. Харьков, ул. Курская, 18');into
params (object_id, attr_id, text_value) values (19, 12, 'г. Киев, ул. О.Вишни, 78');into
params (object_id, attr_id, text_value) values (21, 12, 'г. Сумы, ул. Береговая, 104');
-E-mailinto params (object_id, attr_id,
text_value) values (11, 13, 'jhsdfjskl@yandex.ru');into params (object_id,
attr_id, text_value) values (12, 13, '123mjhj@yandex.ru');into params
(object_id, attr_id, text_value) values (13, 13, 'loigerg@mail.ru');into params
(object_id, attr_id, text_value) values (14, 13, 'vcmhdl@bk.ru');into params
(object_id, attr_id, text_value) values (15, 13, 'oehcpspss@yandex.ru');into
params (object_id, attr_id, text_value) values (16, 13, 'juise@yandex.ru');into
params (object_id, attr_id, text_value) values (17, 13,
'lidufklasjd@mail.ru');into params (object_id, attr_id, text_value) values (18,
13, 'isdkasd@yandex.ru');into params (object_id, attr_id, text_value) values
(19, 13, 'lskdjflskdj@yandex.ru');into params (object_id, attr_id, text_value)
values (21, 13, 'kudfkjdkdldd@yandex.ru');
-Otherinto params (object_id, attr_id,
text_value) values (11, 14, null);into params (object_id, attr_id, text_value)
values (12, 14, null);into params (object_id, attr_id, text_value) values (13, 14,
'ICQ - 456789');into params (object_id, attr_id, text_value) values (14, 14,
null);into params (object_id, attr_id, text_value) values (15, 14, null);into
params (object_id, attr_id, text_value) values (16, 14, null);into params
(object_id, attr_id, text_value) values (17, 14, null);into params (object_id,
attr_id, text_value) values (18, 14, null);into params (object_id, attr_id,
text_value) values (19, 14, null);into params (object_id, attr_id, text_value)
values (21, 14, null);
;
Создание выборок
1. SELECT o.name, p1.text_value , EXTRACT
(YEAR FROM SYSDATE) - EXTRACT (YEAR FROM p2.date_value) Stazh
FROM objects o JOIN
params p1
ON o.object_id=p1.object_id
AND p1.attr_id=4
JOIN params p2
ON o.object_id=p2.object_id
AND p2.attr_id=5; -- выводит сотрудников, их специальности и стаж работы (использование функции - EXTRACT)
2. select o.name, p1.text_value,
p2.text_value, p3.number_value
from objects o join
params p1
on o.object_id=p1.object_id
and p1.attr_id=4
join params p2
on
p1.object_id=p2.object_id and p2.attr_id=3
join params p3
on p2.object_id=p3.object_id and p3.attr_id=8; -- выводит
ФИО, специальность, паспортные данные и заработную плату сотрудников (выборка)
3. select distinct text_value
from params
where attr_id=4; -- выводит уникальные записи
должностей (проекция)
Выводы
Выполняя курсовую работу, я освоила язык для создания баз
данных - SQL. Моей задачей было создание базы данных некоего предприятия. Во
время выполнения задания я изучила основные понятия и компоненты этого языка:
типы моделей, структура сущностей (таблиц), выражения SQL , DML (разность, проекция,
пересечение, выборка, объединение), соединения, функции, операторы
(арифметические, AND, IN, NOT IN…), иерархию данных, метамодель и многое другое.
Самым сложным в понимании мне показались соединения и
метамодель, но я преодолела эти трудности.
Итогом моей работы стала полноценная база данных предприятия,
которую можно использовать для различных целей.
Список литературы
1.
А.
Чекалов. Базы данных: от проектирования до разработки приложений - СПб.:
БХВ-Петербург, 2003. - 384 с.