Takto by vám to udělat nešlo. Musel by jste ve vazební tabulce povolit IDPrispevku a IDFotky NULL, pro PK zavést vlastní ID (protože NULL sloupec nemůže být součástí PK), doplnit UNIQUE constraint na trojici IDPrispevku, IDFotky a IDTagu a doplnit CHECK contraint, že je vyplněné právě jedno z IDPrispevku a IDFotky.
TagPrirazeni:
IDTagPrirazeni (IDENTITY PK)
IDPrispevku NULL (U, FK)
IDFotky NULL (U, FK)
IDTagu (U, FK)
CK: (IDPrispevku IS NOT NULL AND IDFotky IS NULL) OR (IDPrispevku IS NULL AND IDFotky IS NOT NULL)
Pokud ale víte, že tagovatelných objektů bude do budoucna přibývat, tak by to bylo lepší modelovat jako dědičnost:
Objekt:
IDObjektu (IDENTITY PK)
Prispevek:
IDPrispevku (PK)
IDObjektu (FK, U) - vazba 1:1 na Objekt
Text
...
Fotka:
IDFotky (PK)
IDObjektu (FK, U) - vazba 1:1 na Objekt
Url
...
Tag:
IDTagu (PK)
Oznaceni (U)
Objekt_Tag:
IDObjektu (PK, FK)
IDTagu (PK, FK)
Při založení příspěvku nebo fotky by se pak vždy založil (nejprve) i záznam do tabulky Objekt.
|