Wenn wir uns das Modell hier ansehen, sehen wir Folgendes:
- Ein Benutzer ist mit genau einer Website verbunden
- Ein Unternehmen ist mit genau einer Website verbunden
- Eine Website ist genau einem Nutzer oder Unternehmen zugeordnet
Die dritte Beziehung impliziert die Existenz einer "Benutzer- oder Firmen"-Entität, deren PRIMARY KEY
sollte irgendwo gespeichert werden.
Um ihn zu speichern, müssen Sie eine Tabelle erstellen, die einen PRIMARY KEY
speichern würde eines website owner
juristische Person. Diese Tabelle kann auch gemeinsame Attribute für einen Benutzer und eine Website speichern.
Da es sich um eine Eins-zu-Eins-Beziehung handelt, können auch Website-Attribute in dieser Tabelle gespeichert werden.
Die Attribute, die nicht von Benutzern und Unternehmen geteilt werden, sollten in der separaten Tabelle gespeichert werden.
Um die richtigen Beziehungen zu erzwingen, müssen Sie den PRIMARY KEY
erstellen der website
Verbund mit owner type
als Teil davon, und erzwingen Sie den korrekten Typ in den untergeordneten Tabellen mit einem CHECK
Einschränkung:
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
)