- FirebaseUID (Primary Key)
- Username
- Email
- DateJoined
- LastLogin
- SongID (Primary Key)
- TrackName
- ReleaseYear
- Duration
- Tempo (with Enum)
- GenreID (Foreign Key)
- Mood (with Enum)
- Recorded Env. (with Enum)
- ReplayCount
- Version
- AlbumID (Primary Key)
- Title
- ReleaseDate
- ArtistID (Primary Key)
- Name
- Bio
- RatingID (Primary Key)
- FirebaseUID (Foreign Key)
- SongID (Foreign Key)
- Rating
- DateRated
- GenreID (Primary Key)
- GenreName
- GenreID (Foreign Key)
- SongID (Foreign Key)
- SongID (Foreign Key)
- ArtistID (Foreign Key)
- AlbumID (Foreign Key)
- SongID (Foreign Key)
- PreferenceID (Primary Key)
- FirebaseUID (Foreign Key)
- DataProcessingConsent
- DataSharingConsent
- UserID (Foreign Key, references User.FirebaseUID)
- FriendID (Foreign Key, references User.FirebaseUID)
- InstrumentID (Primary Key)
- InstrumentType
- InstrumentName
- InstrumentID (Foreign Key)
- SongID (Foreign Key)
Relationships:
- A User can have multiple UserSongRating (One-to-Many)
- A Song can have multiple UserSongRating (One-to-Many)
- A Song can belong to multiple Albums (Many-to-Many), represented by AlbumSong
- A Song can be by multiple Artists (Many-to-Many), represented by SongArtist
- A Genre can include many Songs (One-to-Many)
- A User can have one UserPreferences (One-to-One)
- A User can have multiple Friends (One-to-Many)
- An Album can include many Songs (One-to-Many)
Note: The Many-to-Many relationships are represented through junction tables like SongArtist and AlbumSong, as typical in relational database design.