SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 07.06.2016 16:08:18

M1hail
Участник
Зарегистрирован: 07.06.2016
Сообщений: 5

Помогите создать оптимизированную базу данных!

Всем здравствуйте!
Краткая предыстория:

В нашем учебном учреждении студенты питаются по схеме:
1. сдают деньги в бухгалтерию (вперед на месяц);
2. в течении месяца ходят кушать и с их счета снимается стоимость ежедневного обеда, причем баланс личного счета переходит на следующий месяц;

Проблема: в виду того, что бухгалтер локально считает всё в Excel, нет быстрого доступа данных по остаткам на счету. Выдает только в конце месяца. Многие родители просят прозрачности данных.

Задача: реализовать подсчет остатка на официальном сайте, используя возможности БД, причем сделать структуру БД максимально оптимизированной и не сложной.

Как должно быть поэтапно:
1. Бухгалтер на сайте выбирает месяц, затем отмечает галочкой дни, в которые будут обедать студенты;
2. Ежедневно с утра бухгалтер заносит в поле стоимость обеда за день. Сразу на месяц она расписать не может!
3. Староста группы в этот день обеда заходит на сайт, ставит галочки на тех студентов своей группы, которые будут обедать;
4. Производится подсчет за день, процесс повторяется на следующий день.

В конечном итоге должна быть примерно такая таблица
http://saveimg.ru/pictures/07-06-16/fd9b92d3b0f32ebf3dfd5bef86d4049c.PNG


Мои мысли по поводу структуры БД .
http://saveimg.ru/pictures/07-06-16/0cd8d58cce79c1765e0aa1fed382dc50.png
Таблица  "report" содержит студент - день обеда - статус (сходил или нет)
Таблица  "costofdays" содержит ид_дня обеда - число дня - месяц - год - цена дня
Остальные думаю будут понятны.

Прошу подсказки в правильном ли я направлении двигаюсь!? Можно ли как-то еще проще сделать реализацию БД, так как в php и SQL имею базовые знания, и пока сложно представить какие запросы SQL мне нужно реализовать,  чтобы данная БД заработала.

И еще вопрос к профессионалам, если обратиться с такой задачей к вам для решения "под ключ" (php код + структура бд), какова будут стоимость работы?

Неактивен

 

#2 07.06.2016 18:26:57

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите создать оптимизированную базу данных!

в таблицах years, month, days смысла нет
для удобства можно сделать таблицу с датами за нужный период (например, за год) чтобы не генерить эти данные в php

где информация о внесении средств (приход, дата оплаты)?

Неактивен

 

#3 08.06.2016 10:01:42

M1hail
Участник
Зарегистрирован: 07.06.2016
Сообщений: 5

Re: Помогите создать оптимизированную базу данных!

vasya написал:

в таблицах years, month, days смысла нет

чуть подробнее, пожалуйста.

vasya написал:

для удобства можно сделать таблицу с датами за нужный период (например, за год) чтобы не генерить эти данные в php

Если я правильно понял, Вы предлагаете создать таблицу с днями, когда будет обед (на год вперед)!?

vasya написал:

где информация о внесении средств (приход, дата оплаты)?

Верно подмечено!

Неактивен

 

#4 08.06.2016 11:20:34

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите создать оптимизированную базу данных!

M1hail написал:

vasya написал:

в таблицах years, month, days смысла нет

чуть подробнее, пожалуйста.

А зачем они? Равно как и отдельные поля для даты, месяца и года в таблице costofdays? Заведите одно поле типа date, в нем будет вся нужная вам инфа.


M1hail написал:

vasya написал:

для удобства можно сделать таблицу с датами за нужный период (например, за год) чтобы не генерить эти данные в php

Если я правильно понял, Вы предлагаете создать таблицу с днями, когда будет обед (на год вперед)!?

например, у вас в таблице costofdays есть три записи за первое, второе и пятое мая. Как вам получить выборку, в которой будут все 31 день месяца, чтобы построить желаемую вами таблицу?
Есть 2 варианта:
1) выбрать из базы записи за три дня, когда ели, и при обработке в php генерить недостающие дни месяца
2) сделать доп таблицу в базе, в которой будут все дни месяца (а не только когда ели) и сразу из базы вытаскивать всю нужную информацию.

Неактивен

 

#5 10.06.2016 13:13:59

M1hail
Участник
Зарегистрирован: 07.06.2016
Сообщений: 5

Re: Помогите создать оптимизированную базу данных!

vasya написал:

M1hail написал:

vasya написал:

в таблицах years, month, days смысла нет

чуть подробнее, пожалуйста.

А зачем они? Равно как и отдельные поля для даты, месяца и года в таблице costofdays? Заведите одно поле типа date, в нем будет вся нужная вам инфа.

Благодарю за разъяснение!

vasya написал:

M1hail написал:

vasya написал:

для удобства можно сделать таблицу с датами за нужный период (например, за год) чтобы не генерить эти данные в php

Если я правильно понял, Вы предлагаете создать таблицу с днями, когда будет обед (на год вперед)!?

например, у вас в таблице costofdays есть три записи за первое, второе и пятое мая. Как вам получить выборку, в которой будут все 31 день месяца, чтобы построить желаемую вами таблицу?
Есть 2 варианта:
1) выбрать из базы записи за три дня, когда ели, и при обработке в php генерить недостающие дни месяца
2) сделать доп таблицу в базе, в которой будут все дни месяца (а не только когда ели) и сразу из базы вытаскивать всю нужную информацию.

Выборку из всех дней месяца делать нет необходимости. В указанном выше варианте (рисунок формы) только дни обеда.

Проанализировал Ваши советы, пришел к выводу:
1. Структура БД должна быть  примерно такой
http://i026.radikal.ru/1606/15/d9d60e5c0ea4.png
где таблица "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 повторяются на следующий день.
Правильные ли рассуждения? Или есть еще иррациональность в действиях!?

Неактивен

 

#6 14.06.2016 05:06:32

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите создать оптимизированную базу данных!

M1hail написал:

(по идее значения там будут 1 или 0, и тут же вопрос стоит ли int назначать за переменную!?)

tinyint
а есть ли смысл в status? можно просто хранить только тех, кто обедал.

разделение на report и costofdays было логично. Сейчас у вас дублируется информация о стоимости обеда.
Порой избыточность делается специально, но для этого должны быть причины.

Неактивен

 

#7 14.06.2016 09:08:59

M1hail
Участник
Зарегистрирован: 07.06.2016
Сообщений: 5

Re: Помогите создать оптимизированную базу данных!

vasya написал:

M1hail написал:

(по идее значения там будут 1 или 0, и тут же вопрос стоит ли int назначать за переменную!?)

tinyint
а есть ли смысл в status? можно просто хранить только тех, кто обедал.

разделение на report и costofdays было логично. Сейчас у вас дублируется информация о стоимости обеда.
Порой избыточность делается специально, но для этого должны быть причины.

Абсолютно верно!
Что если так?
http://s017.radikal.ru/i429/1606/16/0356328aa174.png

Неактивен

 

#8 14.06.2016 10:34:14

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите создать оптимизированную базу данных!

Да.

Неактивен

 

#9 14.06.2016 16:53:52

M1hail
Участник
Зарегистрирован: 07.06.2016
Сообщений: 5

Re: Помогите создать оптимизированную базу данных!

Благодарю Вас, vasya! Уже перешел к реализации на php.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson