sql >> Databasteknik >  >> RDS >> Mysql

Flera men ömsesidigt uteslutande främmande nycklar - är det här vägen att gå?

Om vi ​​tittar på modellen här kommer vi att se följande:

  1. En användare är relaterad till exakt en webbplats
    • Ett företag är relaterat till exakt en webbplats
    • En webbplats är relaterad till exakt en användare eller ett företag

Den tredje relationen innebär att det finns en "användare eller företag"-enhet vars PRIMARY KEY bör förvaras någonstans.

För att lagra den måste du skapa en tabell som skulle lagra en PRIMARY KEY av en website owner entitet. Den här tabellen kan också lagra attribut som är gemensamma för en användare och en webbplats.

Eftersom det är en en-till-en-relation kan webbplatsattribut också lagras i den här tabellen.

De attribut som inte delas av användare och företag bör lagras i den separata tabellen.

För att tvinga fram de korrekta relationerna måste du skapa PRIMARY KEY för website sammansatt med owner type som en del av det, och tvinga fram rätt typ i de underordnade tabellerna med en CHECK begränsning:

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
)


  1. MySQL Välj datum lika med idag

  2. Mysql-behörighetsfel med "ladda data"

  3. Hur kan jag hantera MySQL-polygonöverlappningsfrågor?

  4. FEL:Anslutningen är i autoCommit-läge