2.3 Проектирование базы данных
При проектировании базы данных следует придерживаться правил нормализации таблиц:
Правило 1: Каждое поле любой таблицы должно быть уникальным.
Правило 2: Каждая таблица должна иметь уникальный идентификатор (первичный ключ), который может состоять из одного или нескольких полей таблицы.
Правило 3: Для каждого значения первичного ключа должно быть одно и только одно значение любого из столбцов данных, и это значение должно относиться к объекту таблицы.
Правило 4: Должна иметься возможность изменять значения любого поля (не входящего в первичный ключ), и это не должно повлечь за собой изменение другого поля.[2]
Каждый агрегированный объект будет представлен отдельной таблицей базы данных. Элементы данных будут представлены полями таблиц. Имена таблиц и их полей подберем исходя из имен объектов и элементов данных. В качестве первичного ключа используем табельный номер. Проект базы данных включает в себя 11 таблиц.
Опишем базу данных в табличной форме.
|ОПИСАНИЕ ТАБЛИЦ БАЗЫ ДАННЫХ «КАДРЫ» | |Имя таблицы: |STUFF.DBF | |Краткое описание: |Основная таблица базы данных | |Имя поля |Тип данных |Описание | |ORG_NUM |Числовой (6) |Табельный номер | | | |сотрудника | |INS_NUM |Текстовый (14) |Страховой номер | |SURNAME |Текстовый (15) |Фамилия | |NAME |Текстовый (15) |Имя | |PATRON |Текстовый (15) |Отчество | |SEX |Текстовый (15) |Пол | |BIRTH_DATE |Дата |Дата рождения | |BIRTHPLACE |Текстовый (47) |Место рождения | |NATIONAL |Текстовый (15) |Национальность | |SOCIAL |Текстовый (47) |Социальное происхождение| |CITIZEN |Текстовый (30) |Гражданство | |EDUCAT |Текстовый (47) |Образование | |NAME_EDU |Текстовый (47) |Название учебного | | | |заведения | |FORM_TRAIN |Текстовый (20) |Форма обучения | |YEAR_END |Дата (8) |Год окончания | |DIPLOMA |Текстовый (25) |Диплом (серия) | |QUAL_DIP |Текстовый (47) |Квалификация по диплому | |SPEC_DIP |Текстовый (47) |Специальность по диплому| |EDU_NUM |Числовой (2) |Количество записей в | | | |разделе «Дополнительное | | | |образование» | |KIND_HIR |Текстовый (30) |Вид найма | |KIND_WRK |Текстовый (30) |Вид работы | |S_DEGREE |Текстовый (30) |Ученая степень | |S_RANK |Текстовый (30) |Ученое звание | |MAR_SPEC |Текстовый (47) |Узкая специальность | |LANG_NUM |Числовой (2) |Количество записей в | | | |разделе «Владение | | | |иностранными языками» | |CONV_NUM |Числовой (2) |Количество записей в | | | |разделе «Наличие | | | |судимости» | |MAR_STATUS |Текстовый (20) |Семейное положение | |FAMIL_NUM |Числовой (2) |Количество записей в | | | |разделе «Состав семьи» | |TR_UNION |Текстовый (40) |Профсоюз | |GROUP |Числовой (1) |Группа инвалидности | |PENSIONER |Текстовый (1) |Пенсионер ? | |PARTIC_WAR |Текстовый (1) |Участник войны | |POST_INDEX |Числовой (6) |Домашний индекс | |REGION |Текстовый (20) |Район | |AREA |Текстовый (40) |Область | |ADDRESS |Текстовый (40) |Домашний адрес | |TELEPHONE |Текстовый (18) |Домашний телефон | |PASSPORT |Текстовый (29) |Серия, номер | |CONSCRIPT |Текстовый (20) |Воинская обязанность | |MILIT_RANK |Текстовый (20) |Воинское звание | |NUMBER |Числовой (12) |Номер ВУС | |MIL_TICKET |Текстовый (23) |Номер военного билета | |MIL_VALID |Текстовый (47) |Годность к военной | | | |службе | |ATTITUDE |Текстовый (47) |Отношение к бронированию| |MOBILE_INS |Текстовый (1) |Наличие моб, предписания| |GROUP_ACC |Текстовый(47) |Группа учета | |CATEGORY_A |Текстовый (20) |Категория учета | |COMMISSAR |Текстовый (47) |Райвоенкомат | |START_DATE |Дата |Дата начала срочной | | | |службы | |CLOSE_DATE |Дата |Дата окончания срочной | | | |службы | |LAST_DATE |Дата |Дата последнего | | | |прохождения мед. | | | |Комиссии | |RECORD_NUM |Числовой (2) |Количество записей в | | | |разделе «Трудовая | | | |книжка» | |PURPOS_NUM |Числовой (2) |Количество записей в | | | |разделе «Назначения и | | | |перемещения» | |QUAL_NUM |Числовой (2) |Количество записей в | | | |разделе | | | |«Квалификационный | | | |разряд» | |COMPANY |Текстовый (47) |Название учреждения | |SUBDIVIS |Текстовый (30) |Подразделение | |CUR_POST |Текстовый (30) |Текущая должность | |EMPLOYMENT |Дата |Дата приема на работу | |TRIAL_CLOS |Дата |Дата окончания | | | |испытательного срока | |TRIAL_NUM |Числовой (2) |Количество записей в | | | |разделе «Командировки» | |HOLID_NUM |Числовой (2) |Количество записей в | | | |разделе «Отпуска» | |DATE_DIS |Дата |Дата увольнения | |REASON_DIS |Текстовый (47) |Причина увольнения | |INN |Текстовый (12) |Индивидуальный номер | | | |налогоплательщика | |SERIES_TAX |Текстовый (14) |Серия свидетельства | | | |налогоплательщика | |NUM_TAX |Текстовый (14) |Номер свидетельства | | | |налогоплательщика | |DATE_TAX |Дата |Дата выдачи | | | |свидетельства | | | |налогоплательщика | | | |Имя таблицы: |EDUCAT.DBF | |Краткое описание: |Дополнительное образование | |Имя поля |Тип данных |Описание | |ORG_NUM |Числовой (6) |Табельный номер | | | |сотрудника | |DATE_BEGIN |Дата |Дата поступления в у/з | |DATE_END |Дата |Дата окончания у/з | |EDUCATION |Текстовый (30) |Образование | |NAME_EDUC |Текстовый (15) |Название у/з | |DIPL |Текстовый (15) |Диплом | |FORM_TR |Текстовый (15) |Форма обучения | |QUALIFIC |Текстовый (15) |Квалификация | |SPECIAL |Текстовый (15) |Специальность | | | |Имя таблицы: |LANGUAGE.DBF | |Краткое описание: |Владение иностранными языками | |Имя поля |Тип данных |Описание | |ORG_NUM |Числовой (6) |Табельный номер | | | |сотрудника | |OTH_LANG |Текстовый (20) |Язык | |LEVEL |Текстовый (30) |Уровень владения | | | |Имя таблицы: |CONVICT.DBF | |Краткое описание: |Наличие судимости | |Имя поля |Тип данных |Описание | |ORG_NUM |Числовой (6) |Табельный номер | | | |сотрудника | |DATE_VERD |Дата |Дата вынесения приговора| |ARTICLE |Текстовый (20) |Статья | |PERIOD |Текстовый (20) |Срок | | | |Имя таблицы: |FAMILY.DBF | |Краткое описание: |Состав семьи | |Имя поля |Тип данных |Описание | |ORG_NUM |Числовой (6) |Табельный номер | | | |сотрудника | |RELATION |Текстовый (20) |Степень родства | |NAMES |Текстовый (20) |Фамилия, инициалы | | | |родственника | |DATE_RELAT |Дата |Дата рождения | |EXPENSE |Текстовый (20) |На иждивении | | | |Имя таблицы: |PASSPORT.DBF | |Краткое описание: |Паспортные данные | |Имя поля |Тип данных |Описание | |ORG_NUM |Числовой (6) |Табельный номер | | | |сотрудника | |EXP_GIVEN |Текстовый (50) |Кем выдан | |DATE_DISTR |Дата |Дата выдачи | |INDEX_P |Текстовый (6) |Индекс | |AREA_P |Текстовый (30) |Область | |REGION_P |Текстовый (30) |Район | |CITY_P |Текстовый (30) |Город | |POINT_P |Текстовый (30) |Населенный пункт | |STREET_P |Текстовый (30) |Улица | |HOUSE_P |Текстовый (10) |Дом | |CORPS_P |Текстовый (10) |Корпус | |FLAT_P |Текстовый (10) |Квартира | | | |Имя таблицы: |WORKCARD.DBF | |Краткое описание: |Трудовая книжка | |Имя поля |Тип данных |Описание | |ORG_NUM |Числовой (6) |Табельный номер | | | |сотрудника | |DATE_WRK |Дата |Дата постановки | |DATE_DISM |Дата |Дата увольнения | |NAME_WRK |Текстовый (20) |Название учреждения | |POST_WRK |Текстовый (20) |Должность | |REASON_WRK |Текстовый (20) |Причина | |BASIS_WRK |Текстовый (20) |Основание | | | |Имя таблицы: |MOVING.DBF | |Краткое описание: |Назначения и перемещения | |Имя поля |Тип данных |Описание | |ORG_NUM |Числовой (6) |Табельный номер | | | |сотрудника | |DATE_MOV |Дата |Дата | |REASON_MOV |Текстовый (20) |Основание | |DEPART |Текстовый (20) |Отдел | |POST_MOV |Текстовый (15) |Должность | |METHOD_MOV |Текстовый (15) |Режим работы | | | |Имя таблицы: |QUALIFIC.DBF | |Краткое описание: |Квалификационный разряд | |Имя поля |Тип данных |Описание | |ORG_NUM |Числовой (6) |Табельный номер | | | |сотрудника | |DATE_QUAL |Дата |Дата | |REASON_QUAL |Текстовый (20) |Основание | |QUALIFICAT |Текстовый (20) |Квалификация | | | |Имя таблицы: |BUS_TRIP.DBF | |Краткое описание: |Командировки | |Имя поля |Тип данных |Описание | |ORG_NUM |Числовой (6) |Табельный номер | | | |сотрудника | |START_TRP |Дата |Дата начала | |CLOSED_TRP |Дата |Дата окончания | |DESTINAT |Текстовый (25) |Место назначения | | | |Имя таблицы: |HOLIDAY.DBF | |Краткое описание: |Отпуска | |Имя поля |Тип данных |Описание | |ORG_NUM |Числовой (6) |Табельный номер | | | |сотрудника | |KIND_HOL |Текстовый (15) |Вид отпуска | |BASIS_HOL |Текстовый (15) |Основание | |WITH_HOL |Дата |За время с | |ON_HOL |Дата |За время по | |D_ST_HOL |Дата |Дата начала | |AMOUNT |Числовой (3) |Количество дней | |D_END_HOL |Дата |Дата окончания |
Итак, спроектировано 11 таблиц базы данных «Кадры». Для удобства работы, 10 из них следует проиндексировать: таблицу STUFF.DBF по полю ORG_NUM; таблицу EDUCAT.DBF по полю DATE_BEGIN; таблицу LANGUAGE.DBF по полю OTH_LANG; таблицу CONVICT.DBF по полю DATE_VERD; таблицу FAMILY.DBF по полю DATE_RELAT; таблицу WORKCARD.DBF по полю DATE_WRK; таблицу MOVING.DBF по полю DATE_MOV; таблицу QUALIFIC.DBF по полю DATE_QUAL; таблицу BUS_TRIP.DBF по полю START_TRP; таблицу HOLIDAY.DBF по полю WITH_HOL.
2.4 Разработка приложения
Для создания проекта использовалась СУБД FoxPro 2.6.
В состав проекта входит 28 командных файлов. Можно было бы в качестве процедур объединить их в один файл, но тогда, в дальнейшем, стало было неудобно их изменять. Взаимосвязь командных файлов представлена на рис. 2.4.1 графического материала.
Стартовым в проекте является файл START.PRG, в котором устанавливается операционная среда системы, формируется экран, а также описывается рабочее меню. В состав рабочего меню входят горизонтальное BAR-меню и три вертикальных POPUP-меню:
|Данные о сотрудниках |Сервис |Справки |Выход |
В пункте :
|Просмотр | |Редактирование | |Добавление | |Удаление |
|Переиндексация баз | |Инициализация баз |
Страницы: 1, 2, 3, 4