Смекни!
smekni.com

Проектирование базы данных для отдела организации и оплаты труда ОАО "Печатный двор" (стр. 2 из 3)

Первая нормальная форма (1НФ) - это обычное отношение. Согласно определению отношений, любое отношение автоматически уже находится в 1НФ.

Напомним кратко свойства отношений (это и будут свойства 1НФ):

В отношении нет одинаковых кортежей.

Кортежи не упорядочены.

Атрибуты не упорядочены и различаются по наименованию.

Все значения атрибутов атомарны.

Отношение находится во второй нормальной форме (2НФ) тогда и только тогда, когда отношение находится в 1НФ и нет неключевых атрибутов, зависящих от части сложного ключа. (Неключевой атрибут - это атрибут, не входящий в состав никакого потенциального ключа).Замечание. Если потенциальный ключ отношения является простым, то отношение автоматически находится в 2НФ.Определение. Атрибуты называются взаимно независимыми, если ни один из них не является функционально зависимым от другого.Отношение находится в третьей нормальной форме (3НФ) тогда и только тогда, когда отношение находится в 2НФ и все неключевые атрибуты взаимно независимы.В большинстве случаев третьей нормальной формы вполне достаточно, чтобы разрабатывать вполне работоспособные базы данных. Однако рассмотрим еще одну нормальную формы более высокого порядка, а именно, нормальную форму Бойса-Кодда (НФБК).При приведении отношений при помощи нормализации к отношениям в 3НФ неявно предполагалось, что все отношения содержат один потенциальный ключ. Это не всегда верно.Функциональная зависимость атрибутов утверждает лишь то, что для каждого конкретного состояния базы данных по значению одного атрибута (детерминанта) можно однозначно определить значение другого атрибута (зависимой части). Но конкретные значение зависимой части могут быть различны в различных состояниях базы данных.Если имеются отношения, содержащие несколько потенциальных ключей, то необходимо проверить, имеются ли функциональные зависимости, детерминанты которых не являются потенциальными ключами. Если такие функциональные зависимости имеются, то необходимо провести дальнейшую декомпозицию отношений. Те атрибуты, которые зависят от детерминантов, не являющихся потенциальными ключами выносятся в отдельное отношение вместе с детерминантами.Отношение находится в нормальной форме Бойса-Кодда (НФБК) тогда и только тогда, когда детерминанты всех функциональных зависимостей являются потенциальными ключами.Представляющие интерес для игрового центра "Вегас" дополнительные (неключевые) атрибуты.

Таблица 3Таблица неключевых атрибутов

ФИО Фамилия, имя отчество каждого работника
Адрес Адрес места проживания
ДомТел Домашний телефон работника
МобТел Мобильный телефон работника
НомерРазряда Номер разряда работника
ПроцентПремии Прцент премии на оклад
ВидОплаты Вид оплаты труда работника
ФИОДетей Фамилия, имя, отчество детей работника
ДатаРожд Дата рождения детей работника
МестоПрожив Место проживание детей работника
ТабНомер Табельный номер работника
НаимДолжн Наименование должности работника
Отдел Наименование отдела, за которым закреплен работник

Формируется таблица окончательных отношений (см. Таблицу 4).

Таблица 4Таблица окончательных отношений

Работники

Расценок

Процент премии

Личная информация

Сведения о детях

ТабельныйНомер, ФИО, НаименованиеДолжности, Отдел, ВилОплатыТруда, НомерРазряда.ВидОплаты, НомерРазряда, Расценок.НомерРазряда, ПроцентПремии.ФИО, Адрес, ДомТел, МобТел, ДатаРождения.ФИО, ФИОДетей, ДатаРождения, МестоПроживания.

3. Создание БД в Access

В ходе создания базы данных были созданы такие таблицы, как: СлужебнаяИнформация (см. рис. 2); ЛичнаяИнформация (см рис. 3); СведенияОДетяхСотрудника (см. рис. 4); Расценок (см. рис. 5); ПроцентПремии(см. рис. 6);

Рис. 2. Таблица СлужебнаяИнформация

Эта таблица необходима для учета всех работников на предприятии. Чтобы всегда можно было с легкостью посмотреть какой работник в каком отделе работает, какой разряд у работника.


Рис. 3. Таблица ЛичнаяИнформация

Таблица в которой содержится полная информация о всех сотрудниках данного предприятия. Очень важно знать где проживает сотрудник, его телефоны, чтобы всегда можно было с ним связаться.

Рис. 4. Таблица СведенияОДетяхСотрудника

Эта таблица необходима для того, чтобы в дальнейшем можно было рассчитывать НДФЛ.

Рис. 5.Таблица Расценок


В этой таблице содержится информация о размерах окладов и тарифных ставках по разрядам.

Рис. 6. Таблица ПроцентПремии

Эта таблица нужна для того, чтобы четко видеть какому разряду соответствует определенный процент премии.Была сделана схема данных.

Рис. 7. Схема данных

Благодаря тому, что база данных состоит из отдельных таблиц, с установленными между ними связями, обеспечивается безопасность и конфиденциальность информации, а также обеспечивается удобство поиска нужной информации из массива данных.


4. Разработка запросов

1. Запрос на выборку с условием отбора: работники по заданному разряду

SELECT СлужебнаяИнформация.ТабельныйНомер, СлужебнаяИнформация.ФамилияИмяОтчество, СлужебнаяИнформация.НомерРазряда

FROM СлужебнаяИнформация

WHERE (((СлужебнаяИнформация.НомерРазряда) Like [Нужный разряд]));Этот запрос необходим чтобы без лишних поисков посмотреть работников с одним и тем же разрядом.

2. Запрос на выборку с группировкой: средняя заработная плата по должностям

SELECT Расценок.ВидОплаты, Avg(Расценок.Расценок) AS [Avg-Расценок], СлужебнаяИнформация.НаименованиеДолжности

FROM Расценок INNER JOIN СлужебнаяИнформация ON Расценок.НомерРазряда = СлужебнаяИнформация.НомерРазряда

GROUP BY Расценок.ВидОплаты, СлужебнаяИнформация.НаименованиеДолжности

HAVING (((Расценок.ВидОплаты)="оклад, премия"));

Этот запрос необходим для того, чтобы легко можно было посмотреть среднюю зарплату по должности.

3. Запрос на выборку с расчетом: расчет премии по окладникам

SELECT СлужебнаяИнформация.ТабельныйНомер, СлужебнаяИнформация.ФамилияИмяОтчество, Расценок.ВидОплаты, Расценок.НомерРазряда, Расценок.Расценок, ПроцентПремии.ПроцентПремии, [Расценок]*[ПроцентПремии] AS Премия

FROM Расценок INNER JOIN (ПроцентПремии INNER JOIN СлужебнаяИнформация ON ПроцентПремии.НомерРазряда = СлужебнаяИнформация.НомерРазряда) ON (ПроцентПремии.НомерРазряда = Расценок.НомерРазряда) AND (Расценок.НомерРазряда = СлужебнаяИнформация.НомерРазряда)WHERE (((Расценок.ВидОплаты)="оклад, премия"));

Этот запрос необходим чтобы легко можно было рассчитать премию по каждому работнику с окладом. Иногда это бывает очень необходимо.

4. Запрос на выборку с расчетом: расчет премии по сдельщикам;

SELECT СлужебнаяИнформация.ТабельныйНомер, СлужебнаяИнформация.ФамилияИмяОтчество, СлужебнаяИнформация.ВидОплаты, СлужебнаяИнформация.НомерРазряда, Расценок.Расценок, ПроцентПремии.ПроцентПремии, [Расценок]*[ПроцентПремии]*[Введите количество часов в месяце] AS Премия

FROM Расценок INNER JOIN (ПроцентПремии INNER JOIN СлужебнаяИнформация ON ПроцентПремии.НомерРазряда = СлужебнаяИнформация.НомерРазряда) ON (ПроцентПремии.НомерРазряда = Расценок.НомерРазряда) AND (Расценок.НомерРазряда = СлужебнаяИнформация.НомерРазряда)

WHERE (((СлужебнаяИнформация.ВидОплаты)="сдельно-премиальный"));Этот запрос необходим чтобы легко можно было рассчитать премию по каждому работнику со сдельным видом оплаты труда. Иногда это бывает очень необходимо.

5. Запрос на выборку с расчетом: зарплата по окладникам;

SELECT [расчет премии по окладникам].ТабельныйНомер, [расчет премии по окладникам].ФамилияИмяОтчество, [расчет премии по окладникам].Премия, [расчет премии по окладникам].Расценок, [Премия]+[Расценок] AS ИтогоЗарплата

FROM [расчет премии по окладникам];

Для расчета основной заработной платы для работников с окладом.

6. Запрос на выборку с расчетом: зарплата по сдельщикам;

SELECT [расчет премии по сдельщикам].ТабельныйНомер, [расчет премии по сдельщикам].ФамилияИмяОтчество, [расчет премии по сдельщикам].Расценок, [расчет премии по сдельщикам].ПроцентПремии, [Премия]+[Расценок] AS ИтогоЗарплата

FROM [расчет премии по сдельщикам];

Для расчета основной заработной платы для работников со сдельным видом оплаты труда.

7. Запрос на обновление: повышение тарифов;

UPDATE Расценок SET Расценок.Расценок = [Расценок]*2

WHERE (((Расценок.Расценок)>"10"));

Этот запрос необходим для увеличения тарифов по сдельному виду оплаты труда.

8. Запрос на удаление: увольнение;

DELETE СлужебнаяИнформация.ТабельныйНомер

FROM СлужебнаяИнформация

WHERE (((СлужебнаяИнформация.ТабельныйНомер) Like [Введите табельный номер]));

Этот запрос тоже очень необходим, для того, чтобы можно было при увольнении работника быстро удалить его из списка по табельному номеру.

9. Запрос на добавление: прием на работу нового работника;

INSERT INTO СлужебнаяИнформация ( ТабельныйНомер, ФамилияИмяОтчество, НаименованиеДолжности, Отдел, ВидОплаты, НомерРазряда )

SELECT [введите ТабельныйНомер], [введите ФамилияИмяОтчество], [введите НаименованиеДолжности], [введите Отдел], [введите ВидОплаты], [введите НомерРазряда]