Задавайте вопросы, мы ответим
Вы не зашли.
Всем здравствуйте!
Краткая предыстория:
В нашем учебном учреждении студенты питаются по схеме:
1. сдают деньги в бухгалтерию (вперед на месяц);
2. в течении месяца ходят кушать и с их счета снимается стоимость ежедневного обеда, причем баланс личного счета переходит на следующий месяц;
Проблема: в виду того, что бухгалтер локально считает всё в Excel, нет быстрого доступа данных по остаткам на счету. Выдает только в конце месяца. Многие родители просят прозрачности данных.
Задача: реализовать подсчет остатка на официальном сайте, используя возможности БД, причем сделать структуру БД максимально оптимизированной и не сложной.
Как должно быть поэтапно:
1. Бухгалтер на сайте выбирает месяц, затем отмечает галочкой дни, в которые будут обедать студенты;
2. Ежедневно с утра бухгалтер заносит в поле стоимость обеда за день. Сразу на месяц она расписать не может!
3. Староста группы в этот день обеда заходит на сайт, ставит галочки на тех студентов своей группы, которые будут обедать;
4. Производится подсчет за день, процесс повторяется на следующий день.
В конечном итоге должна быть примерно такая таблица
Мои мысли по поводу структуры БД .
Таблица "report" содержит студент - день обеда - статус (сходил или нет)
Таблица "costofdays" содержит ид_дня обеда - число дня - месяц - год - цена дня
Остальные думаю будут понятны.
Прошу подсказки в правильном ли я направлении двигаюсь!? Можно ли как-то еще проще сделать реализацию БД, так как в php и SQL имею базовые знания, и пока сложно представить какие запросы SQL мне нужно реализовать, чтобы данная БД заработала.
И еще вопрос к профессионалам, если обратиться с такой задачей к вам для решения "под ключ" (php код + структура бд), какова будут стоимость работы?
Неактивен
в таблицах years, month, days смысла нет
для удобства можно сделать таблицу с датами за нужный период (например, за год) чтобы не генерить эти данные в php
где информация о внесении средств (приход, дата оплаты)?
Неактивен
vasya написал:
в таблицах years, month, days смысла нет
чуть подробнее, пожалуйста.
vasya написал:
для удобства можно сделать таблицу с датами за нужный период (например, за год) чтобы не генерить эти данные в php
Если я правильно понял, Вы предлагаете создать таблицу с днями, когда будет обед (на год вперед)!?
vasya написал:
где информация о внесении средств (приход, дата оплаты)?
Верно подмечено!
Неактивен
M1hail написал:
vasya написал:
в таблицах years, month, days смысла нет
чуть подробнее, пожалуйста.
А зачем они? Равно как и отдельные поля для даты, месяца и года в таблице costofdays? Заведите одно поле типа date, в нем будет вся нужная вам инфа.
M1hail написал:
vasya написал:
для удобства можно сделать таблицу с датами за нужный период (например, за год) чтобы не генерить эти данные в php
Если я правильно понял, Вы предлагаете создать таблицу с днями, когда будет обед (на год вперед)!?
например, у вас в таблице costofdays есть три записи за первое, второе и пятое мая. Как вам получить выборку, в которой будут все 31 день месяца, чтобы построить желаемую вами таблицу?
Есть 2 варианта:
1) выбрать из базы записи за три дня, когда ели, и при обработке в php генерить недостающие дни месяца
2) сделать доп таблицу в базе, в которой будут все дни месяца (а не только когда ели) и сразу из базы вытаскивать всю нужную информацию.
Неактивен
vasya написал:
M1hail написал:
vasya написал:
в таблицах years, month, days смысла нет
чуть подробнее, пожалуйста.
А зачем они? Равно как и отдельные поля для даты, месяца и года в таблице costofdays? Заведите одно поле типа date, в нем будет вся нужная вам инфа.
Благодарю за разъяснение!
vasya написал:
M1hail написал:
vasya написал:
для удобства можно сделать таблицу с датами за нужный период (например, за год) чтобы не генерить эти данные в php
Если я правильно понял, Вы предлагаете создать таблицу с днями, когда будет обед (на год вперед)!?
например, у вас в таблице costofdays есть три записи за первое, второе и пятое мая. Как вам получить выборку, в которой будут все 31 день месяца, чтобы построить желаемую вами таблицу?
Есть 2 варианта:
1) выбрать из базы записи за три дня, когда ели, и при обработке в php генерить недостающие дни месяца
2) сделать доп таблицу в базе, в которой будут все дни месяца (а не только когда ели) и сразу из базы вытаскивать всю нужную информацию.
Выборку из всех дней месяца делать нет необходимости. В указанном выше варианте (рисунок формы) только дни обеда.
Проанализировал Ваши советы, пришел к выводу:
1. Структура БД должна быть примерно такой
где таблица "coming" приход денег, в таблице "report" столбец "status" отвечает за поел/не поел (по идее значения там будут 1 или 0, и тут же вопрос стоит ли int назначать за переменную!?) столбец "costofdays" - сумма обеда за этот день, которая в итоге должна умножаться на статус и вычитаться из "balance" таблицы "students" соответствующего студента.
2. Алгоритм действий в php:
1. Бухгалтер на сайте выбирает месяц, затем отмечает галочкой дни, в которые будут обедать студенты - в таблице "report" для каждого студента заносятся эти самые даты(много строк получается) пока с нулевыми значениями столбцов "status", "costofday";
2. Ежедневно с утра бухгалтер заносит в поле стоимость обеда за день. - в таблице "report" для каждого студента заносится сумма обеда в "costofday"
3. Староста группы в этот день обеда заходит на сайт, ставит галочки на тех студентов своей группы, которые будут обедать - в таблице "report" у тех студентов, которые обедают становится "status" равным 1, затем "status" умножаем на "costofday" и вычитаем из "balance" таблицы "students" (выше писал уже);
4. Пункты 2-3 повторяются на следующий день.
Правильные ли рассуждения? Или есть еще иррациональность в действиях!?
Неактивен
M1hail написал:
(по идее значения там будут 1 или 0, и тут же вопрос стоит ли int назначать за переменную!?)
tinyint
а есть ли смысл в status? можно просто хранить только тех, кто обедал.
разделение на report и costofdays было логично. Сейчас у вас дублируется информация о стоимости обеда.
Порой избыточность делается специально, но для этого должны быть причины.
Неактивен
vasya написал:
M1hail написал:
(по идее значения там будут 1 или 0, и тут же вопрос стоит ли int назначать за переменную!?)
tinyint
а есть ли смысл в status? можно просто хранить только тех, кто обедал.
разделение на report и costofdays было логично. Сейчас у вас дублируется информация о стоимости обеда.
Порой избыточность делается специально, но для этого должны быть причины.
Абсолютно верно!
Что если так?
Неактивен
Да.
Неактивен
Благодарю Вас, vasya! Уже перешел к реализации на php.
Неактивен