Alex Rivera | Logout

Database Architecture for "Badge" System & Arbitrary Criteria (MySQL/PHP)

Asked 2009-06-26T13:44:31.123
51

Quickie-Question:

To summarize, I'm a little confused as to how I would design such a database that allows indefinite badge-rule creation without requiring structural changes to the previously existing user-tables in the database.

Storing Badge Title, Criteria, etc. What would that Table look like?

  • badge_id (1)
  • badge_title (10K Badge)
  • badge_image (10k.jpg)
  • badge_criteria ([posts] >= 10000)
    ...

Winded-Question:

I would like to implement a badge-system on my own personal projects, but am seeking a bit of advice as to how one would best do such a thing. I've been reading some of the questions here about badge-systems, but don't see the database-architecture getting much attention.

Badges that are based on user-points (Hypothetical "10k Badge") would seem pretty straight forward. Any event that affects the users reputation (upvotes, downvotes, answer-accepted, etc) would invoke a method to review the users new reputation, and potentially award a badge.

That system sounds pretty straight forward, but what does that look like as a database for the administrator who wants to create innumerable amounts of badges with little-effort down the road - some of which may be based on different criteria, and not simply the user reputation.

User-reputation is likely a value within the user-record itself. But ideally, wouldn't you want to avoid having to add new fields to the user table when you create new badges? For instance the "Edited 100 Entries" badge - you wouldn't create a new column "entries_edited" within the Users Table, would you? And then increment that after each entry-edited...

Any hints?

Stackoverflow Archive:

Edit
Report

1 Answer

5

I'm approaching it like this: Create a table to store all the badges, and have one column reference a function that is run to see if the badge is awarded. That way the table remains simple and the logic to determine the badges can be kept in the code, where it is best suited.

With this method, badge requirements could also be linked together, to form more complex dependencies. For example, user must receive three separate, specific badges w/in a certain timeframe in order to get this badge.

answered 2011-08-02T21:29:51.043

Your Answer