Отдел кадров предприятия
Создадим хранимую процедуру, которая из конкретной таблицы отбирает строки по условию, налагаемому на значения конкретных двух столбцов. Эта процедура будет иметь два входных параметра, задающих значения для отбора данных по каждому из этих столбцов. При этом значение NULL будет трактоваться как отсутствие какого-либо критерия отбора строк по данному столбцу (например, если оба параметра будут… Читать ещё >
Отдел кадров предприятия (реферат, курсовая, диплом, контрольная)
МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ БЕЛОРУСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ Кафедра экономической информатики Инженерно-экономический факультет
Индивидуальная работа по дисциплине «Базы данных»
на тему: «Отдел кадров предприятия»
Выполнила:
студентка гр. 972 303
Шлык В.С.
Проверил: Бутов А.А.
Минск, 2011
- ВВЕДЕНИЕ
- 1. ПОСТАНОВКА ЗАДАЧИ
- 2. ПРОЕКТИРОВАНИЕ МОДЕЛИ БАЗЫ ДАННЫХ В ERwin
- 3. СОЗДАНИЕ БАЗЫ ДАННЫХ В СУБД MS ACCESS
4. Создание базы данных в SQL Server Management Studio
- 5. ВЫПОЛНЕНИЕ ПРОЦЕДУР И ФУНКЦИЙ
- ЗАКЛЮЧЕНИЕ
- ЛИТЕРАТУРА
- ПриЛожение
Большинство приложений, которые предназначены для выполнения хотя бы какой-нибудь полезной работы, тем или иным образом используют структурированную информацию или, другими словами, упорядоченные данные. Такими данными могут быть, например, списки заказов на тот или иной товар, списки предъявленных и оплаченных счетов или список телефонных номеров ваших знакомых. Обычное расписание движения автобусов в городе — это тоже пример упорядоченных данных.
При компьютерной обработке информации, упорядоченные каким-либо образом данные принято хранить в базах данных — особых файлах, использование которых вместе со специальными программными средствами позволяет пользователю как просматривать необходимую информацию, так и, по мере необходимости, манипулировать ею, например, добавлять, изменять, копировать, удалять, сортировать и т. д.
Целью индивидуальной работы является создание базы данных для организации кадров на предприятии. Для достижения поставленной цели в индивидуальной работе нам надо:
— изучить предметную область;
— разработать логическую и физическую модель системы;
— создать базу данных и хранимые процедуры с СУБД MS SQL Server.
1. ПОСТАНОВКА ЗАДАЧИ
1. Разработать с помощью Erwin логическую и физическую модели данных для проектируемой базы данных.
2. Путем прямого проектирования получить файл базы данных в формате Access.
3. Создать SQL-сценарий, который позволяет сгенерировать базу данных в формате MS SQL Server 2005, а также наполнить созданную базу данных конкретными данными.
4. Дополнить сценарий текстами перечисленных ниже хранимых процедур:
— Создадим хранимую процедуру, которая для указанной таблицы подсчитывает число строк, содержащихся в этой таблице. Эта процедура будет иметь один входной параметр (с помощью которого задается имя таблицы) и один выходной параметр.
— Создадим хранимую процедуру, которая изменяет все даты, имеющиеся в таблицах базы данных, добавляя к ним или отнимая от них некоторое число дней. Эта процедура будет иметь два входных параметра. Первый параметр определяет, нужно ли увеличивать или уменьшать все даты.
Второй параметр указывает количество дней, которые должны добавляться или отниматься.
— Создадим хранимую процедуру, которая для конкретной таблицы подсчитывает минимальное, среднее, максимальное и суммарное значения в столбце числового типа. Эта процедура будет иметь один входной параметр (с помощью которого указывается имя или номер столбца) и четыре выходных параметра.
— Создадим хранимую процедуру, которая из конкретной таблицы отбирает строки по условию, налагаемому на значения конкретных двух столбцов. Эта процедура будет иметь два входных параметра, задающих значения для отбора данных по каждому из этих столбцов. При этом значение NULL будет трактоваться как отсутствие какого-либо критерия отбора строк по данному столбцу (например, если оба параметра будут иметь значение NULL, то будут выбраны все строки таблицы).
5. Разработать SQL-код для проверки работы созданных хранимых процедур.
2. ПРОЕКТИРОВАНИЕ МОДЕЛИ БАЗЫ ДАННЫХ В ERWIN
Цель этапа:
1) проанализировать предметную область;
2) определить сущности предметной области;
3) определить логические связи.
В данном индивидуальном проекте планируется детально рассмотреть организацию отдела кадров предприятия. В современных базах данных редко встречаются таблицы, никак не связанные с другими таблицами. Часто данные, которые, на первый взгляд, можно расположить в одной таблице, нужно «разнести» в несколько более мелких таблиц. Такой подход позволяет более эффективно управлять данными, исключить дублирование информации и уменьшить объём, который она занимает.
На основе анализа предметной области мною были разработаны с помощью Erwin логическая и физическая (рисунок 2.1) модели данных базы данных для отдела кадров на предприятии.
Рисунок 2.1. Физическая модель базы данных.
В ходе разработки проекта и детального анализа я выделила сущности предметной области и их атрибуты, представленные в таблице 2.1.
Таблица 2.1. Сущности и их атрибуты
Сущность | Атрибут | Тип данных | |
Штатное Расписание | Номер | Number | |
КодСотрудника | Number | ||
КоличествоЧасов | Number | ||
Пропуски | Number | ||
Причина | String | ||
Контракт | КодКонтракта | Number | |
КодСотрудника | Number | ||
ДатаОт | Datetime | ||
ДатаДо | Datetime | ||
Заметки | String | ||
Должность | КодДолжности | Number | |
Должность | String | ||
Премия | Number | ||
Разряд | Number | ||
Оклад | Number | ||
Подразделение | КодПодразделения | Number | |
Подразделение | String | ||
Численность | Number | ||
Руководитель | String | ||
Военнообязанные | Номер | Number | |
КодСотрудника | Number | ||
СемейноеПоложение | String | ||
ДолгЛет | Number | ||
Отсрочка | Number | ||
Сотрудник | КодСотрудника | Number | |
ФИО | String | ||
КодПодразделения | Number | ||
КодДолжности | Number | ||
Образование | String | ||
Пол | String | ||
Возраст | Number | ||
Телефон | Number | ||
В результате данного этапа были определены сущности логической модели, а также свойства сущностей и ключевые атрибуты, логические связи между сущностями с помощью программы Erwin Data Modeler.
3. СОЗДАНИЕ БАЗЫ ДАННЫХ В СУБД MS ACCESS
На основе проведенного анализа предметной области и проведенного в ErWin моделирование базы данных для управления АЗС была создана автоматически база данных в СУБД Access. Схема созданной базы данных приведена на рисунке 3.1.
Рисунок 3.1 Схема базы данных в СУБД MS ACCESS.
4. Создание базы данных в SQL Server Management Studio
Следующим этапом в выполнении задания является создание SQL-скрипта, который сгенерирует аналогичную базу данных для MS SQL Server 2005. Код создания базы данных и ввода в таблицы некоторых значений, приведен в ПРИЛОЖЕНИИ 1.
В результате проведенных операций мы создали базу данных Кадры с следующими таблицами и полями:
Штатное Расписание
— Номер
— КодСотрудника
— КоличествоЧасов
— Пропуски
— Причина Контракт
— КодКонтракта
— КодСотрудника
— ДатаОт
— ДатаДо
— Заметки Должность
— КодДолжности
— Должность
— Премия
— Разряд
— Оклад Подразделение
— КодПодразделения
— Подразделение
— Численность
— Руководитель Военнообязанные
— Номер
— КодСотрудника
— СемейноеПоложение
— ДолгЛет
— Отсрочка Сотрудник
— КодСотрудника
— ФИО
— КодПодразделения
— КодДолжности
— Образование
— Пол
— Возраст
— Телефон, А также мы ввели в таблицу значения, представленные на рисунке 4.1.
Рисунок 4.1. Созданные таблицы и введенные в них значения.
5 ВЫПОЛНЕНИЕ ПРОЦЕДУР И ФУНКЦИЙ
Создадим хранимую процедуру, которая для указанной таблицы подсчитывает число строк, содержащихся в этой таблице. Эта процедура будет иметь один входной параметр (с помощью которого задается имя таблицы) и один выходной параметр.
Код данной процедуры представлен ниже:
CREATE PROCEDURE pr_ПодсчетСтрок
@ИмяТаблицы VARCHAR (20),
@ЧислоСтрок INT OUTPUT
AS
IF (@ИмяТаблицы = 'Подразделения')
SELECT @ЧислоСтрок = COUNT (*)
FROM Подразделения
ELSE IF (@ИмяТаблицы = 'Должность')
SELECT @ЧислоСтрок = COUNT (*)
FROM Должность
ELSE IF (@ИмяТаблицы = 'Сотрудник')
SELECT @ЧислоСтрок = COUNT (*)
FROM Сотрудник
ELSE IF (@ИмяТаблицы = 'ШтатноеРасписание')
SELECT @ЧислоСтрок = COUNT (*)
FROM ШтатноеРасписание
ELSE IF (@ИмяТаблицы = 'Контракт')
SELECT @ЧислоСтрок = COUNT (*)
FROM Контракт
ELSE IF (@ИмяТаблицы = 'Военнообязанные')
SELECT @ЧислоСтрок = COUNT (*)
FROM Военнообязанные
GO
DECLARE @NAME_TABLE VARCHAR (20), @COUNT_STR INT
SET @NAME_TABLE = 'Контракт'
EXEC pr_ПодсчетСтрок @NAME_TABLE, @COUNT_STR OUTPUT
SELECT @NAME_TABLE [НАЗВАНИЕ_ТАБЛИЦЫ],@COUNT_STR [ЧИСЛО_СТРОК]
Результаты работы процедуры представлены на рисунке 6.1
Рисунок 6.1. Результаты работы процедуры.
Создадим хранимую процедуру, которая изменяет все даты, имеющиеся в таблицах базы данных, добавляя к ним или отнимая от них некоторое число дней. Эта процедура будет иметь два входных параметра. Первый параметр определяет, нужно ли увеличивать или уменьшать все даты. Второй параметр указывает количество дней, которые должны добавляться или отниматься.
Код данной процедуры представлен ниже:
SELECT *
FROM Контракт
GO
CREATE PROCEDURE pr_ИзменениеДаты
@ФЛАГ VARCHAR (20),
@КОЛ_ДНЕЙ INT
AS
IF (@ФЛАГ = '+')
UPDATE Контракт
SET ДатаОт = ДатаОт + @КОЛ_ДНЕЙ
ELSE
UPDATE Контракт
SET ДатаОт = ДатаОт — @КОЛ_ДНЕЙ
IF (@ФЛАГ = '+')
UPDATE Контракт
SET ДатаДо = ДатаДо + @КОЛ_ДНЕЙ
ELSE
UPDATE Контракт
SET ДатаДо = ДатаДо — @КОЛ_ДНЕЙ
GO
DECLARE @FLAG VARCHAR (20), @KOL_DNEJ INT
SET @FLAG = '+'
SET @KOL_DNEJ = 4
EXEC pr_ИзменениеДаты @FLAG, @KOL_DNEJ
SELECT *
FROM Контракт
GO
Результаты работы процедуры представлены на рисунке 6.2
Рисунок 6.2. Результаты работы процедуры.
Создадим хранимую процедуру, которая для конкретной таблицы подсчитывает минимальное, среднее, максимальное и суммарное значения в столбце числового типа. Эта процедура будет иметь один входной параметр (с помощью которого указывается имя или номер столбца) и четыре выходных параметра.
Код данной процедуры представлен ниже:
CREATE PROCEDURE pr_MinAvrMaxSum_КоличествоЧасов
@ИМЯ_СТОЛБЦА VARCHAR (20),
@МИНИМУМ INT OUTPUT,
@СРЕДНЕЕ INT OUTPUT,
@МАКСИМУМ INT OUTPUT,
@СУММАРНОЕ INT OUTPUT
AS
IF (@ИМЯ_СТОЛБЦА = 'КоличествоЧасов')
SELECT @МИНИМУМ = MIN (КоличествоЧасов), @СРЕДНЕЕ = AVG (КоличествоЧасов), @МАКСИМУМ = MAX (КоличествоЧасов), @СУММАРНОЕ = SUM (КоличествоЧасов)
FROM ШтатноеРасписание
IF (NOT @ИМЯ_СТОЛБЦА LIKE 'КоличествоЧасов')
SELECT @МИНИМУМ = 0, @СРЕДНЕЕ = 0, @МАКСИМУМ = 0, @СУММАРНОЕ = 0
GO
DECLARE @MIN INT, @MAX INT, @AVG INT, @SUM INT, @IMYA_ST VARCHAR (20)
SET @IMYA_ST = 'КоличествоЧасов'
EXEC pr_MinAvrMaxSum_КоличествоЧасов @IMYA_ST, @MIN OUTPUT, @AVG OUTPUT, @MAX OUTPUT, @SUM OUTPUT
SELECT @MIN [МИН], @AVG [СРЕДН], @MAX [МАКС], @SUM [СУММ]
GO
Результаты работы процедуры представлены на рисунке 6.3
Рисунок 6.3. Результаты работы процедуры.
Создадим хранимую процедуру, которая из конкретной таблицы отбирает строки по условию, налагаемому на значения конкретных двух столбцов. Эта процедура будет иметь два входных параметра, задающих значения для отбора данных по каждому из этих столбцов. При этом значение NULL будет трактоваться как отсутствие какого-либо критерия отбора строк по данному столбцу (например, если оба параметра будут иметь значение NULL, то будут выбраны все строки таблицы).
Код данной процедуры представлен ниже:
CREATE PROCEDURE pr_Выбор
@Условие1 INT,
@Условие2 INT
AS
IF (@Условие1 IS NULL AND @Условие2 IS NOT NULL)
SELECT *
FROM Должность
WHERE КодДолжности = @Условие2
ELSE IF (@Условие2 IS NULL AND @Условие1 IS NOT NULL)
SELECT *
FROM Должность
WHERE Оклад = @Условие1
ELSE IF (@Условие1 IS NULL AND @Условие2 IS NULL)
SELECT *
FROM Должность
ELSE IF (@Условие1 IS NOT NULL AND @Условие2 IS NOT NULL)
SELECT *
FROM Должность
WHERE Оклад = @Условие1 AND КодДолжности= @Условие2
GO
DECLARE @УСЛ1 INT, @УСЛ2 INT
SET @УСЛ2 = 1
EXEC pr_Выбор @УСЛ1, NULL
SELECT @УСЛ1 [1 условие], @УСЛ2 [2 условие]
GO
Результаты работы процедуры представлены на рисунке 6.4
Рисунок 6.4. Результаты работы процедуры.
ЗАКЛЮЧЕНИЕ
база данные erwin скрипт процедура
В ходе выполнения работы были закреплены знания о использовании команд языка Transact/SQL и ERwin. Нами были cозданы, заполнены данными, проделаны выборки из таблиц и представлений, обновление и удаление данных, изменение структуры таблицы, удаление таблиц и базы данных. Нами были решены перечень задач: по написанию кода, использующего применение языка Transact/SQL и временных таблиц, по созданию хранимых процедур, по написанию проверочного кода для тестирования правильности работы созданных хранимых процедур и функций. После этого стало более понятно, как команды манипулирования данными позволяют работать с хранящейся в базе данных информацией. Ознакомились с использованием триггеров в Transact-SQL, освоили способы создания курсоров в Transact-SQL.
Ввиду вышесказанного, представленный индивидуальный проект является весьма актуальным и имеет возможность использоваться в любом предприятии нашей страны.
[1] Бутов, А. А. Базы данных: лабораторный практикум для студентов специальности «Информационные системы и технологии» / А. А Бутов, И. Г. Орешко, Е. А. Шестаков. — М: БГУИР, 2009. — 108 с.
[2] Бурков, А. В. Проектирование информационных систем по технологии клиент-сервер в «Microsoft SQL Server 2008» и «Microsoft Visual Studio 2008» / А. В. Бурков. — М: БГУИР, 2009. — 123 с.
ПРИЛОЖЕНИЕ
Создание таблиц и ввод значений в них
CREATE DATABASE Кадры
ON PRIMARY
(NAME = Кадры_Data,
FILENAME = 'D:Кадры_Data.mdf',
SIZE = 3MB,
MAXSIZE = 50MB,
FILEGROWTH = 2MB),
FILEGROUP Secondary
(NAME = Кадры2_Data,
FILENAME = 'D:Кадры_Data2.ndf',
SIZE = 2MB,
MAXSIZE = 70MB,
FILEGROWTH = 20%),
(NAME = Калры3_Data,
FILENAME = 'D:Кадры_Data3.ndf',
SIZE = 2MB,
FILEGROWTH = 5MB)
LOG ON
(NAME = Склад_Log,
FILENAME = 'D:Кадры_Log.ldf',
SIZE = 1MB,
MAXSIZE = 10MB,
FILEGROWTH = 15%),
(NAME = Склад2_Log,
FILENAME = 'D:Кадры_Log2.ldf',
SIZE = 512KB,
MAXSIZE = 5MB,
FILEGROWTH = 10%)
GO
USE Кадры
GO
CREATE TABLE Подразделения (
КодПодразделения INT PRIMARY KEY,
Подразделение VARCHAR (20) DEFAULT 'Производство' NOT NULL,
Численность INT NOT NULL CHECK (Численность > 0),
Руководитель VARCHAR (50) NOT NULL
)
CREATE TABLE Должность (
КодДолжности INT PRIMARY KEY,
Должность VARCHAR (40) NOT NULL,
Оклад INT NULL CHECK (Оклад > 0),
Разряд INT DEFAULT '1' NULL CHECK (Разряд > 0),
Премия INT NULL
)
CREATE TABLE Сотрудник (
КодСотрудника INT PRIMARY KEY,
ФИО VARCHAR (60) NULL,
Образование VARCHAR (60) NULL,
КодПодразделения INT NOT NULL,
КодДолжности INT NOT NULL,
Телефон INT NULL,
Пол VARCHAR (5) NULL
CHECK (Пол IN ('муж', 'жен')),
Возраст INT NULL CHECK (Возраст > 0),
CONSTRAINT FK_Сотрудник_Подразделения FOREIGN KEY (КодПодразделения)
REFERENCES Подразделения ON UPDATE CASCADE,
CONSTRAINT FK_Сотрудник_Должность FOREIGN KEY (КодДолжности)
REFERENCES Должность ON UPDATE CASCADE
)
CREATE TABLE ШтатноеРасписание (
Номер INT IDENTITY (1,1) NOT NULL,
КодСотрудника INT NOT NULL,
КоличествоЧасов INT NOT NULL CHECK (КоличествоЧасов > 0),
Пропуски INT NULL,
Причина VARCHAR (30) NULL ,
CONSTRAINT FK_ШтатноеРасписание_Сотрудник FOREIGN KEY (КодСотрудника)
REFERENCES Сотрудник ON UPDATE CASCADE
)
CREATE TABLE Контракт (
КодКонтракта INT PRIMARY KEY NOT NULL,
КодСотрудника INT NOT NULL,
ДатаОт DATETIME DEFAULT getdate () NOT NULL,
ДатаДо DATETIME NULL,
Заметки VARCHAR (30) NULL,
CONSTRAINT FK_Контракт_Сотрудник FOREIGN KEY (КодСотрудника)
REFERENCES Сотрудник ON UPDATE CASCADE
)
CREATE TABLE Военнообязанные (
Номер INT IDENTITY (1,1) NOT NULL,
КодСотрудника INT NOT NULL,
Отсрочка INT NOT NULL,
СемейноеПоложение VARCHAR (10) NOT NULL,
ДолгЛет INT NULL CHECK (ДолгЛет > 0),
CONSTRAINT FK_Военнообязанные_Сотрудник FOREIGN KEY (КодСотрудника)
REFERENCES Сотрудник ON UPDATE CASCADE
)
GO
INSERT INTO Подразделения
VALUES (1, 'Руководство', 15, 'Иванова А.А.')
INSERT INTO Подразделения
VALUES (2, 'Цех', 44, 'Петрова А.Ю.')
INSERT INTO Подразделения
VALUES (3, 'Контора', 36, 'Чернявская М.М.')
INSERT INTO Подразделения
VALUES (4, 'Отдел кадров', 6, 'Шлык В.С.')
INSERT INTO Подразделения
VALUES (5, 'Бухгалтерия', 3, 'Комякевич А.Л.')
GO
INSERT INTO Должность
VALUES (01, 'Начальник', 3 000 000, 20, 500 000)
INSERT INTO Должность
VALUES (02, 'Рабочий', 1 000 000, 12, 50 000)
INSERT INTO Должность
VALUES (03, 'Бригадир', 1 500 000, 14, 70 000)
INSERT INTO Должность
VALUES (04, 'Специалист', 2 000 000, 16, 90 000)
INSERT INTO Должность
VALUES (05, 'Стажер', 900 000, 1, 10 000)
GO
INSERT INTO Сотрудник
VALUES (1, 'Шлык В.С.', 'высшее', 4, 01, 5 802 489, 'жен', 20)
INSERT INTO Сотрудник
VALUES (2, 'Ксенжук Д.Ю.', 'высшее', 1, 03, 23 466, 'жен', 21)
INSERT INTO Сотрудник
VALUES (3, 'Николаев А.Н.', 'среднее-специальное', 2, 02, 23 698, 'муж', 22)
INSERT INTO Сотрудник
VALUES (4, 'Алиев И.О.', 'среднее-специальное', 3, 04, 5 863 424, 'муж', 22)
GO
INSERT INTO ШтатноеРасписание
VALUES (1, 236, 12, 'по причине болезни')
INSERT INTO ШтатноеРасписание
VALUES (2, 230, 1, 'по причине болезни')
INSERT INTO ШтатноеРасписание
VALUES (3, 240, 2, 'по причине болезни')
INSERT INTO ШтатноеРасписание
VALUES (4, 245, 10, 'по причине болезни')
GO
SET DATEFORMAT dmy
INSERT INTO Контракт (КодКонтракта, КодСотрудника, ДатаОт, ДатаДо)
VALUES (1, 1, '04.04.09', '14.04.19')
INSERT INTO Контракт (КодКонтракта, КодСотрудника, ДатаОт, ДатаДо)
VALUES (2, 2, '04.04.08', '14.04.29')
INSERT INTO Контракт (КодКонтракта, КодСотрудника, ДатаОт, ДатаДо)
VALUES (3, 3, '04.04.00', '14.04.15')
INSERT INTO Контракт (КодКонтракта, КодСотрудника, ДатаОт, ДатаДо)
VALUES (4, 4, '04.04.09', '14.04.29')
GO
INSERT INTO Военнообязанные
VALUES (3, 1, 'не женат', 1)
GO