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