I am building a database to hold 10 years of data for all stocks traded on the NYSE. The size of the project has raised some interesting questions as to exactly how I'm supposed to normalize it.

The first model is to place the ticker symbol, company name, and description in a separate Tickers table, and group date, open, high, low, close, and volume in a joined data table. The only problem here, it the data table ends up being 250,000,000+ records long. I'm using mySQL, but even this crashes on the 1st query.

The second model is to create separate Open, High, Low, Close, and Volume tables, with fields of Tickers_ID, Date_01, Date_02, etc. This is then joined to the Ticker's table. This works, but make queries very difficult, as each date has to be named separately in the SELECT statement.

The third model is to give each stock its own table, all joined to the Tickers table. This works, but since there are over 3000+ stocks on the NYSE, it means I have to name each stock in the SELECT statement for a multi-stock query.

Phew! I get the feeling I'm missing something obvious. Any suggestions?