I have 3 types of content: blogs, press releases, and reminders. All of them have a body
and entered by
fields. The blogs and press releases have a title
field, which the reminder lacks, and the reminders has an hour
field, which blogs and press releases lack. This is what it looks like in tabular format so it's easy for you to see...
blog press release reminder
---------------------------------------------------
entered by field yes yes yes
body field yes yes yes
title field yes yes --
time field -- -- yes
I'm creating a main table called content
that links to the specialized tables blogs
press releases
reminders
. I thought of 2 structures
First structure... This is how the content management system I use does it, but I don't want to follow in their steps blindly because my needs are not the same. Put ALL shared fields in the main content
table. So the content
table will not only have type
and type id
to link to the specialized tables, the content
table will also have the common fields like body
and entered by
. The other 3 tables only have their unique fields.
content table B=blogs table PR=press releases table R=reminders table
------------------------------------------------------------------------------
id id id id
type=B/PR/R title title hour
type id
body
entered by
Second structure. content
table only has the type
and type id
necessary to link to the other 3 tables, This means that the common fields get repeated in the 3 tables.
content table B=blogs table PR=press releases table R=reminders table
------------------------------------------------------------------------------
id id id id
type=B/PR/R entered by entered by entered by
type id body body body
title title hour
Which should I go with? I thought the first structure is better because I can search all content whether it's a blog or press release or reminder for a specific word. I still have to look in the other tables if I want to search the title
which is available only to blogs
and press releases
, but...
So which structure is better, and why you think so? I'm also open to other ideas or improvements that are different from these 2.