sql >> Databáze >  >> RDS >> Mysql

Vícenásobné, ale vzájemně se vylučující cizí klíče – je toto cesta?

Pokud se podíváme na model zde, uvidíme následující:

  1. 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
)


  1. Jak vypočítat procento dvou sloupců v MySQL

  2. Připojení k databázi pomocí PHP

  3. Získejte nadřazenou MySQL nejvyšší úrovně

  4. Přidejte sloupec číslovaného seznamu do vráceného dotazu MySQL