I'm working on a shopping cart application where the store contains a diverse range of products. What I'm trying to work out is whether to create individual tables tailored specifically for each product category, or whether to have a single table for all products with a fair amount of redundancy.

Simple example: Let's say I'm selling CDs and Books at my store. Common fields might include

Name
Description
Price
Weight
Height
Width
InStock

...but to fully describe a book I might want the
additional fields

ISBN
NumberPages

...and to fully describe a CD I might want the
additional fields

NumberTracks
NumberDiscs

So is the 'best' solution to go for a single 'Products' table for all products such as this:

CategoryID // Book or CD
Name
Description
Price
Weight
Height
Width
InStock
ISBN
NumberPages
NumberTrack
NumberDiscs

Or do I go for two tables

Books
-----
Name
Description
Price
Weight
Height
Width
InStock
ISBN
NumberPages

CDs
---
Name
Description
Price
Weight
Height
Width
InStock
NumberTrack
NumberDiscs


My guess is that there is no strictly right or wrong answer. The multi-table option is more efficient in terms of minimising redundancy, but the single table option is easier to code against because all products are in the same place.

Perhaps my question should be - what factors should make me lean more towards one approach as opposed to the other?

What does/would Amazon do?

Thanks.