I think you have to look ahead at what the SQL will look like for each of the solutions. If you go through that excercise, then you'll find that putting everything in one table is the easiest to code and will probably lead to having the best performance. It's easier to separate out the things you want from one table then it is to put things together from multiple tables.
Lets say my-one-big-table looks like this:
1 id
2 type
3 field-common-to-book-and-journal
4 field-specific-to-book
5 field-specific-to-journal
If I am just interested in books, I can create a view, or just plain sql, like this:
create view book as
select id, field_common-to-book-and-journal, field-specific-to-book
from my-one-big-table
where type = 'book'
So, it's easy to simulate that the data is in separate tables when I want to.
But, if I start off by putting the data in seperate tables then I'll end up writing SQL like this:
select id, field-common-to-book-and-journal from books
union
select id, field-common-to-book-and-journal from journal-articles
union
.... etc, for each type
I don't know about other databases, but doing unions in SQL Server can be costly and there are restrictions when working with datatypes like ntext.
If you follow olavk's advice then your SQL for combining types in one query would end up looking like this:
select
common.id,
common.field-common-to-book-and-journal,
book.field-specific-to-book
journal.field-specific-to-journal
from common-table common
left outer join book-specific-table book on
left outer join journal-specific-table journal on
... etc, for each type
I've worked with systems that used all three of these ways and by far, life is easier with the one big table.