В процессе разработки структуры базы данных может возникнуть избыточность информации – это повторение (дублирование) данных, содержащихся в базе данных. В таблице с избыточными данными содержится много повторяющихся данных в различных записях. Для избавления от избыточности можно разбить одну большую таблицу на несколько маленьких. Такой процесс разбиения таблицы называется нормализацией базы данных. Т.е. нормализация – это процесс устранения избыточности данных.
Существует несколько так называемых нормальных форм (НФ) баз данных. Каждая из нормальных форм получается последовательно из предыдущей нормальной формы. На практике применяются в основном первые три из них.
Первая нормальная форма требует, чтобы каждое поле таблицы БД было не делимым, не содержало повторяющихся групп. Не делимость поля означает, что каждое поле не должно делится на несколько полей. А повторяющиеся группы указывают на то, чтобы поля не содержали одинаковые по смыслу значения.[8] Наш список полей удовлетворяет этому нормальному закону, кроме поля ФИО. Их можно разделить на три поля соответственного Фамилия, Имя и Отчество, но для задачи, которая поставлена перед нами, это не требуется, поэтому мы считаем эти поля не делимыми.
Вторая нормальная форма, требует: все поля таблицы зависели от первичного ключа, то есть первичный ключ однозначно определен и является не избыточным; те поля, которые зависят от части первичного ключа, должны быть выделены в отдельные таблицы.[9] Определим поля, входящие в первичный ключ: № мемориального ордера, № операции, № справки, № трудового договора, идентификатор валюты, код операции, код, № квитанции, № справки на экспертизу, ID комиссии. Установим, какие поля зависят только от части ключа и поместим их в отдельную таблицу.
Третья нормальная форма требует, чтобы значение любого поля таблицы, не входящего в первичный ключ, не зависело от значения другого поля, не входящего в первичный ключ.[10]
Нормализованной БД называется база, в которой выполняется как минимум три условия. Данные поля таблиц удовлетворяют этому закону. В результате нормализации получаться следующие таблицы:
Таблица «operator» содержит данные о сотрудниках банка, то есть об операторе валютно-обменных операций. Ключевое поле: nomer_tr_dog, содержит информацию о номере трудового договора.
Таблица 2.3
Имя поля | Тип и размер поля | Описание поля |
nomer_tr_dog | INTEGER | информация о номере трудового договора |
FIO | VARCHAR(255) | фамилия, имя, отчество сотрудника банка. |
Nomer_pas | INTEGER | номер паспорта |
Таблица «reestr», содержит данные реестра валютно-обменных операций. Первичным ключом в данной таблице является nomer_oper. Это поле содержит информацию о номере операции.
Таблица 2.4
Имя поля | Тип и размер поля | Описание поля |
nomer_oper | INTEGER | информация о номере операции |
date | DATE | дата совершенной операции |
Kod_vid_oper | INTEGER | код вида операции |
ID_kyrs | INTEGER | Код курса |
Kod_val_pr | INTEGER | код валюты принятой |
Cymma_val_pr | MONEY | сумма валюты принятой |
ID | INTEGER | код комиссии, взимаемая с клиента за совершение операции, обычно она входит в отклонение от курса |
Doxod | MONEY | подоходный налог с совершенной операции |
Kod_val_v | INTEGER | код валюты выданной |
Cymma_val_v | MONEY | сумма валюты выданной |
nomer_tr_dog | INTEGER | информация о номере трудового договора |
Таблица «mem_or» содержит данные необходимые для обоснования бухгалтерской проводки. Ключевым полем является: nom_mem_or.
Таблица 2.5
Имя поля | Тип и размер поля | Описание поля |
nom_mem_or | INTEGER | Номер мемориального ордера. |
Vid_oper | VARCHAR(100) | Вид операции. |
nomer_oper | INTEGER | информация о номере операции |
Dt_sch | INTEGER | Дебет счета. |
Kt_sch | INTEGER | Кредит счета. |
Kod_val | INTEGER | Код валюты. |
Cymma | MONEY | Сумма. |
Country | VARCHAR(50) | Шифр страны. |
Crok_val | DATE | Срок валютирования. |
Ocnovanie | VARCHAR(255) | Содержание и основание записи. |
Таблица «spr_oper», содержит данные выданных клиентам справок о проведении операции с наличной валютой и чеками. Ключевым полем таблицы является поле nom_spr.
Таблица 2.6
Имя поля | Тип и размер поля | Описание поля |
nom_spr | INTEGER | Номер справки о проведении операции с наличной валютой и чеками. |
Date | DATE | Дата проведения. |
Time | DATE | Время проведения операции. |
ID_kl | INTEGER | Идентификатор клиента. |
Nomer_oper | INTEGER | Код вида операции. |
Kyrs | INTEGER | Курс покупки продажи валюты (кросс-курс). |
Kod_val_pr | INTEGER | Код валюты принятой. |
Cymma_pr | MONEY | Сумма валюты принятой. |
Name_val | VARCHAR(100) | Наименование валюты. |
Kod_val_v | INTEGER | Код валюты выданной. |
Cymma_val_v | MONEY | Сумма валюты выданной. |
Name_val | VARCHAR(100) | Наименование валюты. |
nomer_tr_dog | INTEGER | Информация о номере трудового договора. |
Таблица «klient», данная таблица содержит данные о клиенте. Ключевым полем является поле ID_kl, является идентификатором клиента.
Таблица 2.7
Имя поля | Тип и размер поля | Описание поля |
ID_kl | INTEGER | Идентификатор клиента. |
FIO | VARCHAR(100) | Фамилия, имя, отчество клиента. |
Country_Gr | VARCHAR(100) | Страна Гражданство |
ID_doc | INTEGER | Идентификатор типа документа. |
Ceria_doc | INTEGER | Серия документа. |
Nomer_doc | INTEGER | Номер документа. |
Kem_v | VARCHAR(255) | Кем выдан документ. |
Date_v | INTEGER | Дата выдачи. |
Adres | VARCHAR(255) | Адрес клиента. |
Таблица «oper», содержит информацию о видах и кодах видов операций, является справочником. Ключевое поле: Kod_vid_oper.
Таблица 2.8
Имя поля | Тип и размер поля | Описание поля |
Kod_vid_oper | INTEGER | Код вида операции. |
Name_oper | VARCHAR(100) | Наименование операции. |
Таблица «Doc», содержит информацию о видах документов удостоверяющих личность, то есть является справочником. Ключевым полем является: ID_doc.
Таблица 2.9
Имя поля | Тип и размер поля | Описание поля |
ID_doc | INTEGER | Идентификатор типа документа. |
Doc | VARCHAR(100) | Документ удостоверяющий личность (тип документа). |
Таблица «kl_val» - общероссийский классификатор валюты. Ключевое поле: Kod_val.
Таблица 2.10
Имя поля | Тип и размер поля | Описание поля |
Kod_val | INTEGER | Код валюты. |
Kod_val_b | VARCHAR(10) | Код валюты буквенный. |
Name_val | VARCHAR(100) | Наименование валюты. |
Country_v | VARCHAR(100) | Краткое наименование стран и территорий. |
Таблица «kyrs», содердит информацию о курсах покупки, продажи валюты (кросс-курсы). Ключевым полем таблицы является: Kod_val.
Таблица 2.11
Имя поля | Тип и размер поля | Описание поля |
ID_kyrs | INTEGER | Код курса |
Kod_val | INTEGER | Код валюты. |
Kod_val_b | VARCHAR(10) | Код валюты буквенный. |
Status_Kyrs | INTEGER | Данный статус показывает курс покупки или курс продажи,определяется по коду операции. |
Kyrs_prod | INTEGER | Курс продажи валюты. |
Za_ed | INTEGER | За единицу. |
Time | DATE | Время установки. |
Date | DATE | Дата установки. |
Status_naz | INTEGER | Статус принадлежности курса. Если равен 0 – то курс ЦБ, 1 – то банку, которому принадлежит обменный пункт. |
Таблица «spr_exsp», содержит данные выданных клиентам справок о приеме на экспертизу. Ключевое поле: nomer_spr.
Таблица 2.12
Имя поля | Тип и размер поля | Описание поля |
nomer_spr_ex | INTEGER | Номер справки о приеме на экспертизу. |
Date | DATE | Дата выдачи справки о приеме на экспертизу. |
ID_kl | INTEGER | Идентификатор клиента. |
Name_val | VARCHAR(100) | Наименование валюты. |
Country_v | VARCHAR(100) | Краткое наименование стран и территорий эмитентов. |
nominal | INTEGER | Номинал денежного знака. |
Year_v | DATE | Год образца (выпуска). |
Ser_nomer | INTEGER | Серийный номер. |
Dop_rec | VARCHAR(255) | Дополнительные реквизиты. |
nomer_tr_dog | INTEGER | Информация о номере трудового договора. |
Таблица «kvit», содержит данные выданных клиентам квитанций о приеме на инкассо. Ключевое поле: nomer_kv.
Таблица 2.13
Имя поля | Тип и размер поля | Описание поля |
nomer_kv | INTEGER | Номер квитанции. |
Date | DATE | Дата выдачи справки о приеме на экспертизу. |
ID_kl | INTEGER | Идентификатор клиента. |
Dop_rec | VARCHAR(255) | Дополнительные реквизиты. |
nomer_tr_dog | INTEGER | Информация о номере трудового договора. |
Таблицы связаны между собой типом связи один-ко-многим через ключевые поля. Общий вид базы данных представлен на схеме: