Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana cara mengikat pengguna ke berbagai organisasi, universitas, perusahaan dengan peran berbeda?

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

Xorg adalah istilah umum untuk universitas, organisasi, atau yayasan. Diskriminator TYP digunakan untuk membedakan ketiganya.

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

Catatan:

All attributes (columns) NOT NULL

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

Sepatah kata tentang subtipe . Cara yang tepat untuk menerapkan batasan untuk subtipe adalah dengan menggunakan pernyataan (CREATE ASSERTION ), tetapi masih belum tersedia di DB utama. Saya menggunakan FKs sebagai gantinya, dan seperti semua metode pengganti lainnya, metode ini tidak sempurna. Orang banyak berdebat, tentang SO dan SE-DBA, apa yang lebih baik. Saya mendorong Anda untuk memeriksa metode lain juga.




  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 LOAD DATA dengan data multiline

  2. Bagaimana cara menyimpan nama gambar yang diunggah di database MySQL

  3. Tabel MySQL dengan id utama AUTO_INCREMENT tidak merilis nomor setelah rollback

  4. Memperbarui tabel di pemicu setelah memperbarui di tabel yang sama

  5. 'Fungsi VALUES' MySQL tidak digunakan lagi