Den første er mere normaliseret, hvis den er lidt ufuldstændig. Der er et par tilgange, du kan tage, den enkleste (og strengt taget den mest 'korrekte') har brug for to tabeller med den åbenlyse FK-begrænsning.
commentid ---- subjectid ----- idType
--------------------------------------
1 22 post
2 26 photo
3 84 reply
4 36 post
5 22 status
idType
------
post
photo
reply
status
Hvis du vil, kan du bruge en char(1) eller lignende for at reducere varcharens indvirkning på nøgle/indekslængde eller for at lette brugen med en ORM, hvis du planlægger at bruge en. NULL'er er altid en plage, og hvis du begynder at se dem dukke op i dit design, vil du være bedre stillet, hvis du kan finde ud af en bekvem måde at fjerne dem på.
Den anden tilgang er en, jeg foretrækker, når jeg har at gøre med mere end 100 millioner rækker:
commentid ---- subjectid
------------------------
1 22
2 26
3 84
4 36
5 22
postIds ---- subjectid
----------------------
1 22
4 36
photoIds ---- subjectid
-----------------------
2 26
replyIds ---- subjectid
-----------------------
3 84
statusIds ---- subjectid
------------------------
5 22
Der er selvfølgelig også den (lidt denormaliserede) hybride tilgang, som jeg bruger meget med store datasæt, da de har en tendens til at være snavsede. Angiv blot specialiseringstabellerne for de foruddefinerede idTypes, men behold en adhoc idType-kolonne i commentId-tabellen.
Bemærk, at selv den hybride tilgang kun kræver 2x pladsen i den denormaliserede tabel; og giver triviel forespørgselsbegrænsning af idType. Integritetsbegrænsningen er imidlertid ikke ligetil, idet den er en FK-begrænsning på en afledt UNION af typetabellerne. Min generelle tilgang er at bruge en trigger på enten hybridtabellen eller en tilsvarende opdaterbar visning til at udbrede opdateringer til den korrekte undertypetabel.
Både den simple tilgang og den mere komplekse subtype tabeltilgang virker; stadig, til de fleste formål gælder KISS, så bare jeg formoder, at du nok bare skal introducere en ID_TYPES-tabel, den relevante FK, og være færdig med den.