A database is more flexible than the proposed 'hardwired' approach. There are free ones like ChessDB (http://chessdb.sourceforge.net/).
game organization
I use ChessBase 12 and it solves most of the problems you mentioned. I have one huge database (that I constantly add to as I get more games) which I can search/filter depending on what I want to look for.
As for attaching links and other files, I haven't used the feature but I know that ChessBase allows you to add media files to a database which would likely solve that issue.
I haven't tried many other chess database programs so I can't recommend whether buying ChessBase is better than using free ones but for me it does everything I could ever want.
I just spent 1/2-1hr organizing my GM games on my computer. I'm very curious how you all deal with organizational problems with the data.
Originally I had many games organized by GM, which is how I think of them, like Fischer & Petrosian. But sometimes there were tournaments like the 1924 New York one that Alekhine notated where I wanted all those games together. I hated having the games ordered differently, and strongly prefer not to have two copies of the same game in different places, because I want all my analysis, comments, web-sites about the game, etc. all in one place.
I quickly discovered a big problem with games organized by player: When two GM's play each other, I had to choose which player the game went into. Choosing by who played white makes little sense if you consider the collection of games of Fischer & Petrosian in Beunos Aires.
I eventually decided to store ALL the games by tournament, and eventually organized tournaments first by year, then by location and use links to those games from my database of players. It's still a work in progress, and there ends up being a lot of redundant info. How do you all address these problems?
I know they can also be stored as a database in Fritz or ChessBase (which likely would make it easier to find a collection of games organized by opening, location, date, player, etc. as typical of a database query), but I have never tried that, and if I did, I'm not sure what I would do with links to interesting web-pages about a game, and other files that are not typically part of a pgn file or its comments.
Here's a portion of my current organization:
tournaments -> 1971
-> Buenos Aires
-> 1959
-> Yugoslavia
-> Fischer v. Petrosian--1959--Yugoslavia--Game 1
-> Petrosian v. Fischer--1959--Yugoslavia--Game 2
-> 1924
-> New York
-> Game1--Janowsky v. Capablanca
-> Game2--Yates v. Alekhine
-> 2013
-> Moscow
-> Moscow--6-19-13--Tal Memorial
-> Anand,V - Nakamura,H
(As you can see, I'm still not entirely consistent with what goes in the lowest level directories--not sure if that will be a problem or not).
The GM directory is like this:
GMs
--> Alekhine
* Alekhine-quote.wpd
link: Game2--Yates v. Alekhine - NY 1924
link: reti v. alekhine--baden-baden--1925 - Shortcut
--> Fischer
link: Fischer v. Petrosian--1959--Yugoslavia--Game 1
link: Petrosian v. Fischer--1959--Yugoslavia--Game 2
link: Fischer-Spassky--Reykjavik Iceland--1972
--> Petrosian
link: Fischer v. Petrosian--1959--Yugoslavia--Game 1
link: Petrosian v. Fischer--1959--Yugoslavia--Game 2
--> -----Lesser Known Players----
--> Berkes, Ferenc
--> see Polgar
--> Forgacs, Leo
link: Lasker v. Forgacs--St. Petersburg 1909.pgn
--> Janowsky
link: Game1--Janowsky v. Capablanca - Shortcut