Разработка серверной части информационной системы для сопровождения процесса выдачи заработной платы
Следовательно, диаграмма вариантов использованияэто диаграмма на которой показываются отношения между актёрами и вариантами использования. С помощью этой диаграммы мы обозначили общие границы моделируемой предметной области на начальном уровне проектирования системы. С помощью этой модели мы можем детализировать нашу систему и на её основе создаём диаграмму, на которой показано более детальная… Читать ещё >
Разработка серверной части информационной системы для сопровождения процесса выдачи заработной платы (реферат, курсовая, диплом, контрольная)
Министерство образования, науки, молодежи и спорта Украины Сумской государственный университет Кафедра компьютерных наук Курсовая работа по дисциплине «Базы данных»
тема: «Разработка серверной части информационной системы для сопровождения процесса выдачи заработной платы»
Подготовила: студентка группы ИН-82
Данечкина Яна Проверил: Чекалов А. П.
Сумы
Постановка задачи
Отдел кадров и бухгалтерия некоторой компании:
— сотрудники: ФИО, паспортные данные, дом. и моб. телефоны;
— отдел: комната, раб. телефоны (в т.ч. местный), подчинённые сотрудники, должность, тип (ы) работы, задание (я), проект (ы), размер зарплаты, форма зарплаты (почасовая, фиксированная).
Построение use case диаграммы
На первом этапе предпроектного исследования выяснено, что основная задача разрабатываемой системы — сопровождение процесса выдачи заработной платы.
Use case диаграмма:
Рисунок 2.1 — Концептуальная модель 0-уровня
1. Бухгалтерия запрашивает список сотрудников и данных о них в отделе кадров и получает его.
2. Далее бухгалтерия проводит расчет заработной платы.
3. Передача расчетов и списков сотрудников в кассу.
4. В кассе происходит проверка паспорта и выдача заработной платы.
Следовательно, диаграмма вариантов использованияэто диаграмма на которой показываются отношения между актёрами и вариантами использования. С помощью этой диаграммы мы обозначили общие границы моделируемой предметной области на начальном уровне проектирования системы. С помощью этой модели мы можем детализировать нашу систему и на её основе создаём диаграмму, на которой показано более детальная последовательность действий.
Построение концептуальной модели 1-уровня (диаграмма последовательности действий)
Во время предпроектного исследования составлено следующее описание событий, происходящих при выдаче заработной платы:
1. Бухгалтерия запрашивает список сотрудников и данных о них в отделе кадров и получает его.
2. Далее бухгалтерия проводит расчет заработной платы.
3. Передача расчетов и списков сотрудников в кассу.
4. В кассе происходит проверка паспорта и выдача заработной платы.
Рисунок 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 Атрибуты отношения Штатное расписание
Атрибут | Описание | |
ID | Идентификатор сотрудника | |
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 | Адрес | |
Электронная почта | ||
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 | |
Паспортные_данные | Pasport | 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.
Таблица 4.5 Обоснование типов полей табл. Контактная_инфо
Атрибут | Столбец | Тип данных | Мотивация | Примечание | |
Телефон | Phone | VARCHAR2 (20) | Телефон сотрудника | ||
Адрес | Address | VARCHAR2 (30) | Адрес сотрудника | ||
Электронная почта | VARCHAR2 (30) | Электронная почта сотрудника | |||
Другое | Others | VARCHAR2 (100) | Другие контакты сотрудника | ||
ID _сотрудника | ID_s | NUMBER (2) | ИН сотрудника | PFK | |
Сущности Отделы и Сотрудник, Отделы и Штатное расписание соединены связями «один-ко-многим». При этом происходит мигрирование первичного ключа ID_отдела и преобразование его во внешний. Сущности Сотрудник и Выполняемая работа, Сотрудник и Контактная инфо соединены связями «один-к-одному». При этом происходит мигрирование первичного ключа ID_сотрудника и преобразование его во внешний ключ (Выполняемая работа) или PFK (Контактная инфо).
Окончательная реляционная модель базы данных выглядит следующим образом:
Физическая реализация базы данных
Скрипты
Create table Department (
Nоmer Number NOT NULL, —ИН отдела
Room Number, —Номер занимаемого помещения
Phone Varchar2(20), —Рабочий телефон
Name Varchar2(100)) —Название отдела
Create table Worker (
FIO Varchar2(50), —ФИО сотрудника
Pasport Varchar2(200), —Серия, номер паспорта, кем выдан и прописка
Spesiallity Varchar2(40), —Специальность сотрудника
Years Timestamp (8), —Дата первого трудового дня
ID_s Number NOT NULL, —ИН сотрудника
Number Number NOT NULL) —ИН отдела
Create table List_of_memb (
ID Number NOT NULL, —ИН должности
Post Varchar2(40), —Должность сотрудника
Salary Number (8,3), —Ставка по занимаемой должности
Nоmer Number NOT NULL) —ИН отдела
Create table Work (
task Varchar2(200), —Задание сотрудника
salary Number (8,3), —Плата за выполненное задание
kind_of_work Varchar2(20), —Тип выполняемой работы
kind_of_salary Varchar2(20), —Тип оплаты
ID_s Number NOT NULL) — ИН сотрудника
Create table Contact_info (
Phone Varchar2(20), —Телефон сотрудника
Address 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)
Alter table Worker add Constraint pk_Worker primary key (ID_s)
Alter table List_of_memb add Constraint pk_List_of_memb primary key (ID)
Alter table Work add Constraint pk_Work primary key (ID_s)
Alter table Contact_info add Constraint pk_Contact_info primary key (ID_s)
Alter table List_of_memb add foreign key (Nоmer) references Department (Nоmer)
Alter table Worker add foreign key (Nоmer) references Department (Nоmer)
Alter table Contact_info add foreign key (ID_s) references Worker (ID_s)
Alter table Work add foreign key (ID_s) references Worker (ID_s)
commit;
Заполнение таблиц
—Department
INSERT INTO Department VALUES (1, 21, '(0542)236−743', 'Бухгалтерия');
INSERT INTO Department VALUES (2, 143, '(0542)298−756', 'Отдел кадров');
INSERT INTO Department VALUES (3, null, '(0542)255−733', 'Пропускн_пункт');
INSERT INTO Department VALUES (4, 32, '(0542)278−736', 'Тех_отдел');
INSERT INTO Department VALUES (5, 24, '(0542)243−721', 'Тест_отдел');
—Worker
INSERT INTO Worker VALUES ('Костюк А. О.','MB347856, Сумским ГРО УМВД 20.09.03, прописка — г. Сумы', 'Бухгалтер', TO_DATE ('2007;02−22', 'YYYY-MM-DD'), 1, 1);
INSERT INTO Worker VALUES ('Миненко В. А.','MB836472, Сумским ГРО УМВД 15.05.96, прописка — г. Сумы', 'Бухгалтер', TO_DATE ('2002;04−12', 'YYYY-MM-DD'), 2, 1);
INSERT INTO Worker VALUES ('Чешкин Б. В.','MB917382, Конотопским ГРО УМВД 20.03.93, прописка — г. Конотоп', 'Менеджер', TO_DATE ('2005;02−12', 'YYYY-MM-DD'), 3, 2);
INSERT INTO Worker VALUES ('Синь Е. Р.','MB153728, Сумским ГРО УМВД 17.04.76, прописка — г. Сумы', 'Вахтер', TO_DATE ('2010;07−30', 'YYYY-MM-DD'), 4, 3);
INSERT INTO Worker VALUES ('Ешеренев П. Г.','MB153728, Белопольским ГРО УМВД 28.08.74, прописка — г. Ворожба', 'Вахтер', TO_DATE ('2009;05−20', 'YYYY-MM-DD'), 5, 3);
INSERT INTO Worker VALUES ('Соломкина А. А.','MB635217, Сумским ГРО УМВД 25.06.71, прописка — г. Сумы', 'Вахтер', TO_DATE ('2004;06−18', 'YYYY-MM-DD'), 6, 3);
INSERT INTO Worker VALUES ('Масько П. Л.','MB762534, Ахтырским ГРО УМВД 20.09.95, прописка — г. Ахтырка', 'Менеджер', TO_DATE ('2007;10−29', 'YYYY-MM-DD'), 7, 4);
INSERT INTO Worker VALUES ('Кучер Ф. Г.','MB453277, Харьковским ГРО УМВД 10.09.96, прописка — г. Харьков', 'Тестер', TO_DATE ('2001;10−22', 'YYYY-MM-DD'), 8, 5);
INSERT INTO Worker VALUES ('Шинкарюк Л. Д.','MB256346, Киевским ГРО УМВД 05.06.92, прописка — г. Киев', 'Тестер', TO_DATE ('2002;11−28', 'YYYY-MM-DD'), 9, 5);
INSERT INTO Worker VALUES ('Воронная Н. Д.','MB736488, Сумским ГРО УМВД 20.09.98, прописка — г. Сумы', 'Тестер', TO_DATE ('2003;12−01', 'YYYY-MM-DD'), 10, 5);
—List_of_memb
INSERT INTO List_of_memb VALUES (1, 'Бухгалтер', 2000, 1);
INSERT INTO List_of_memb VALUES (2, 'Менеджер o/к', 1800, 2);
INSERT INTO List_of_memb VALUES (3, 'Вахтер', 800, 3);
INSERT INTO List_of_memb VALUES (4, 'Менеджер т/o', 2500, 4);
INSERT INTO List_of_memb VALUES (5, 'Тестер', 2300, 5);
—Work
INSERT INTO Work VALUES (null, 2000, 'на предпр.', 'почасовая', 1);
INSERT INTO Work VALUES (null, 2000, 'на предпр.', 'почасовая', 2);
INSERT INTO Work VALUES (null, 1800, 'на предпр.', 'почасовая', 3);
INSERT INTO Work VALUES (null, 800, 'на предпр.', 'почасовая', 4);
INSERT INTO Work VALUES (null, 800, 'на предпр.', 'почасовая', 5);
INSERT INTO Work VALUES (null, 800, 'на предпр.', 'почасовая', 6);
INSERT INTO Work VALUES (null, 2500, 'на предпр.', 'почасовая', 7);
INSERT INTO Work VALUES ('тестирование офисного прогр. обесп.', 2300, 'на предпр.', 'фиксир.', 8);
INSERT INTO Work VALUES ('тестирование пользовательского прогр. обесп.', 2300, 'на дому', 'фиксир.', 9);
INSERT INTO Work VALUES ('тестирование системного прогр. обесп.', 2300, 'на предпр.', 'фиксир.', 10);
—Contact_info
INSERT INTO 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 ('(5 456)5−36−34', 'ул. Ленина, 257', 'loigerg@mail.ru', 'ICQ — 456 789', 3);
INSERT INTO Contact_info VALUES ('(0542)674−256', 'ул. Октября, 3', 'vcmhdl@bk.ru', null, 4);
INSERT INTO Contact_info VALUES ('(5 423)7−36−89', 'ул. Колпака, 34', 'oehcpspss@yandex.ru', null, 5);
INSERT INTO Contact_info VALUES ('(0542)648−820', 'ул. Харьковска, 23', 'juise@yandex.ru', null, 6);
INSERT INTO Contact_info VALUES ('(5 446)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);
INSERT INTO Contact_info VALUES ('(0542)836−358', 'ул. Береговая, 104', 'kudfkjdkdldd@yandex.ru', null, 10);
Department
Worker
List_of_memb
Work
проектирование база данных логический метамодель
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 грн. (разность)
Мапирование реляционной модели в метамодель
Классической методикой проектирования баз данных является создание отдельной таблицы для каждой описываемой моделью данных сущности. Такой подход хорошо работает для БД с относительно небольшим количеством описываемых объектов и при несложных и статичных связях между ними. Однако любое изменение структуры хранимых данных приводит к внесению изменений в структуру таблиц, отображающих эти данные. Несложная на этапе разработки, эта операция становится крайне проблематичной при больших объемах данных и при отсутствии у разработчика непосредственного доступа к БД (например, если она находится у заказчика).
Пять основных тезисов, на которых должна строиться проектируемая база данных:
1. Каждая сущность, информация о которой хранится в БД, — это объект.
2. Каждый объект уникален в пределах БД и имеет уникальный идентификатор.
3. Объект имеет свойства (строковые, числовые, временные, перечислимые), которые описывают атрибуты сущности.
4. Объекты могут быть связаны между собой произвольным образом. Связь характеризуется связанными объектами и типом связи.
5. Объект может быть хранилищем. В этом случае допускается хранение в нем других объектов.
Такая структура базы данных не привязана ни к какой бизнес-модели и позволяет реализовать на этой основе практически любую бизнес-логику.
Построение диаграммы классов для метамодели
Исходя из описанных выше утверждений, была спроектирована диаграмма классов, которая удовлетворяет этим тезисам (рис. 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 | Номер атрибута | Foreign Key | |
Текстовое_значение | text_value | VARCHAR2(150) | Поле для текстовых данных | ||
Номерное_значение | number_value | NUMBER | Поле для цифровых данных | ||
Дата | date_value | DATE | Поле для дат | ||
Схема метамодели была реализована так:
Физическая реализация метамодели
Скрипты
drop table params;
drop table attributes;
drop table objects;
drop table object_types;
— Create tables
Create table object_types (
object_type_id Number NOT NULL ,
name Varchar2(100),
description Varchar2(1000));
Create table objects (
object_id Number NOT NULL ,
object_type_id Number NOT NULL ,
name Varchar2(100));
Create table attributes (
attr_id Number NOT NULL ,
object_type_id Number NOT NULL ,
name Varchar2(100));
Create table params (
object_id Number NOT NULL ,
attr_id Number NOT NULL ,
text_value Varchar2(1000),
number_value Number,
date_value DATE);
— Create primary keys
Alter table object_types add primary key (object_type_id);
Alter table objects add primary key (object_id);
Alter table attributes add primary key (attr_id);
— Create foreign keys
Alter table objects
add Constraint r5 foreign key (object_type_id)
references object_types (object_type_id) on delete cascade;
Alter table attributes
add foreign key (object_type_id)
references object_types (object_type_id) ;
Alter table params
add Constraint r6 foreign key (object_id)
references objects (object_id) ;
Alter table params
add Constraint r7 foreign key (attr_id)
references attributes (attr_id) ;
commit;
Заполнение таблиц
delete from params;
delete from objects;
delete from attributes;
delete from object_types;
—object_types (object_type_id, name, description)
insert into object_types values (1, 'Department', null);
insert into object_types values (2, 'Worker', null);
insert into object_types values (3, 'List_of_memb', 'List_of_members');
insert into object_types values (4, 'Work', null);
insert into object_types values (5, 'Contact_info', 'Contact_information');
—attributes (attr_id, object_type_id, name)
insert into attributes values (1, 1, 'Room');
insert into attributes values (2, 1, 'Phone');
insert into attributes values (3, 2, 'Pasport');
insert into attributes values (4, 2, 'Spesiallity');
insert into attributes values (5, 2, 'Years');
insert into attributes values (6, 3, 'Salary');
insert into attributes values (7, 4, 'Task');
insert into attributes values (8, 4, 'Salary');
insert into attributes values (9, 4, 'Kind_of_work');
insert into attributes values (10, 4, 'Kind_of_salary');
insert into attributes values (11, 5, 'Phone');
insert into attributes values (12, 5, 'Address');
insert into attributes values (13, 5, 'E-mail');
insert into attributes values (14, 5, 'Others');
—objects (object_id, object_type_id, name)
—Department
insert into objects values (10, 1, 'Бухгалтерия');
insert into objects values (20, 1, 'Отдел кадров');
insert into objects values (30, 1, 'Пропускн_пункт');
insert into objects values (40, 1, 'Тех_отдел');
insert into objects values (50, 1, 'Тест_отдел');
—Worker
insert into objects values (11, 2, 'Костюк А. О.');
insert into objects values (12, 2, 'Миненко В. А.');
insert into objects values (13, 2, 'Чешкин Б. В.');
insert into objects values (14, 2, 'Синь Е. Р.');
insert into objects values (15, 2, 'Ешеренев П. Г.');
insert into objects values (16, 2, 'Соломкина А. А.');
insert into objects values (17, 2, 'Масько П. Л.');
insert into objects values (18, 2, 'Кучер Ф. Г.');
insert into objects values (19, 2, 'Шинкарюк Л. Д.');
insert into objects values (21, 2, 'Воронная Н. Д.');
—List_of_memb
insert into objects values (1, 3, 'Бухгалтер');
insert into objects values (2, 3, 'Менеджер ок');
insert into objects values (3, 3, 'Вахтер');
insert into objects values (4, 3, 'Менеджер то');
insert into objects values (5, 3, 'Тестер');
—params (object_id, attr_id, text_value, number_value, date_value)
—Department => Room
insert into params (object_id, attr_id, number_value) values (10, 1, 21);
insert into params (object_id, attr_id, number_value) values (20, 1, 143);
insert into params (object_id, attr_id, number_value) values (30, 1, null);
insert into params (object_id, attr_id, number_value) values (40, 1, 32);
insert into params (object_id, attr_id, number_value) values (50, 1, 24);
—Department => Phone
insert into params (object_id, attr_id, text_value) values (10, 2, '(0542)236−743');
insert into params (object_id, attr_id, text_value) values (20, 2, '(0542)298−756');
insert into params (object_id, attr_id, text_value) values (30, 2, '(0542)255−733');
insert into params (object_id, attr_id, text_value) values (40, 2, '(0542)278−736');
insert into params (object_id, attr_id, text_value) values (50, 2, '(0542)243−721');
—Worker => Pasport
insert into params (object_id, attr_id, text_value) values (11, 3, 'MB347856, Сумским ГРО УМВД 20.09.03, прописка — г. Сумы');
insert into params (object_id, attr_id, text_value) values (12, 3, 'MB836472, Сумским ГРО УМВД 15.05.96, прописка — г. Сумы');
insert into params (object_id, attr_id, text_value) values (13, 3, 'MB917382, Конотопским ГРО УМВД 20.03.93, прописка — г. Конотоп');
insert into params (object_id, attr_id, text_value) values (14, 3, 'MB153728, Сумским ГРО УМВД 17.04.76, прописка — г. Сумы');
insert into params (object_id, attr_id, text_value) values (15, 3, 'MB153728, Белопольским ГРО УМВД 28.08.74, прописка — г. Ворожба');
insert into params (object_id, attr_id, text_value) values (16, 3, 'MB635217, Сумским ГРО УМВД 25.06.71, прописка — г. Сумы');
insert into params (object_id, attr_id, text_value) values (17, 3, 'MB762534, Ахтырским ГРО УМВД 20.09.95, прописка — г. Ахтырка');
insert into params (object_id, attr_id, text_value) values (18, 3, 'MB453277, Харьковским ГРО УМВД 10.09.96, прописка — г. Харьков');
insert into params (object_id, attr_id, text_value) values (19, 3, 'MB256346, Киевским ГРО УМВД 05.06.92, прописка — г. Киев');
insert into params (object_id, attr_id, text_value) values (21, 3, 'MB736488, Сумским ГРО УМВД 20.09.98, прописка — г. Сумы');
—Worker => Spesiallity
insert into params (object_id, attr_id, text_value) values (11, 4, 'Бухгалтер');
insert into params (object_id, attr_id, text_value) values (12, 4, 'Бухгалтер');
insert into params (object_id, attr_id, text_value) values (13, 4, 'Менеджер');
insert into params (object_id, attr_id, text_value) values (14, 4, 'Вахтер');
insert into params (object_id, attr_id, text_value) values (15, 4, 'Вахтер');
insert into params (object_id, attr_id, text_value) values (16, 4, 'Вахтер');
insert into params (object_id, attr_id, text_value) values (17, 4, 'Менеджер');
insert into params (object_id, attr_id, text_value) values (18, 4, 'Тестер');
insert into params (object_id, attr_id, text_value) values (19, 4, 'Тестер');
insert into params (object_id, attr_id, text_value) values (21, 4, 'Тестер');
—Worker => Years
insert into params (object_id, attr_id, date_value) values (11, 5, TO_DATE ('2007;02−22', 'YYYY-MM-DD'));
insert into params (object_id, attr_id, date_value) values (12, 5, TO_DATE ('2002;04−12', 'YYYY-MM-DD'));
insert into params (object_id, attr_id, date_value) values (13, 5, TO_DATE ('2005;02−12', 'YYYY-MM-DD'));
insert into params (object_id, attr_id, date_value) values (14, 5, TO_DATE ('2010;07−30', 'YYYY-MM-DD'));
insert into params (object_id, attr_id, date_value) values (15, 5, TO_DATE ('2009;05−20', 'YYYY-MM-DD'));
insert into params (object_id, attr_id, date_value) values (16, 5, TO_DATE ('2004;06−18', 'YYYY-MM-DD'));
insert into params (object_id, attr_id, date_value) values (17, 5, TO_DATE ('2007;10−29', 'YYYY-MM-DD'));
insert into params (object_id, attr_id, date_value) values (18, 5, TO_DATE ('2001;10−22', 'YYYY-MM-DD'));
insert into params (object_id, attr_id, date_value) values (19, 5, TO_DATE ('2002;11−28', 'YYYY-MM-DD'));
insert into params (object_id, attr_id, date_value) values (21, 5, TO_DATE ('2003;12−01', 'YYYY-MM-DD'));
—List_of_memb => Salary
insert into params (object_id, attr_id, number_value) values (1, 6, 2000);
insert into params (object_id, attr_id, number_value) values (2, 6, 1800);
insert into params (object_id, attr_id, number_value) values (3, 6, 800);
insert into params (object_id, attr_id, number_value) values (4, 6, 2500);
insert into params (object_id, attr_id, number_value) values (5, 6, 2300);
—Work => Task
insert into params (object_id, attr_id, text_value) values (11, 7, null);
insert into params (object_id, attr_id, text_value) values (12, 7, null);
insert into params (object_id, attr_id, text_value) values (13, 7, null);
insert into params (object_id, attr_id, text_value) values (14, 7, null);
insert into params (object_id, attr_id, text_value) values (15, 7, null);
insert into params (object_id, attr_id, text_value) values (16, 7, null);
insert into params (object_id, attr_id, text_value) values (17, 7, null);
insert into params (object_id, attr_id, text_value) values (18, 7, 'тестирование офисного прогр. обесп.');
insert into params (object_id, attr_id, text_value) values (19, 7, 'тестирование пользовательского прогр. обесп.');
insert into params (object_id, attr_id, text_value) values (21, 7, 'тестирование системного прогр. обесп.');
—Work => Salary
insert into params (object_id, attr_id, number_value) values (11, 8, 2000);
insert into params (object_id, attr_id, number_value) values (12, 8, 2000);
insert into params (object_id, attr_id, number_value) values (13, 8, 1800);
insert into params (object_id, attr_id, number_value) values (14, 8, 800);
insert into params (object_id, attr_id, number_value) values (15, 8, 800);
insert into params (object_id, attr_id, number_value) values (16, 8, 800);
insert into params (object_id, attr_id, number_value) values (17, 8, 2500);
insert into params (object_id, attr_id, number_value) values (18, 8, 2300);
insert into params (object_id, attr_id, number_value) values (19, 8, 2300);
insert into params (object_id, attr_id, number_value) values (21, 8, 2300);
—Work => Kind_of_work
insert into params (object_id, attr_id, text_value) values (11, 9, 'на предпр.');
insert into params (object_id, attr_id, text_value) values (12, 9, 'на предпр.');
insert into params (object_id, attr_id, text_value) values (13, 9, 'на предпр.');
insert into params (object_id, attr_id, text_value) values (14, 9, 'на предпр.');
insert into params (object_id, attr_id, text_value) values (15, 9, 'на предпр.');
insert into params (object_id, attr_id, text_value) values (16, 9, 'на предпр.');
insert into params (object_id, attr_id, text_value) values (17, 9, 'на предпр.');
insert into params (object_id, attr_id, text_value) values (18, 9, 'на предпр.');
insert into params (object_id, attr_id, text_value) values (19, 9, 'на дому');
insert into params (object_id, attr_id, text_value) values (21, 9, 'на предпр.');
—Work => Kind_of_salary
insert into params (object_id, attr_id, text_value) values (11, 10, 'почасовая');
insert into params (object_id, attr_id, text_value) values (12, 10, 'почасовая');
insert into params (object_id, attr_id, text_value) values (13, 10, 'почасовая');
insert into params (object_id, attr_id, text_value) values (14, 10, 'почасовая');
insert into params (object_id, attr_id, text_value) values (15, 10, 'почасовая');
insert into params (object_id, attr_id, text_value) values (16, 10, 'почасовая');
insert into params (object_id, attr_id, text_value) values (17, 10, 'почасовая');
insert into params (object_id, attr_id, text_value) values (18, 10, 'фиксир.');
insert into params (object_id, attr_id, text_value) values (19, 10, 'фиксир.');
insert into params (object_id, attr_id, text_value) values (21, 10, 'фиксир.');
—Contact_info
—Phone
insert into params (object_id, attr_id, text_value) values (11, 11, '(0542)736−839');
insert into params (object_id, attr_id, text_value) values (12, 11, '(0542)736−839');
insert into params (object_id, attr_id, text_value) values (13, 11, '(5 456)5−36−34');
insert into params (object_id, attr_id, text_value) values (14, 11, '(0542)674−256');
insert into params (object_id, attr_id, text_value) values (15, 11, '(5 423)7−36−89');
insert into params (object_id, attr_id, text_value) values (16, 11, '(0542)648−820');
insert into params (object_id, attr_id, text_value) values (17, 11, '(5 446)2−49−88');
insert into params (object_id, attr_id, text_value) values (18, 11, '(065)473−68−39');
insert into params (object_id, attr_id, text_value) values (19, 11, '(044)273−61−21');
insert into params (object_id, attr_id, text_value) values (21, 11, '(0542)836−358');
—Address
insert into params (object_id, attr_id, text_value) values (11, 12, 'г. Сумы, ул. Ахтырская, 3');
insert into params (object_id, attr_id, text_value) values (12, 12, 'г. Сумы, ул. Кирова, 32');
insert into params (object_id, attr_id, text_value) values (13, 12, 'г. Конотоп, ул. Ленина, 257');
insert into params (object_id, attr_id, text_value) values (14, 12, 'г. Сумы, ул. Октября, 3');
insert into params (object_id, attr_id, text_value) values (15, 12, 'г. Ворожба, ул. Колпака, 34');
insert into params (object_id, attr_id, text_value) values (16, 12, 'г. Сумы, ул. Харьковска, 23');
insert into params (object_id, attr_id, text_value) values (17, 12, 'г. Ахтырка, ул. Шевченка, 2');
insert into params (object_id, attr_id, text_value) values (18, 12, 'г. Харьков, ул. Курская, 18');
insert into params (object_id, attr_id, text_value) values (19, 12, 'г. Киев, ул. О. Вишни, 78');
insert into params (object_id, attr_id, text_value) values (21, 12, 'г. Сумы, ул. Береговая, 104');
insert into params (object_id, attr_id, text_value) values (11, 13, 'jhsdfjskl@yandex.ru');
insert into params (object_id, attr_id, text_value) values (12, 13, '123mjhj@yandex.ru');
insert into params (object_id, attr_id, text_value) values (13, 13, 'loigerg@mail.ru');
insert into params (object_id, attr_id, text_value) values (14, 13, 'vcmhdl@bk.ru');
insert into params (object_id, attr_id, text_value) values (15, 13, 'oehcpspss@yandex.ru');
insert into params (object_id, attr_id, text_value) values (16, 13, 'juise@yandex.ru');
insert into params (object_id, attr_id, text_value) values (17, 13, 'lidufklasjd@mail.ru');
insert into params (object_id, attr_id, text_value) values (18, 13, 'isdkasd@yandex.ru');
insert into params (object_id, attr_id, text_value) values (19, 13, 'lskdjflskdj@yandex.ru');
insert into params (object_id, attr_id, text_value) values (21, 13, 'kudfkjdkdldd@yandex.ru');
—Other
insert into params (object_id, attr_id, text_value) values (11, 14, null);
insert into params (object_id, attr_id, text_value) values (12, 14, null);
insert into params (object_id, attr_id, text_value) values (13, 14, 'ICQ — 456 789');
insert into params (object_id, attr_id, text_value) values (14, 14, null);
insert into params (object_id, attr_id, text_value) values (15, 14, null);
insert into params (object_id, attr_id, text_value) values (16, 14, null);
insert into params (object_id, attr_id, text_value) values (17, 14, null);
insert into params (object_id, attr_id, text_value) values (18, 14, null);
insert into params (object_id, attr_id, text_value) values (19, 14, null);
insert into params (object_id, attr_id, text_value) values (21, 14, null);
commit;
Создание выборок
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…), иерархию данных, метамодель и многое другое.
Самым сложным в понимании мне показались соединения и метамодель, но я преодолела эти трудности.
Итогом моей работы стала полноценная база данных предприятия, которую можно использовать для различных целей.
А. Чекалов. Базы данных: от проектирования до разработки приложений _ СПб.: БХВ-Петербург, 2003. — 384 с.