sql >> Database >  >> RDS >> Mysql

Hoe bind je gebruikers aan verschillende organisaties, universiteiten, bedrijven met verschillende rollen?

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

Xorg is een algemene term voor een universiteit, een organisatie of een stichting.Discriminator TYP wordt gebruikt om onderscheid te maken tussen deze drie.

-- 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}

Opmerking:

All attributes (columns) NOT NULL

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

Een woord over subtypen . De juiste manier om beperkingen voor subtypen te implementeren zou zijn om beweringen te gebruiken (CREATE ASSERTION ), maar het is nog steeds niet beschikbaar in grote DB's. Ik gebruik FKs in plaats daarvan, en zoals alle andere vervangende methoden, is het niet perfect. Mensen maken veel ruzie, over SO en SE-DBA, wat is beter. Ik moedig je aan om ook andere methoden te bekijken.




  1. Is de volgorde van velden van de index met meerdere kolommen in MySQL van belang?

  2. Geneste Select-instructie in MYSQL-join

  3. Inleiding tot PL/SQL-pakketten in Oracle Database

  4. Selecteren uit een database op basis van een lijst met unieke paren