Pokud se podíváme na model zde, uvidíme následující:
- Uživatel souvisí přesně s jedním webem
- Společnost souvisí přesně s jedním webem
- Webové stránky se týkají právě jednoho uživatele nebo společnosti
Třetí vztah implikuje existenci entity "uživatel nebo společnost", jejíž PRIMARY KEY
by měl být někde uložen.
Chcete-li jej uložit, musíte vytvořit tabulku, která bude ukládat PRIMARY KEY
website owner
entita. Tato tabulka může také ukládat atributy společné pro uživatele a web.
Vzhledem k tomu, že se jedná o vztah jedna ku jedné, mohou být v této tabulce uloženy také atributy webových stránek.
Atributy, které uživatelé a společnosti nesdílejí, by měly být uloženy v samostatné tabulce.
Chcete-li vynutit správné vztahy, musíte vytvořit PRIMARY KEY
website
složený s owner type
jako jeho součást a vynutit správný typ v podřízených tabulkách pomocí CHECK
omezení:
CREATE TABLE website_owner (
type INT NOT NULL,
id INT NOT NULL,
website_attributes,
common_attributes,
CHECK (type IN (1, 2)) -- 1 for user, 2 for company
PRIMARY KEY (type, id)
)
CREATE TABLE user (
type INT NOT NULL,
id INT NOT NULL PRIMARY KEY,
user_attributes,
CHECK (type = 1),
FOREIGN KEY (type, id) REFERENCES website_owner
)
CREATE TABLE company (
type INT NOT NULL,
id INT NOT NULL PRIMARY KEY,
company_attributes,
CHECK (type = 2),
FOREIGN KEY (type, id) REFERENCES website_owner
)