Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Базы данных и репортинг > Создание БД |
Автор: Мелкий 25.5.2006, 07:36 |
Меня попросили создать БД по кварплате. Создать базы вообщето не проблема. Единственная проблема как их организовать. Можно конечно записать все в одну таблицу. Но это несерьезно. Вообщем объясню проблему. Есть база с данными улиц, домов, квартир (постоянная). Должны быть и другие с именами жильцов, тарифов на данный вид услуг, задолжности, показатели (переменные). Т.е в течении месяца может менятся тариф, менятся жильцы. Каким образом организовать базу данных? Создавать на каждый день новую БД, а потом расчет вести по всем созданным базам? Если есть какая нибудь идея? |
Автор: lexsedrex 25.5.2006, 08:57 |
советовал бы зделать первую таблицу с адресами домов, где адрес домов - ключь, туда же лепиш номер квартиры. вторая таблица с расчеткой и прочей инфой, где через код адрес дома и номер квартиры связаный с первой таблицей. получаеш каскад, и все хорошо. если чтото не удастся, мыль на маил.ру по адресу to_moe_mulo(on)mail.ru в суботу буду свободен и сделаю |
Автор: skyboy 25.5.2006, 08:59 |
Мелкий, есть такие понятия, как нормализация и нормальная форма. Ссылку не кину. Поискай в Википедии. Так вот, в одну таблицу или таблицу по дням пихать всё записи не надо однозначно. А о структуре можно говорить, только если ты дашь данные и связи между ними... Типа этого: Информация о платильщике влючает в себя данные о адресе(город, улица, дом, квартира, комната, номер койки от двери). Информация о оплате услуги(услуга, уровень оплаты, задолженность). Услуг одному жильцу может предоставляться несколько и количество неограничено. Соответственно, и данных об оплате может быть неограниченное количество. Данные об услуге: название, тариф, льгота. Если льгот по тарифам может быть несколько(не вижу причины, почему бы не было так), то информация о льготе заключается в указании услуги, к которой относится льгота, и процентном выражении льготы. Так? Или не так? Если так - тогда будем думать дальше. Информация о платильщике имеет целостный характер? Один человек(не в отношении ФИО, а в отношении идентификатора платильщика) может проживать в нескольких квартирах(числиться платильщиком)? Нет? Тогда база, хранящая информация о платильщике должна быть целостной(улицы и города надо бы вынести в отдельную базу, чтоб избежать дублирования хранимой информации): <идентификатор платильщика> <фамиилия> <имя> <отчество> <идентификатор города> <идентификатор улицы> <номер дома> <номер квартиры> Таблица городов: <идентификатор города> <название города> Таблица улиц: <идентификатор улиц> <название улицы> Таблица информации об услуге: <идентификатор услуги> <наимеование> <тариф> Таблица льгот(включает в себя строку "без льготы"): <идентификатор льготы> <идентификатор услуги> <наименование> <скидка> <флаг, отображающий, процентная относительная скидка или абсолютная> Таблица текущий тарифов: <идентификатор платильщика> <идентификатор льготы> <идентификатор услуги> Тут спорный момент. С одной стороны, без третьего столбца в этой таблице вполне можно обойтись. С другой стороны, для этой таблицы именно сочетание 1 и 3 столбца является уникальным и адекватным - если делать ключ по связке перого и второго столбца, то: - возможна ситуация, когда один платильщик будет "подписан" на разные льготы одной и той же услуги одновременно и это не проконтролируешь - чтоб определить величину требуемой оплаты, придетёся проходить через таблицу льгот, в которой ключом является идентификатор льготы, а поле идентификатора услуги неключевое - это даст некоторое замедление при обработке больших массивов информаии. Таблица оплат: <идентификатор записи(автоинкремент)> <идентификатор платильщика> <идентификатор услуги> <дата оплаты> <величина оплаты> добавлено @9.41(Лондон + 2.00 ![]() В таблице текущих тарифов надо(можно) вставить поле текущего состояния дел - баланса: Таблица текущий тарифов: <идентификатор платильщика> <идентификатор льготы> <идентификатор услуги> <текущий баланс> Тогда в начале месяца будем уменьшать баланс на величину требуемой оплаты, а при оплате - увеличивать на величину уплоченных бумажек. |
Автор: SergeBS 25.5.2006, 16:46 | ||||
lexsedrex,
Громко сказано. Рекомендую почитать "Введение в базы данных" Алексей Федоров, Наталия Елманова. Прочтешь - дозреешь до более серьезных книжек типа Дейта, Ульмана. Мелкий,
Если это единственная проблема, то не берись за эту задачу. Это у тебя ГЛАВНАЯ ПРОБЛЕМА. И задачу ты не решишь - по подсказкам такие проекты не делаются, тут самому разбираться надо. |
Автор: SergeBS 25.5.2006, 17:21 |
skyboy, Ну однако сколько написал. Мне бы лень было. НО толку - 0, поскольку: 1. Если некая контора желает сэкономить и получить решение от вчерашнего студента - флаг в руки. им же хуже будет. В России такие проекты стоят минимум 300000 р. (я знаю, о чем говорю - сам в подобном проекте завязан). Вообще-то есть куча мест, где такую задачу уже решили. Для себя. 2. Бесполезно дистанционно давать шпаргалки. Тут не экзамен. Сам не знаешь - провалишь. 3. Специфики задачи ты не знаешь. Примеры: 1. на самом деле льготы бывают разные: а) на определенный метраж - скидка 50%, дальше - 100%. Пример - ветеран. б) распространяющаяся на всю семью на всю услугу. Пример - многодетные. .. и т.д. Т.е. в семье может быть несколько льготников и потому привязывать льготу к тарифу - невозможно. Льгота привязывается к категории льготника, а уже в категории - на какую услугу - какая льгота. И суммируем по всей семье. 3 месяца убил, пока заработало. ![]() У меня в справочнике льготных категорий - 20. Потому что льготы еще существенно зависят от наличия/отсутствия лифта, газа, горячей воды. А еще есть частные дома - совсем отдельная песня, например льгота на дрова (раз в год - заготовка к отопительному сезону). Тут вообще башню снесет ![]() 2. количество услуг принципиально ограничено. В месяц их можно иметь ну максимум 7. Остальные - на квартплату не влияют (например телефон, кабельное ТВ ...) - отдельные конторы никак как правило с ЖЭУ не связанные. Ну еще по мелочам: улица должна иметь привязку к городу, поскольку например улица Строителей и проспект Строителей есть в любом городе с населением от 100 тыс. И т.п. Короче, структура твоя - ни к черту. Не так это делается. |
Автор: skyboy 25.5.2006, 17:41 |
спасибо ![]() |
Автор: Мелкий 29.5.2006, 06:14 |
SergeBS Можно узнать Ваш вариант. Я не прошу полностью расказать. Просто направьте. Мне нужно всего лишь знать как можно построить структуру программы. Каким образом БД и какие Бд должны взаимодействовать друг с другом |
Автор: SergeBS 29.5.2006, 07:43 | ||
skyboy, Без обид, лады? Просто я этим 3-й год занимаюсь, потому и знаю. Мелкий, Ну вот на затравку кусочек:
Вот направление. А дальше - карандашик, листочек, разобраться с тем, что такое "сущность" и что такое "связи". Один раз потратить на это кучку времени - это окупится. Сэкономит дальше оччень много. |