MTaste – And More?

I read about mtaste a while ago, and thought it was an interesting idea. Unfortunately, I was really busy when it first came up and I promptly forgot all about it. Then, Mr. Frank wondered aloud about what the best way to implement it in a database, and that got me to thinking. How would I do it?

Well, there are a couple ways to do it, but if you’re going to have a never-ending list of artists that people can vote on, then you need several tables. This also leaves it open to add things other than music to the list (which is what intrigues me about this all). As you can see, I design overly complex schemas. They’re way more fun than simple ones. Honestly, they’re sometimes hard to manage, but they’re a lot easier to extend and add to, especially in this case where you have an ever-growing list of ratings linked to an ever-changing/growing list of artists and genres. The item_types table could grow as well, to add authors, books, movies, actors, etc. I have some idea that you could use the ODP to cut down on the confusion of artist names, and to add to it (so you could end up basically rating ODP categories). Also, this is a first stab at this. I usually way overdo this in the first draft and then trim it down once I start building it. I think I’ll try to learn PHP and MySQL and actually build this (maybe using Movies instead, but you never know). With this schema, a lot of the logic will be held in application logic instead of the database, which I think could be mitigated some with secondary id’s and a simple API (so no one gets access to the db – just the API).

Here’s the schema that comes to mind:

users:

  • user\_id int primary key

  • user\_fname varchar(255)

  • user\_lname varchar(255)

  • user\_email varchar(255)

  • user\_zip varchar(24)

user_taste::

  • user\_id int

  • item\_id int

  • rating int

  • timestamp int

items:

  • item\_id int primary key

  • item\_type int

item_types:

  • item\_type int primary key

  • type\_title varchar(255)

  • type\_desc text null

  • type\_public int

  • type\_table varchar(64)

music_artists:

  • item\_id int

  • martist\_id int primary key

  • martist\_title varchar(255)

  • martist\_genre int