Ok, here is how I would do it:
Id store member information (if you choose to allow people to register to the site) like there member id, date registered, number of submited articles, posts etc all in one table dedicated to member information

Id store the article itself and its relevent data in another table. Article id, who posted it, when, how many replys. This table would have two foriegn keys:
Other articles related (articles per compiler? or next step in complexity articles etc.)
Downloads for the article - source code, pdf version of tutorial etc. etc.

Then id store all messages in a table. The message would contain its id, who posted it, when, etc. It would have two foriegn keys.
who posted it
and the article it was posted to

id store download links in the last table. It would contain an id, and the direct url to the file.
You would have to create your own upload scripts to mannage the upkeep of this table of course.

table_message
m_id | f_a_id | poster_id | date_posted | content | etc.
m_id would be the primary key for this table. AUTO INCREMENT int. It is merely an identification number of this specific post
f_a_id would be the foreign key that defines what article this message is related to.
poser_id would be the id number of who posted the message, -1 could represent guests (if you allow anon posting)
content would be the content of the message posted. and etc. could represent any aditional information you want to contain about message and message replys

table_articles
a_id | f_d_id | f_r_id | poster_ids | date_posted | article | views | replys | etc.
a_id is the article identification number PRIMARY key AUTOINCRIMENT int
f_d_id would be the foreign key to a download id from the downloads table.
f_r_ids would be a forieng key of comma seperated related article id's.
poster_id is the id number of who posted the article
date_posted when it was posted
article is the actual article itself with in the database
views is counter
replys the number of messages posted related to the article

table_downloads
d_id | file_url
d_id is the download identification number, PRIMARY KEY AUTO INCRIMENT int
file_url is the link to the .zip file (or what ever format) to be downloaded.

table_members
id | name | password | date_registered | personal info fields .. | ..| ..| rating | etc.
id is the personal identification number of member PRIMARY KEY AUTOINCRIMENT int
name is the name of the member
password is his password to log in
the rest is pretty self explanitory


As far as the concern about storing the article in the database being slow.
Its actually quite fast. Just think, all the posts of this message board are stored in the database, and it isn't slow to come up with all the text when its queried. It's silly to have seperate text files for each article. Its also a lot more of a pain to manage ftp wise. If you have 48 articles, and 2 to 3 variations per compiler.. Thats a lot of pages to have to keep track of in directorys.