Кафедра АППиЭ

Кафедра => Общий раздел => Тема начата: vlad.sin от Пятница, ноября 15, 2019, 06:08:42

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

Ну и вот, что натворил на данный момент.
БД имеет следующую схему данных:
(https://c.radikal.ru/c20/1911/02/ee5554cdd811.png)

Итак, все данные хранятся в двух таблицах "Покупки" и "Товары". В таблице "Товары" созданы поля:

Покупка не будет покупкой, если в ней нет какого-либо приобретенного товара (лота). В одной покупке может быть несколько товаров, а значит зададим связь один-ко-многим.
Назначение полей таблицы "Товары" описывать, думаю, излишне. Кроме  поля "Стоимость", которое вычисляется как "Количество"*"Цена". Так как имеется связь один-ко-многим с установленными флагами целостности, то можно вносить записи в таблицу "Товары" прямо в процессе заполнения таблицы "Покупки", что видно на скриншоте ниже.
(https://b.radikal.ru/b15/1911/c4/25d4e92e2bc5t.jpg) (https://b.radikal.ru/b15/1911/c4/25d4e92e2bc5.png)

На данном этапе разработки внесение данных в таблицы происходит через редактирование таблиц. В дальнейшем планируется создать удобную форму для этих целей.
Первые два пункта требований практически готовы. Реализация остальных выполнена в виде отчетов и небольшой формы.
(https://b.radikal.ru/b25/1911/13/a5792375c6e6.png)

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

(https://c.radikal.ru/c27/1911/b2/d34639608d0ct.jpg) (https://c.radikal.ru/c27/1911/b2/d34639608d0c.png)
(https://d.radikal.ru/d25/1911/b2/edfc164e4b4bt.jpg) (https://d.radikal.ru/d25/1911/b2/edfc164e4b4b.png)

Внизу отчета подсчитывается суммарная стоимость с помощью костыля небольшой уловки, потому что функция Sum не хочет работать с многоуровневыми запросами.
Для того, чтобы посмотреть товары, нужно нажать на "+" возле выбранной покупки, что откроет запрос "Товары_temp", где в основе тоже динамичный запрос и заголовок.
(https://b.radikal.ru/b29/1911/67/fb6133a17874t.jpg) (https://b.radikal.ru/b29/1911/67/fb6133a17874.png)

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

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

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

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