При проектировании базы данных следует придерживаться правил нормализации таблиц:
каждое поле любой таблицы должно быть уникальным;
каждая таблица должна иметь уникальный идентификатор (первичный ключ), который может состоять из одного или нескольких полей таблицы;
для каждого значения первичного ключа должно быть одно и только одно значение любого из столбцов данных, и это значение должно относиться к объекту таблицы;
должна иметься возможность изменения значения любого поля (не входящего в первичный ключ), и это не должно повлечь за собой изменения другого поля.
Каждый объект будет представлен отдельной таблицей базы данных. Элементы данных будут представлены полями таблиц. Имена таблиц и их полей подберем исходя из имен объектов и элементов данных. Проект базы данных включает в себя 5 таблиц:
таблицу фидеров (Phider);
таблицу абонентов "Abonent-inf";
таблицу расхода на фидерах "Phider - Rashod";
таблицу расхода юридических абонентов "Abonent_Pashod";
таблицу расхода бытовых абонентов "Bit".
Опишем базу данных в табличной форме.
Таблица 3.1 - Структура таблицы "Phider"
| Имя поля | Описание | Тип | Размер | Ключ |
| Name | Наименование фидера | Текстовый | 25 | * |
| N_schetchik | № счетчика | Числовой | Длинное целое | |
| Koef | Коэффициент | Числовой | Короткое целое | |
| Pokaz | Показания | Числовой | Значение с плавающей точкой | |
| Temp | Поле для хранения промежуточной информации | Числовой | Длинное целое |
Таблица "Phider - Rashod" (таблица 3.2) является подчиненной таблице "Phider".
Таблица 3.2 - Структура таблицы "Phider - Rashod"
| Имя поля | Описание | Тип | Размер | Ключ |
| Nomer | Номер записи | Счетчик | Длинное целое | * |
| Name | Наименование фидера | Текстовый | 25 | |
| Data | Дата | Дата | Краткий формат даты | |
| Pred_Pokaz | Предыдущие показания | Числовой | Длинное целое | |
| Nast | Настоящие показания | Числовой | Длинное целое | |
| Raznost | Разность | Числовой | Длинное целое | |
| Koef | Коэффициент | Числовой | Длинное целое | |
| Rashod | Расход | Числовой | 6 | |
| Polez | Полезный отпуск электроэнергии | Числовой | Длинное целое | |
| Poteri | Количество неоплаченной электроэнергии | Числовой | Длинное целое | |
| Procenti | Количество неоплаченной электроэнергии в процентах | Числовой | Длинное целое |
Таблица 3.3 - Структура таблицы "Abonent-inf"
| Имя поля | Описание | Тип | Размер | Ключ |
| Name | Наименование абонента | Текстовый | 100 | * |
| N_schetchik | № счетчика | Числовой | Длинное целое | |
| Nast_Pokaz | Настоящие показания | Числовой | Длинное целое | |
| Phider | Фидер | Текстовый | 50 | |
| Adres | Адрес | Текстовый | 240 | |
| Tel | Телефон | Текстовый | 10 | |
| Temp | Поле для хранения промежуточной информации | Числовой | Длинное целое |
Таблица "Abonent_Pashod" (таблица 3.4) является подчиненной таблице "Abonent-inf".
Таблица 3.4 - Структрура таблицы "Abonent_Pashod"
| Имя поля | Описание | Тип | Размер | Ключ |
| Nomer | Номер записи | Счетчик | Длинное целое | * |
| Name | Наименование абонента | Текстовый | 255 | |
| Data | Дата | Дата | Краткий формат даты | |
| Pred_Pokaz | Предыдущие показания | Числовой | Длинное целое | |
| Nast | Настоящие показания | Числовой | Длинное целое | |
| Rashod | Расход | Числовой | Длинное целое | |
| Pokaz_Kontr | Показания контрольного съема | Числовой | Длинное целое | |
| Data_Rasnost | Разность между датой отчета и датой контрольного съема в днях | Числовой | Короткое целое | |
| Day_Rashod | Среднесуточный расход | Числовой | Длинное целое | |
| Ozid_Rashod | Ожидаемый расход | Числовой | Длинное целое | |
| Rasnost_Rashod | Разность между отчетом по расходу и ожидаемым расходом | Числовой | Длинное целое | |
| Phider | Фидер | Текстовый | 50 |
Таблица 3.5 - Структура таблицы "Bit"
| Имя поля | Описание | Тип | Размер | Ключ |
| Phider | Фидер | Текстовый | 50 | |
| Data | Дата | Дата | Краткий формат даты | |
| Pokaz | Показания | Числовой | Длинное целое |
Итак, спроектировано 5 таблиц базы данных. Для удобства работы две из них следует проиндексировать.
Таблицу "Phider - Rashod" - по полю Name и Data. Индекс по полю Data необходим для фильтрации записей в таблице по дате отчетного месяца. Индекс по полю Name применяется для фильтрации записей по наименованию фидера.
Таблицу "Abonent_Pashod" - по полю Nast для определения записей, которые содержат показания контрольного съема и не содержат данных о показаниях по отчету, и по полям Name и Data.
Связи между таблицами показаны на рисунке 3.7.

Рисунок 3.7 - Структура базы данных.






