При проектировании базы данных следует придерживаться правил нормализации таблиц:
каждое поле любой таблицы должно быть уникальным;
каждая таблица должна иметь уникальный идентификатор (первичный ключ), который может состоять из одного или нескольких полей таблицы;
для каждого значения первичного ключа должно быть одно и только одно значение любого из столбцов данных, и это значение должно относиться к объекту таблицы;
должна иметься возможность изменения значения любого поля (не входящего в первичный ключ), и это не должно повлечь за собой изменения другого поля.
Каждый объект будет представлен отдельной таблицей базы данных. Элементы данных будут представлены полями таблиц. Имена таблиц и их полей подберем исходя из имен объектов и элементов данных. Проект базы данных включает в себя 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 - Структура базы данных.