Say I have a website/platform that allows people to submit business names in order to build a high quality business name database. You can apply this to any subject or topic, such as building a database of travel destinations, of movie titles, of quotes, etc. One of the main problems is how to guarantee accuracy and quality.
So what I'm thinking of doing is to sort of gamify it like StackOverflow and related sites. Essentially offering badges for contributing. You get some badges for adding content, cleaning up content, verifying content, etc.. But the problem then is how do you prevent people from cheating the system?
For example, say a person uploads a new business name. That's 1 creation point. But it was spelled wrong, so update business name. That's 1 update point. Now change it back to original incorrect spelling, 1 more update point. Change it back, another point, etc.. Back and forth and back and forth. Rack up the points.
So the initial question is, how do you prevent this? What I'm thinking about is somehow tracking the changes to a record. If someone notices a person doing this, then they get reported and then lose all their points related to the cheating attempts. Something like that.
But imagine recording the snip/snap/snip/snap of the changes to and from values. 1000 changes to one record, adding and removing random characters. If you had a database table with a "history" table attached to it for changes to a field, it would fill up quickly. So the main question is, how do you effectively do this? How do you keep a small long of changes, and prevent the cheating?
For example, say user A creates a business "Foo Bar", then user B changes it to "Foo Bar Baz", then user C changes it back to "Foo Bar", then user A to "Foo Bar Inc." (all caps) then finally several users verify it is "Foo Bar Inc.". Say someone else comes along now after it's been verified a few times, and they say it's "Foo Bar" again. We look in the history table and see this option has been tried before and it was marked invalid. That would be efficient in this case.
But what about the random case mentioned before (one user spams the system entering "asdfcda" then "cidajcoid" then "ciadojc" as the business name to rack up points). If the history table grows and grows to 10,000 items long for each of the 100,000 businesses, it's going to take a while to check every history list for each change. So somehow you need to optimize this. How can this be optimized?
In short, how do you effectively track the history of changes to a text field in the database on a content editing platform?
Has anyone elaborated on the problems and solutions before online somewhere? If not, what are the key points to address in an initial prototype?