Гость
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Помогите с оценкой актуальности решения / 10 сообщений из 10, страница 1 из 1
03.10.2020, 18:16
    #40005148
pyDev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с оценкой актуальности решения
Нужно реализовать систему начисления балов пользователю с описанием за что эти балы были зачислены. Аналогичным образом они могут отниматься.
Так вот, я себе вижу эту реализацию следующим образом:

Таблица "Balance" с полями:
"user_id" - которое одновременно будет первичным ключом. (Почему первичным? Потому что у нас нету таблицы пользователей, она на другом сервере\сервисе. Поэтому мне это показалось логичным).
"scores" - собственно сами балы пользователя.

Таблица "Description" c полями:
"text" - инфо. за что балы зачислены
"created" - когда они были зачислены
"user_id" - внешний ключ на user_id из таблицы "Balance"


Насколько коректная\кривая такая реализация?
Благодарю за ответы.
...
Рейтинг: 0 / 0
03.10.2020, 18:24
    #40005149
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с оценкой актуальности решения
pyDevНасколько коректная\кривая такая реализация?

"Баллы пользователя" (и вообще таблица Balance) - преждевременная оптимизация, способная
вылезти боком. Для начала достаточно одной таблицы начисления баллов.
...
Рейтинг: 0 / 0
03.10.2020, 18:35
    #40005153
pyDev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с оценкой актуальности решения
Dimitry Sibiryakov, понимаю. Но если отталкиваться сугубо от условий которые я описал? У нас каждое отдельное начисление сопровождается описанием (за что они были начислены), которое нужно хранить. Здесь одной таблицой не отделаешься.
...
Рейтинг: 0 / 0
03.10.2020, 19:44
    #40005165
НеофитSQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с оценкой актуальности решения
pyDev
Нужно реализовать систему начисления балов пользователю с описанием за что эти балы были зачислены. Аналогичным образом они могут отниматься.
Так вот, я себе вижу эту реализацию следующим образом:

Таблица "Balance" с полями:
"user_id" - которое одновременно будет первичным ключом. (Почему первичным? Потому что у нас нету таблицы пользователей, она на другом сервере\сервисе. Поэтому мне это показалось логичным).
"scores" - собственно сами балы пользователя.

Таблица "Description" c полями:
"text" - инфо. за что балы зачислены
"created" - когда они были зачислены
"user_id" - внешний ключ на user_id из таблицы "Balance"


Насколько коректная\кривая такая реализация?
Благодарю за ответы.


Я бы перенес "scores" во вторую таблицу. Иначе если Вася получил 5 баллов по физкультуре и 3 балла по поведению, в вашей схеме разграничение теряется, остается только сумма. Просуммировать баллы для отчета проблемы не представит.

После этого уберите первую таблицу, она лишняя.
...
Рейтинг: 0 / 0
03.10.2020, 23:07
    #40005209
Deon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с оценкой актуальности решения
У нас есть такая система.

Вот как это выглядит.

1) Таблица одна, ибо в чем смысл "сводной" таблицы, если ее придется править при изменении таблицы начисления, и тот же запрос можно вызывать не КАЖДЫЙ раз при изменении, а только когда надо видеть сумму.
2) Надо продумать, всегда ли надо знать ВСЁ, или иногда баллы только одной категории. Если категории разные, лучше их ввести как вариант для простой сортировки.
3) Если баллы начисляет больше одного человека, лучше ввести поле кто начислил, чтобы знали потом с кого спрашивать.
4) Если пользователей очень сильно много, то можно еще и индекс ввести соответствующий, для оптимизации.

Итого
"used_id", "баллы", "комментарий", "категория"(опционально, для сортировки), "кто начислил"(опционально, чтобы знать ответственного)

В итоге когда надо будет посмотреть баллы пользователя, будете делать просто SELECT * WHERE user_ud='xxx', и еще можно по категории выборку сделать.
...
Рейтинг: 0 / 0
04.10.2020, 01:54
    #40005224
pyDev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с оценкой актуальности решения
Всем большое спасибо за ответы.
...
Рейтинг: 0 / 0
04.10.2020, 10:41
    #40005243
pyDev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с оценкой актуальности решения
Решение с хранением в одной таблице понятно. Но что если нам нужно отнять какое-то количество балов от общей суммы (аналогично с описанием за что были сняты)? (Я в первом посте это упоминал).
...
Рейтинг: 0 / 0
04.10.2020, 11:18
    #40005247
graycode
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с оценкой актуальности решения
pyDev,

Два варианта, или сумма считается каждый раз в запросе или создаете на своей стороне таблицу пользователей в которой храните рассчитанную сумму, расчетное поле корректируется каждый раз при добавлении строки в таблицу с баллами.
...
Рейтинг: 0 / 0
04.10.2020, 12:40
    #40005256
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с оценкой актуальности решения
pyDevНо что если нам нужно отнять какое-то количество балов от общей суммы (аналогично с
описанием за что были сняты)?

Про отрицательные числа Вы когда-нибудь слышали?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
04.10.2020, 18:39
    #40005288
pyDev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с оценкой актуальности решения
Dimitry Sibiryakov

Про отрицательные числа Вы когда-нибудь слышали?

Слышал :)
Всё прояснилось, разобрался. Благодарю отозвавшихся за помощь!
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Помогите с оценкой актуальности решения / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]