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

Triển khai kiểu con siêu loại một cách chính xác trong MySQL

Bảng "bữa tiệc" có vẻ không ổn. So sánh với mã nguồn từ câu hỏi SO khác này .

Trong loại cấu trúc này, số id của bên truyền xuống, có thể nói như vậy. Nó thường phải là khóa chính hoặc khóa ngoại trong các bảng lưu trữ dữ liệu về một người.

Trong bảng "báo cáo" của bạn, có vẻ như khóa chính không được là "partyid". Điều đó sẽ chỉ cho phép một hàng cho mỗi nhân viên, tôi không nghĩ bạn có ý định như vậy. (Tôi có thể sai.) Nếu tôi đúng về điều đó, bạn có thể xem xét một NOT NULL UNIQUE ràng buộc đối với {partyid, date} và một PRIMARY KEY ràng buộc trên một cột mới, 'reportid'. Các bảng "du lịch" và "hiệu suất" có thể sẽ tham chiếu đến "reportid". (Nhưng hãy tiếp tục đọc.)

Có những nơi trong sơ đồ của bạn, nơi một thực thể nhận được một khóa bổ sung:ví dụ:công ty của bạn chỉ định một số id nhân viên duy nhất cho nhân viên của mình. Không có lý do gì về mặt lý thuyết mà bạn không thể sử dụng 'Employid' thay vì 'partyid' từ thời điểm đó để tham khảo các nhân viên. Nhưng có một lý do thực tế mà bạn có thể không muốn làm điều đó. Nó làm tăng số lượng tham gia.

Ví dụ:nếu các bảng "thông tin xác thực", "công cụ", "chứng nhận", "học thuật" và "tuân thủ" đã tham chiếu đến worker.employid thay vì worker.partyid, bạn không thể chỉ tham gia "tuân thủ" và "bên" để lấy tên của người đó. Bạn cũng phải tham gia "nhân viên".

Họ cần phải có một khóa chính; khóa chính không nhất thiết phải là số id. Nếu có một khóa tự nhiên hiện có, bạn phải xác định nó và khai báo nó là DUY NHẤT.

Bảng "đơn hàng" có lẽ chỉ nên có "orderid" làm khóa chính của nó; sử dụng tham chiếu khóa ngoại để xác định khách hàng. Trong một số trường hợp, bạn nên đổi tên các cột. Trong trường hợp là khách hàng, có thể hợp lý khi gọi khóa của nó là 'customerid' thay vì 'parytid'. Tôi sẽ tự tạo một miền.

create domain PARTY_ID as integer not null;

Sau đó, ở mọi nơi cần số id bên, tôi sẽ sử dụng miền thay thế.

create table customers (
    customerid PARTY_ID primary key references parties (partyid),
...

Tôi cũng muốn xem một bảng gồm những người quản lý. Tham chiếu đến nó sẽ đảm bảo rằng manager.managerid sẽ giải quyết cho một người quản lý thực tế, không chỉ cho bất kỳ nhân viên nào.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để vô hiệu hóa thông tin đăng nhập gốc MySQL khi không có mật khẩu được cung cấp?

  2. Cách đổi tên hai bảng trong một hoạt động nguyên tử trong MySQL

  3. Hướng dẫn thiết kế cơ sở dữ liệu cho câu hỏi trong MySQL

  4. Làm thế nào để kiểm tra xem các phím bật / tắt có hoạt động không?

  5. Tiện ích mở rộng mysqli bị thiếu, phpmyadmin không hoạt động