Как правильно организовать базу данных SQLITE - очень много данных по дате

Хочу сделать что-то вроде книги записи расходов.Каждый пользователь сможет записать сколько и на что он сегодня потратил.

Например: Вчера: еда - 500 топливо - 400 аптека - 150

Сегодня: Еда 300, развлечения - 700, одежда - 1500, топливо 500.

Потом это все суммируется за определенный период, и выдается отчет. Еда - 800, топливо - 900 и т.д.

Как новичок, я вижу структуру только в одном виде: Для каждого пользователя создается отдельная таблица, в которую уже идут записи, где вместо ID - дата.

Но это нормально, если будут пользоваться десяток человек, если сотни? Как правильно ее организовать?

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


Ответы (1 шт):

Автор решения: Sergey

Для каждого пользователя создается отдельная таблица

Это абсолютно неправильно. Нужно использовать две таблицы:

  1. Таблица пользователей (ID, ФИО)
  2. Таблица расходов (ID, User_ID, DataAction, Pay)

И основная таблица (Расходы) ссылается на таблицу пользователей.

я создаю колонку podarok_mame, и записываю в него значение

Это абсолютно неправильно. Надо расширить основную таблицу расходов так:

  1. ID записи в этой таблице
  2. User_ID - кто соврешил расход - ссылка на таблицу пользователей
  3. DataAction - дата соврешения расхода
  4. Pay - сумма платежа
  5. Type - За что платим (Еда, топливо, мама...) Ссылка на таблицу типов платежей

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

Настоятельно рекомендую Вам прочить любую книжку по проектированию СУБД. Именно не про программирование, а про проектирование.

Например: В.В. Кирилов, "Основы проектирования реляционных БД"

Для начала, разберитесь, что такое первая, вторая и третья нормальные формы таблиц. Ну и про реляционную алгбру тоже надо иметь представление.

→ Ссылка