Диссертация (1172902), страница 18
Текст из файла (страница 18)
Каждая сущность идентифицируется уникальным ключом, иразработана система внешних ключей. База данных не содержит несогласованныхзначений внешних ключей, то есть при работе с записями происходит каскадноеобновление связанных полей и каскадное удаление связанных записей.Целостность, определяемая пользователем, поддерживается ограничениями втаблицах базы данных на ввод неотрицательных значений, а также обеспечениемвыбора значений внешних ключей из списков без разрешения варианта вводанедопустимого значения. Нормализация предусматривает определение требуемыхатрибутов с последующим созданием нормализованных таблиц, основанных нафункциональных зависимостях между атрибутами.
Разработанная модельнаходится в третьей нормальной форме, так как: атрибуты сущностей являются атомарными; каждый атрибут функционально зависит от первичного ключа; в модели отсутствуют транзитивные зависимости неключевых атрибутов.Этап физического проектирования базы данных предусматривает принятиеразработчиком окончательного решения о способах реализации создаваемой базы.Поэтому физическое проектирование обязательно производится с учетомособенностей выбранной СУБД. В качестве СУБД выбран Microsoft Access.
ERдиаграмма системы на физическом уровне представлена на рис. 4.9.Физическое описание модели удобнее всего представить в виде таблиц. Базаданных проекта содержит таблицы, названия которых соответствуют именамсущностей инфологической модели. Структура БД описана в табл. 4.3.ШтатноеРасписаниеОтделыID: AutoNumberID: AutoNumber Содержит/СоответствуетХарактерРаботыОтделID: Long IntegerДолжностьID: Long IntegerШтатныхЕд: ByteСтавка: SingleОклад: CurrencyНадбавка: CurrencyОтдел: Text(50)Содержит/СоответствуетДолжностиID: AutoNumberРабота: Text(50)ДолжностиРаботникаОпределяет/ЯвляетсяСодержит/СоответствуетСодержит/СоответствуетID: AutoNumberРаботникиСодержит/СоответствуетТабN: AutoNumberДолжность: Text(50)Фамилия: Text(20)Имя: Text(20)ДатаС: Date/TimeОтчество: Text(20)ВидыОтпускаТабN: AutoNumberПол: Yes/NoID: AutoNumberПричитается/ВышелСодержит/СоответствуетДатаРождения: Date/TimeПериодС: Date/TimeВидОтпуска: Text(50)РождГород: Text(30)ПериодПо: Date/TimeРождРайон: Text(30)ВидID: Long IntegerРождОбласть: Text(30)Дней: ByteВидыДокументовРождСтрана: Text(30)ДатаПо:Date/TimeID: AutoNumberСемПоложениеID: Long IntegerОснование: Text(100)ОбразованиеID: Long IntegerДокумент: Text(50)Профессия1ID: Long IntegerСодержит/ПредъявилПрофессия2ID: Long IntegerВидДокументаID: Long IntegerСодержит/СоответствуетСемейноеПоложениеДокументСерия: Text(10)ID: AutoNumberДокументНомер: Text(10)Содержит/ПолучилОбразованиеДокументДата: Date/TimeСемейноеПоложение: Text(50)ID: AutoNumberДокументВыдан: Text(100)ИНН: Text(15)Образование: Text(50)СоставСемьиПенсСвид: Text(50)ФИО: Text(150)Определен для/ИмеетПолисОМС: Text(15)РаботникID: Long Integer КомандировкиАдресРегистрИндекс: Text(6)АдресРегистр: Text(250)ДатаС: Date/TimeРодство: Text(10)Назначены/Получил АдресФактИндекс: Text(6)РаботникID:LongIntegerДатаРождения: Date/TimeАдресФакт: Text(250)МестоРождения: Text(250) МестоНазначения: Text(150)Телефон: Text(20)МестоРаботы: Text(250)ДатаПо: Date/TimeФото: OLE ObjectОрганизация: Text(250)Цель: Text(250)ОтпускаРаботникID: Long IntegerШтатРасписаниеID: Long IntegerПринятС: Date/TimeХарактерРаботыID: Long IntegerСтавка: SingleОклад: CurrencyНадбавка: CurrencyПринятПо: Date/TimeДоговорN: Text(10)ДоговорДата: Date/TimeОснование: Text(50)Уволен: Yes/NoРаботает как/Закреплена заРеквизитыНаименованиеОрг: Text(150)РукДолжн: Text(50)РукДолжнРП: Text(50)РукФИО: Text(50)РукФИОРП: Text(50)ГлБухФИО: Text(50)ЮрАдрес: Text(250)ИНН: Text(12)КПП: Text(10)РегНомерПФР: Text(16)Рисунок 4.9 – ER-диаграмма системы на физическом уровнеТаблица 4.3 – Описание таблиц базы данныхВиды ДокументовText(50)AutoNumberПервичныйключНетДаВнешнийключНетНетВид ОтпускаIDText(50)AutoNumberНетДаНетНетДолжностьIDText(50)AutoNumberНетДаНетНетХарактерРаботыIDПринятПоПринятСОснованиеДоговорNДоговорДатаLong IntegerDate/TimeDate/TimeText(50)Text(10)Date/TimeНетНетДаНетНетНетДаНетНетНетНетНетНаименование поляТип поляДокументIDВиды ОтпускаДолжностиДолжностиРаботникаВиды ДокументовДа/НетLong IntegerLong IntegerCurrencyCurrencyLong IntegerSingleПервичныйключНетНетНетНетНетНетНетВнешнийключНетДаДаНетНетДаНетОтделIDText(50)AutoNumberНетДаНетНетДатаПоДатаСОрганизацияЦельРаботникIDDate/TimeDate/TimeText(250)Text(250)Long IntegerНетДаНетНетДаНетНетНетНетДаОбразованиеIDText(50)AutoNumberНетДаНетНетДнейПериодПоДатаСДатаПоОснованиеПериодСРаботникIDВидIDЮрАдресГлБухФИОИННКППРегНомерПФРРукДолжнНаименованиеОргРукФИОРПРукДолжнРПРукФИОByteDate/TimeDate/TimeDate/TimeText(100)Date/TimeLong IntegerLong IntegerText(250)Text(50)Text(12)Text(10)Text(16)Text(50)Text(150)Text(50)Text(50)Text(50)НетНетДаНетНетНетДаНетНетНетНетНетНетНетНетНетНетНетНетНетНетНетНетНетДаДаНетНетНетНетНетНетНетНетНетНетДокументВыданИННПенсСвидДокументСерияДокументДатаДокументНомерВидДокументаIDАдресФактText(100)Text(15)Text(50)Text(10)Date/TimeText(10)Long IntegerText(250)НетНетНетНетНетНетНетНетНетНетНетНетНетНетДаНетНаименование поляТип поляУволенРаботникIDДолжностьIDНадбавкаОкладШтатРасписаниеIDСтавкаОтделыКомандировкиОбразованиеОтпускаРаботникиВиды ДокументовText(20)Text(15)Text(6)Text(6)Text(250)OLE ObjectText(20)Да/НетDate/TimeAutoNumberText(20)Text(20)Long IntegerLong IntegerLong IntegerLong IntegerText(30)Text(30)Text(30)Text(30)ПервичныйключНетНетНетНетНетНетНетНетНетДаНетНетНетНетНетНетНетНетНетНетВнешнийключНетНетНетНетНетНетНетНетНетНетНетНетДаДаДаДаНетНетНетНетСемейноеПоложениеIDText(50)AutoNumberНетДаНетНетДатаРожденияФИОМестоРожденияМестоРаботыРодствоРаботникIDDate/TimeText(150)Text(250)Text(250)Text(10)Long IntegerНетДаНетНетНетДаНетНетНетНетНетДаРаботаIDText(50)AutoNumberНетДаНетНетСтавкаШтатныхЕдОкладНадбавкаIDДолжностьIDОтделIDSingleByteCurrencyCurrencyAutoNumberLong IntegerLong IntegerНетНетНетНетДаНетНетНетНетНетНетНетДаДаНаименование поляТип поляТелефонПолисОМСАдресРегистрИндексАдресФактИндексАдресРегистрФотоОтчествоПолДатаРожденияТабNИмяФамилияПрофессия2IDОбразованиеIDСемПоложениеIDПрофессия1IDРождГородРождРайонРождСтранаРождОбластьСемейноеПоложениеСоставСемьиХарактерРаботыШтатноеРасписаниеОписание основных запросов к БД представлено в табл.
4.4.Таблица 4.4 - Описание основных запросов к БД№1234Текст запросаНазначениеSELECT Count(ДолжностиРаботника.РаботникID) ASПолучение количестваКол-возанятых штатных единицFROM ДолжностиРаботникав заданной позиции вWHERE ДолжностиРаботника.Уволен=False ANDштатном расписанииДолжностиРаботника.ШтатРасписаниеID = :pStaffIDSELECT Отделы.Отдел, Должности.Должность,ШтатноеРасписание.ШтатныхЕд,ШтатноеРасписание.Ставка,ШтатноеРасписание.Оклад,ШтатноеРасписание.Надбавка, (SELECTCount(*) FROM ДолжностиРаботника WHEREДолжностиРаботника.ШтатРасписаниеID =ШтатноеРасписание.ID ANDДолжностиРаботника.Уволен = False) AS Занято,[ШтатныхЕд]-[Занято]AS ВакансийПолучение спискаFROM Отделы INNER JOIN (Должности INNER JOINвакансий в организацииШтатноеРасписание ONДолжности.ID = ШтатноеРасписание.ДолжностьID) ONОтделы.ID =ШтатноеРасписание.ОтделIDSELECT Работники.ТабN, Работники.Фамилия + ' ' +Работники.Имя + '' + Работники.Отчество As ФИО,Работники.СемПоложениеID,Работники.ОбразованиеID, Работники.Телефон,Должности.ДолжностьFROM Должности INNER JOIN (ШтатноеРасписаниеINNER JOIN (РаботникиINNER JOIN ДолжностиРаботника ON Работники.ТабN =ДолжностиРаботника.РаботникID) ONШтатноеРасписание.ID =Получение спискаДолжностиРаботника.ШтатРасписаниеID) ONработников в заданномДолжности.ID =отделе (уволенных,ШтатноеРасписание.ДолжностьIDлибо работающих вGROUP BY Работники.ТабN, Работники.Фамилия,настоящее время)Работники.Имя,Работники.Отчество, Работники.Пол,Работники.СемПоложениеID,Работники.ОбразованиеID, Работники.ИНН,Работники.Телефон,ШтатноеРасписание.ОтделID,ДолжностиРаботника.Уволен,Должности.ДолжностьHAVING ШтатноеРасписание.ОтделID = :pDepID ANDДолжностиРаботника.Уволен = :pDismiss4.3 РАЗРАБОТКА ПОЛЬЗОВАТЕЛЬСКОГО ИНТЕРФЕЙСА ПРИЛОЖЕНИЯНа основе полученных структур разработан интерфейс пользователя.Пользователь имеет возможность выбора функций системы, применяя кнопочноеи пиктографическое меню.