Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak powiązać użytkowników z różnymi organizacjami, uczelniami, firmami pełniącymi różne role?

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

Xorg to ogólny termin dla uniwersytetu, organizacji lub fundacji.Discriminator TYP służy do rozróżniania tych trzech.

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

Uwaga:

All attributes (columns) NOT NULL

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

Słowo o podtypach . Właściwym sposobem zaimplementowania ograniczeń dla podtypów byłoby użycie asercji (CREATE ASSERTION ), ale nadal nie jest dostępna w głównych bazach danych. Używam FKs zamiast tego i jak wszystkie inne metody zastępcze nie jest doskonały. Ludzie dużo się kłócą, na SO i SE-DBA, co jest lepsze. Zachęcam do sprawdzenia również innych metod.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MYSQL jak sprawdzić bieżące saldo jako poprzednie saldo

  2. Przenoszenie bazy danych mysql z jednego serwera na inny

  3. Oszczędzasz HABTM z dodatkowymi polami?

  4. Konwersja Varchar na numer w celu sortowania

  5. Błędy WAMP/MySQL w niepoprawnym języku