Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да обвържем потребителите с различни организации, университети, компании с различни роли?

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

Xorg е общ термин за университет, организация или фондация. Дискриминатор TYP се използва за разграничаване между тези три.

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

Забележка:

All attributes (columns) NOT NULL

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

Няколко думи за подтипове . Правилният начин за прилагане на ограничения за подтипове би бил да се използват твърдения (CREATE ASSERTION ), но все още не е наличен в основните DB. Използвам FKs вместо това и както всички други заместващи методи не е перфектен. Хората спорят много, на SO и SE-DBA, кое е по-добро. Препоръчвам ви да проверите и други методи.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Laravel ред по има много отношения

  2. Заявка на Python SQLAlchemy:AttributeError:Обектът 'Connection' няма атрибут 'contextual_connect'

  3. Как да проверя дали дадена дата е между дата 1 и дата 2 с помощта на mysql?

  4. Sql:изберете всички кошници, съдържащи набор от конкретни артикули

  5. Комбинирането на JSON_SEARCH и JSON_EXTRACT ме получава:Невалиден израз на пътя на JSON.