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

Jak svázat uživatele s různými organizacemi, univerzitami, společnostmi s různými rolemi?

-- User USR exists.
--
user {USR}
  PK {USR}
-- Role ROL exists.
--
role_ {ROL}
   PK {ROL}

Xorg je obecný výraz pro univerzitu, organizaci nebo nadaci. Diskriminátor TYP se používá k rozlišení mezi těmito třemi.

-- Xorg XOG, of type TYP, named XNM was created
-- (is owned) by user USR.
--
xorg {XOG, TYP, USR, XNM, ...common_cols}
  PK {XOG}
  SK {XOG, TYP}

CHECK TYP in {'U', 'O', 'F'}

FK {USR} REFERENCES user {USR}
-- University (xorg) XOG, of xorg-type TYP = 'U', exists.
--
university {XOG, TYP, ...university_specific_cols}
        PK {XOG}

CHECK TYP = 'U'

FK {XOG, TYP} REFERENCES xorg {XOG, TYP}
-- Organization (xorg) XOG, of xorg-type TYP = 'O', exists.
--
organization {XOG, TYP, ...organization_specific_cols}
          PK {XOG}

CHECK TYP = 'O'

FK {XOG, TYP} REFERENCES xorg {XOG, TYP}
-- Foundation (xorg) XOG, of xorg-type TYP = 'F', exists.
--
organization {XOG, TYP, ...foundation_specific_cols}
          PK {XOG}

CHECK TYP = 'F'

FK {XOG, TYP} REFERENCES xorg {XOG, TYP}
-- User USR is member of xorg XOG, of xorg-type TYP,
-- in role ROL.
--
user_xorg {USR, XOG, TYP, ROL}
       PK {USR, XOG}

      FK1 {XOG, TYP} REFERENCES
     xorg {XOG, TYP}

      FK2 {USR} REFERENCES user  {USR}
      FK3 {ROL} REFERENCES role_ {ROL}

Poznámka:

All attributes (columns) NOT NULL

PK = Primary Key
AK = Alternate Key   (Unique)
SK = Proper Superkey (Unique)
FK = Foreign Key

Pár slov o podtypech . Správným způsobem, jak implementovat omezení pro podtypy, by bylo použití asercí (CREATE ASSERTION ), ale stále není k dispozici ve velkých databázích. Používám FKs místo toho a jako všechny ostatní náhradní metody není dokonalé. Lidé se hodně hádají, na SO a SE-DBA, co je lepší. Doporučuji vám zkontrolovat i jiné metody.




  1. Jak mohu zlepšit tento dotaz, abych se vyhnul použití vnořených zobrazení?

  2. Kombinace dotazů s vnořeným polem záznamů v datovém typu JSON

  3. PŘIPOJIT (VYBRAT ... ) ue ON 1=1?

  4. Jak používat Explain Plan k optimalizaci dotazů?