Применение базы данных в повседневной жизни

Автор vlad.sin, Пятница, Ноябрь 15, 2019, 06:08:42

« предыдущая тема - следующая тема »
Вниз

vlad.sin

Пятница, Ноябрь 15, 2019, 06:08:42 Последнее редактирование: Пятница, Ноябрь 15, 2019, 06:11:48 от vlad.sin
Доброго времени суток тому, кто вообще заглядывает в этот уголок всемирной паутины.
Во время изучения курса проектирования баз данных в MS Access у некоторых людей мог возникнуть вопрос "А зачем оно мне надо?". Ну так вот, один из примеров простого применения этих знаний и навыков в повседневной жизни.
Возникла необходимость (думаю, у многих возникнет, если ещё нет) производить учёт затрат, чтобы была возможность составить свой бюджет и не хвататься за голову с вопросом "Куда делись все деньги?". На бумажке каждый раз делать лень и хранить неудобно. К тому же, хотелось интерактивных функций и не хотелось считать вручную. Это привело меня к идее создания базы данных расходов.
Общие требования были такие:
  • учёт покупок с указанием даты и общей стоимости;
  • учёт товаров, входящих в каждую покупку, их количество, цена и итоговая стоимость каждого лота;
  • вывод списка покупок за указанный период времени с подсчетом суммарных затрат;
  • вывод списка товаров, входящих в выбранную покупку.

Ну и вот, что натворил на данный момент.
БД имеет следующую схему данных:

Итак, все данные хранятся в двух таблицах "Покупки" и "Товары". В таблице "Товары" созданы поля:
  • "ID" - идентификатор покупки;
  • "Дата" - для записи даты покупки;
  • "Имя" - для записи имени покупки/магазина;
  • "Тип" - для классификации покупки (на данный момент список типов такой:Продукты/Питание, Техника, Хоз. товары, Одежда/Обувь, Связь, Бухлишко, Медикаменты, Транспорт, Развлечения, Прочее).

Покупка не будет покупкой, если в ней нет какого-либо приобретенного товара (лота). В одной покупке может быть несколько товаров, а значит зададим связь один-ко-многим.
Назначение полей таблицы "Товары" описывать, думаю, излишне. Кроме  поля "Стоимость", которое вычисляется как "Количество"*"Цена". Так как имеется связь один-ко-многим с установленными флагами целостности, то можно вносить записи в таблицу "Товары" прямо в процессе заполнения таблицы "Покупки", что видно на скриншоте ниже.

На данном этапе разработки внесение данных в таблицы происходит через редактирование таблиц. В дальнейшем планируется создать удобную форму для этих целей.
Первые два пункта требований практически готовы. Реализация остальных выполнена в виде отчетов и небольшой формы.

В верхней части можно вывести список покупок за выбранный месяц либо за целый год. В нижней части можно ввести промежуток времени, за который также будет выведен список в отчете. Дополнительные кнопки снизу позволяют задать промежуток в 30, 90 и 180 дней, задав лишь конечную дату периода.
В любом случае, будет открыт отчет "Покупки_temp". Возможно, кто-то спросит "Почему temp?". Потому что отчет немного динамический. В зависимости от выбранных параметров на форме будут изменяться:
  • запрос, лежащий в основе отчета (изменяется период времени);
  • заголовок запроса (для красоты и морального удовлетворения).



Внизу отчета подсчитывается суммарная стоимость с помощью костыля небольшой уловки, потому что функция Sum не хочет работать с многоуровневыми запросами.
Для того, чтобы посмотреть товары, нужно нажать на "+" возле выбранной покупки, что откроет запрос "Товары_temp", где в основе тоже динамичный запрос и заголовок.

В этом отчете добавлены нумерация по порядку и суммарная стоимость покупки. Последняя реализована уже стандартно, с помощью функции Sum.
Для динамического изменения запросов и заголовков отчетов был написан код VBA. Специально для форума привел названия всех объектов БД к человеческому виду для упрощенного изучения данной БД. Если интересует реализация какой-либо фичи - спрашивайте, объясню.

Что дальше? Дальше планируется добавить, как уже говорилось выше, форму для внесения записей. Помимо этого хотелось бы добавить вывод списка покупок и/или товаров по категориям (не зря же я их добавил); добавить анализ покупок или хотя бы диаграммы по типам. Возможно заложить функционал для планирования бюджета, добавив так же и доходы. И экономический анализ по принципу 80/20 для наглядной и простой сортировке товаров по, так сказать, важности.
К сожалению, у БД есть один существенный минус, который вряд-ли будет решен - ручное внесение записей. По этой же причине нет смысла классифицировать каждый товар (например, на молочные продукты, мясо, вода, хлеб, печеньки и тд), так как это можно продолжать до бесконечности (особенно учитывая тот факт, что в БД хранятся абсолютно любые товары, не только продукты) и вручную вбивать это будет проблематично. Возможно, никогда-нибудь процесс внесения записей будет переложен на т.н. ИИ.

Зачем выложил работу на этот форум? По трём причинам:
Во-первых, возможно это кого-нибудь заинтересует в изучении, создании и использовании баз данных даже для повседневных задач. Что может существенно упростить некоторые аспекты жизни.
Во-вторых, для всеобщего обсуждения. Здесь можно задать вопросы и получить ответы по поводу всех решений, созданных в данной БД. Но, вполне возможно, что они окажутся неоптимальными или с ошибками. Поэтому приветствуется конструктивная критика и предложения по доработке и внесению нового функционала.
В-третьих, ну, возможно кто-то найдет полезным применение данной БД и в своей жизни. БД прикреплена в шапке темы.

Будем надеяться, что тема не заглохнет и получит развитие. Тем более есть планы по созданию куда более сложной БД для домашнего бара, но это уже другая история.

Вверх