Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm thế nào để ràng buộc người dùng với các tổ chức, trường đại học, công ty khác nhau với các vai trò khác nhau?

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

Xorg là một thuật ngữ chung cho một trường đại học, một tổ chức hoặc một cơ sở. được sử dụng để phân biệt giữa ba điều này.

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

Lưu ý:

All attributes (columns) NOT NULL

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

Một từ về loại phụ . Cách thích hợp để triển khai các ràng buộc cho các kiểu con là sử dụng các xác nhận ( TẠO CHỨNG NHẬN ), nhưng nó vẫn không có sẵn trong các DB chính. Tôi đang sử dụng FKs thay vào đó, và như tất cả các phương pháp thay thế khác, nó không hoàn hảo. Mọi người tranh cãi rất nhiều, trên SO và SE-DBA, cái gì tốt hơn. Tôi cũng khuyến khích bạn kiểm tra các phương pháp khác.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Danh sách thẻ SQL và lọc thẻ

  2. lỗi trong mã sql của tôi ở đâu?

  3. Không thể tạo bảng trong MySQL vì nó đã tồn tại

  4. Truy vấn MySql:bao gồm các ngày có COUNT (id) ==0 nhưng chỉ trong 30 ngày qua

  5. MySQL CAST so với CONVERT