New to databases - does my ERD reflect good database design? I'm making a database to hold data for a media player that I'm working on. Originally, I thought to use one table with the fields:  

{filePath,artist,title,album,track_number,length,date,artworkUrl}


Since I'm trying to use good DB design techniques, I've now created a DB with three tables. One for the audio file itself, one for the artists, and one for the albums:



I'd really appreciate it if some more knowledgeable people could evaluate my design and, give me some pointers. Thanks in advance!
I recommend using surrogate primary keys instead of artist or album names.  Doing this will improve the database design because currently a change in an artist's name would require updating each entry in your audio_files table for that particular artist.

You and I likely agree it would be strange for an artist to change their name, however they have a penchant for doing this.  Even beyond the infrequent artist name change, you are much more likely to encounter artist name changes due to user error.

Also, I noticed that you use the path_of_file as the primary key of the audio_files table.  Keep in mind that files may move for a variety of reasons, some of which may be out of the domain of control for your app.  You should consider how your database handles that.



To answer your follow up:

If you go with the unique key approach I recommend, updating the artist name would be straight forward:


UPDATE Artists
SET Artists.Artist_Name = 'New Name'
WHERE Artists.Artist_ID = 



Updating the artist name in the design you propose would involve inserting a new record in the artist table, creating a subset of file paths with the old artist name, then updating each file path record to the new artist record, and finally deleting the old one.  Yuck!