Als we hier naar het model kijken, zien we het volgende:
- Een gebruiker is gerelateerd aan precies één website
- Een bedrijf is gerelateerd aan precies één website
- Een website is gerelateerd aan precies één gebruiker of bedrijf
De derde relatie impliceert het bestaan van een "gebruiker of bedrijf" entiteit waarvan de PRIMARY KEY
moet ergens worden opgeslagen.
Om het op te slaan moet je een tabel maken waarin een PRIMARY KEY
. wordt opgeslagen van een website owner
entiteit. In deze tabel kunnen ook kenmerken worden opgeslagen die gemeenschappelijk zijn voor een gebruiker en een website.
Omdat het een één-op-één relatie is, kunnen ook websitekenmerken in deze tabel worden opgeslagen.
De kenmerken die niet door gebruikers en bedrijven worden gedeeld, moeten in de aparte tabel worden opgeslagen.
Om de juiste relaties te forceren, moet u de PRIMARY KEY
. maken van de website
composiet met owner type
als onderdeel ervan, en forceer het juiste type in de onderliggende tabellen met een CHECK
beperking:
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
)