Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Access > Не могу определиться со структурой БД


Автор: Nowichok 27.8.2009, 13:48
Нужна помощь знающих людей. Весь день голову ломаю. 
Пишу программу для работы с отчётностью по коммунальным услугам.
Есть учреждения, есть договорные значения на каждон учреждение, есть фактические значения на каждое учреждение, есть информация о приборах учёта на каждое учр.

Так вот.  на КАЖДЫЙ МЕСЯЦ имеются данные:

Договорные значения - 2 числа
Фактические значения - 2 числа
Приборы учёта - 5 или 6 чисел.

В голове есть 2 варианта, какую структуру сделать у БД.
Вариант № 1 :
 Делать 4 таблицы - Учреждение, Договор, Факт, Приборы_учёта. Тогда получим, что в Договоре и Факте будет по 2*12=24 поля (на все 12 месяцев). А в таблице приборов учёта 5*12=60 !!!!!

Вариант № 2 :
Делать на каждый месяц отдельную таблицу по Договору, Факту и Приборам_учёта. В каждой таблице будет по 2-5 чисел, НО кол-во таблиц в базе будет тоже приличное.

Как быть ? Какой подход будет более разумным ? 

Автор: vladimir74 27.8.2009, 13:58
поля и темболее таблицы для месяцев создавать - не красиво, даже для MS Access :(
предлагаю ввести дату. и читать/писать по дате...
дальше не совсе понятно с Договорные значения и Фактические значения это как я понял 1- контора обязуется, 2- по факту у конторы обнаружили? Как воносятся эти данные вместе или раздельно? возможно их можно соединить в одну таблицу и сортировать по коду значения, или сделать два поля ...
Приборы учёта - это что? какая связь с учетом самим?
влюбом случае меньше редурдантных полей и таблиц решаются с помощью поля даты smile

Автор: Akina 27.8.2009, 14:08
Цитата(Nowichok @  27.8.2009,  14:48 Найти цитируемый пост)
 Какой подход будет более разумным ?  

Оба неразумны.

Начните с минимального самообразования по теме "Нормализация баз данных". Затем выделите сущности своего процесса и на основе этих данных составляйте схему.

Автор: Nowichok 27.8.2009, 14:26
2vladimir74 
 А как можно реализовать работу через даты ? Вы имеет ввиду что-то вроде такой структуры (к примеру, Договора)
 Код_учр \\  Гкал  \\ М_куб \\ дата (на какой месяц ?)

имеется 350 учреждений. 350 записей такого рода - на один месяц. 350*12 = ...... Полей то меньше, а записей стала тьма.

На НАЧАЛО ГОДА распеределяются ДОГОВОРные значения на каждое учреждение. Сколько по договору должно потратиться за каждый месяц (Гкал м_куб). 

В КОНЦЕ каждого МЕСЯЦА забиваются ФАКТические значения со счёт-фактур. Те же самые Гкал и М_куб. Приборы учёта говорят каждый месяц, сколько дней приборы отработали, сколько намотали, сколкьо стоимость обслуживания этих приборов за каждый месяц.  От приборов учёта зависит, по какому методу счёт-фактура будет. ЭТо уже нюансы.


 2Akina
 Опыт работы есть, с сущносятми и нормализацией знаком. В данной ситуации я не вижу других  явных сущностей (кроме тех, что я выделил) (((( Может уже пора отдохнуть

Либо ещё один вариант. Делать 12 таблиц. В каждой таблице будем инфа о коде учреждения, договорных значениях (2 числа) на этот месяц, фактических значениях (2 числа ), о приборах учёта (5 чисел). Таблиц - 12. Полей - от 10 и выше.
В данном случае мне непривычно, что разнородная информация содержится в одном месте. Я уж привык - если договорные значения, то в ДОГОВОР. Если фактические - то в ФАКТ (я о таблицах)

Автор: vladimir74 27.8.2009, 15:00
Цитата(Akina @  27.8.2009,  12:08 Найти цитируемый пост)
Начните с минимального самообразования по теме "Нормализация баз данных".

 smile 
я пока сильно плаваю в твоей задаче, но
1. есть таблица предприятий
2. таблица приходящих значений 
код предприятия, данные, дата снятия значений
с договорными данными - тут в зависимости как оно приходит и считается если за год, то возможно стоит ввести третью таблицу, опять же с датой договора и сроком договора. потом можно просчитать как обстоит дело у предприятия за данный период из таблицы 3 по данным таблицы 2. (Это пример, т.к. я не совсем знаю задачу)

Автор: Nowichok 27.8.2009, 19:03
Отброшу лишнее и попытаемся разобраться:
Есть таблица предприятий - верно. 

Код учр \\ наим-е учр-я \\ адресс \\ и т.п.

Из этого нам нужен только Код_учр, по нему будем определять учреждение однозначно.
----------------------------

Есть таблица Договор - договорные значения к КАЖДОМУ учреждению на каждый месяц. Таблица создаётся в январе и, чаще всего, неизменна в течение года.
 Код учр. \\ ГКал \\ М_куб   - образно такой формы значения. Т.е. если представить это в Excel'е, то после кода учр-я идёт 2*12=24 поля. За все 12 месяцев. Чем не таблица ?smile

----------------------------

Есть таблица ФАКТ - фактические значения к КАЖДОМУ учреждению на каждый месяц. Таблица изначально, ест-но, пуста. Каждый месяц приходят счёт-фактуры, и из них берётся та же информация (цифры ток другие могут быть) и заносится. 
 Код учр. \\ ГКал \\ М_куб   - образно такой формы значения. 
На этом этапе оператор сравнивает фактические значения с договорными. Если не совпадают - разбирается. Это я к тому, зачем нужны вообще эти таблицы.

--------------------------

Есть таблица Приборы учёта. ТОчнее таблицы пока даже нет. Есть информция - каждый месяц на КАЖДОЕ учреждение пишется, чколько дней отработал счётчик, какие показания (Гкал и м_куб) он дал, какова стоимость его обслуживанияв этом месяце.

 Код учр. \\ кол_во отр-х дней в этом месяце \\ кол-во доработанных дней в предыдущем месяце (т.к. значения счётчик показывает с 20е число по 20е число, т.е. 2 месяца захватывает)  \\ ГКал \\ М_куб \\ сумма_за обслуживание счётчика  - образно такой формы значения. 

5-6 полей. За 12 месяцев получаем в Excel'ском файле 12*5=60 полей.


Теперь КАК это по порядку происходит.
Каждый месяц в 15-17х числах оператор получает данные  сначала О СЧЁТЧИКАХ. Забивает (куда-то smile ). Через пару дней приходят счёт-фактуры на учреждения. Сначала сверяется число (к примеру ГКал) из счёт-фактры с показаними счётчика на данное учреждение. Если числа совпадают, то сверяется это же число с договорной цифрой ( всё в рамках одного и того же месяца 
). Если не сильно превышает - заносим в ФАКТ значения Гкал и М_куб. Если сильно превышает - оператор разбирается, почему такое число

Всё описал. Краткая схема. После этого там ещё заморочек хватает. Но пока с этим разобраться. Вот КАК это реализовать ??

Все идеи с введением ПОЛЯ ДАТЫ вконечном итоге приведут к тому, что на каждое учреждение должно быть несколько записей. В худшем случае 350*12= 4200 записей.

Автор: vladimir74 27.8.2009, 19:20
Цитата(Nowichok @  27.8.2009,  17:03 Найти цитируемый пост)
Все идеи с введением ПОЛЯ ДАТЫ вконечном итоге приведут к тому, что на каждое учреждение должно быть несколько записей. В худшем случае 350*12= 4200 записей.

ну и да smile а что в этом плохово? это ж база данных (хотя говоря об MS Access это извращение, да простят меня любители...)
ничего страшного нет в колличестве записей, намного страшнее колличество ненужных полей и таблиц...
ты же потом будешь вытаскивать только нужную тебе информацию (притом из расчета код предпиятия+дата) вот и строй структуру изначально пож это...
а то ты сейчас нарисуешь 12 полей, а завтра придет умный дядя и скажет хочу информацию не раз в месяц а два раза!! и что мы будем делать  smile 
Можно конечно теоретически подогнать вторую и третью таблицу под одну, но мне кажется это лишнее (хотя как я понял сущности там практически единтичны) но в последствии теоретически могут возникнуть проблемы :(
так что лучше таблица для договорных данных и таблица для фактических. С записью даты (или двух дат начала и конца периода...)
и поиск потом по этому промежутку времени и коду предприятия по двум таблицам....

Во всяком случае это мое предложение....

Автор: Akina 27.8.2009, 21:13
В вашей задаче есть 4 сущности:
Учреждение
Договор
Прибор
Показание
Вот от этого и пляшите. А если есть жёсткая связь одно учреждение == один договор, то сущностей вообще остаётся три.

Цитата(Nowichok @  27.8.2009,  15:26 Найти цитируемый пост)
Опыт работы есть, с сущносятми и нормализацией знаком. В данной ситуации я не вижу других  явных сущностей 

Гм... выделять дату в сущность... это же только атрибут сущности Показание.

Автор: Nowichok 30.8.2009, 05:50
2vladimir74
 Ваш ответ меня окончательно убедил. Вделаю поле даты. И пуст будет 4200 строк smile

Считаю вопрос решённым. Спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)