2015-07-14 2 views
0

Я хочу разработать валютную систему на пользовательском форуме, над которым я работаю, но я не знаю, как лучше всего подойти.Валюта Структура данных SQL

Должен ли я добавить новое «золотое» поле в свою пользовательскую таблицу и увеличивать с помощью операторов sql?

id, user, pass, created_at, gold

Logic: пользователь создает новый форум пост; обновление пользовательского таблицы: gold + 1

ИЛИ

Должен ли я добавить таблицу транзакций, который записывает все и сделать count where user = x?

id, user_id, amount 
1  3  1 (new forum post) 
2  3  1 (new forum post) 
3  12  -5 (item purchase) 
4  3  -1 (deleted post) 
5  9  1 (new forum post) 

ИЛИ есть еще лучший подход?

+0

В чем именно используется валютная система? Как репутация здесь я принимаю на основе ваших примеров? Если дисковое пространство не является проблемой, я бы рекомендовал регистрировать каждую транзакцию, чтобы у вас был журнал всего. Пользователи могут быть разборчивы, когда вы не можете устранить проблему с репутацией/золотом/опытом/etc с их учетной записью. –

+2

Ну, есть что-то известное как [Нормализация базы данных] (https://en.wikipedia.org/wiki/Database_normalization). Часть этого означает, что вы не должны создавать сумасшедшее количество столбцов на таблице. Но это также зависит от того, какие данные вы сохраняете, и что вы будете делать с ним в будущем. Планируете ли вы иметь дополнительные дни дохода? Золотые заработки? В этом случае предпочтительной является таблица транзакций. Но если нет, и это действительно просто золото, столбец в пользовательской таблице будет в порядке. – icecub

+0

Я думаю, что это похоже на репутацию. Идея состоит в том, чтобы увеличить «золото» на величину X каждый раз, когда пользователь добавляет комментарий. Если у меня есть тысячи строк, 'count()' становится неэффективным? –

ответ

1

Это очень зависит от того, что вы хотите с ним делать, и каким образом вы хотите программировать.

Чтобы подойти к нему с некоторыми фактами, хотя:

  • Я ожидаю, что форум должен быть быстрым. Для этого вы должны использовать простой Select. Функции, такие как SUM(), занимают немного больше времени для выполнения. В небольшой системе, которая, скорее всего, не будет проблемой, но mysql-db обычно очень плохой, поэтому вы должны помнить об этом с самого начала.

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

  • Резервирование данных и синхронизация транзакций могут быть проблемой. У каждой системы транзакций есть проблема, чтобы синхронизировать все. С MySQL это не так сложно, так как таблицы могут быть заблокированы во время выполнения транзакций. Но избыточные данные - это скорее боль. Вы должны обеспечить, чтобы вы изменяли данные везде в одно и то же время, прежде чем другие действия могут помешать.

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

Смежные вопросы