@startuml ' see https://gist.github.com/QuantumGhost/0955a45383a0b6c0bc24f9654b3cb561 !define Table(name,desc) class name as "desc" << (T,#FFAAAA) >> !define primary_key(x) <b>x</b> !define unique(x) <color:green>x</color> !define not_null(x) <u>x</u> hide methods hide stereotypes Table(artists, "artists\n(Artists that have been played)") { primary_key(id) INTEGER not_null(unique(name)) VARCHAR[255] } Table(genres, "genres\n(Genres that have been played)") { primary_key(id) INTEGER not_null(unique(name)) VARCHAR[255] } Table(tracks, "tracks\n(Partially normalized track data)") { primary_key(id) INTEGER not_null(artist_id) INTEGER not_null(track_id) INTEGER name VARCHAR[4000] } Table(plays, "plays\n(The actualy play data)") { primary_key(id) INTEGER not_null(track_id) INTEGER played_on DATETIME } ' relationships ' one-to-one relationship artists "1"-->"*" tracks : "A track has been released by an artist" ' one to may relationship genres "1"-->"*" tracks : "A track has a genre" ' many to many relationship ' Add mark if you like tracks "1" --> "*" plays : "A tracks has been played some times" @enduml