sql >> データベース >  >> RDS >> Mysql

ユーザーをさまざまな組織、大学、さまざまな役割を持つ企業にバインドするにはどうすればよいですか?

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

    Xorg は、大学、組織、または財団の総称です。ディスクリミネーターTYP これら3つを区別するために使用されます。

    -- 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. 大規模なPHPアレイとMySQLデータベース?

    2. MySqlCommandでMySql代入演算子(:=)を使用することは可能ですか?

    3. 2つの左結合により、MySQLで誤ったデータ(二重データ?)が発生します

    4. sequelizeを使用してローカルノードアプリからherokupostgresqlデータベースに接続できません