Lý lịch
Cách tiếp cận "tất cả PK phải bắt buộc" không có trong Mô hình quan hệ của Codd hoặc bất kỳ Tiêu chuẩn SQL nào (ANSI, ISO hoặc khác).
Sách Canonical dường như cũng trốn tránh những hạn chế này.
Lược đồ từ điển dữ liệu riêng của Oracle sử dụng các khóa tự nhiên trong một số bảng và thay thế các khóa trong các bảng khác. Tôi đề cập đến điều này bởi vì những người này phải biết một vài điều về thiết kế RDBMS.
PPDM (Hiệp hội quản lý dữ liệu dầu khí chuyên nghiệp) đề xuất các cuốn sách kinh điển tương tự:
Sử dụng khóa thay thế làm khóa chính khi:
- Không có chìa khóa tự nhiên hoặc kinh doanh
- Khóa tự nhiên hoặc doanh nghiệp là xấu (thay đổi thường xuyên)
- Giá trị của khóa tự nhiên hoặc doanh nghiệp không được biết tại thời điểm chèn bản ghi
- Các khóa tự nhiên nhiều lớp (thường là vài FK) vượt quá ba cột, điều này làm cho các phép nối quá dài.
Ngoài ra tôi đã không tìm thấy nguồn chính tắc nói rằng các khóa tự nhiên cần phải bất biến. Tất cả những gì tôi tìm thấy là chúng cần phải rất có giá trị, tức là chỉ cần được thay đổi trong những lần rất hiếm, nếu có.
Tôi đề cập đến PPDM vì những người này cũng phải biết một vài điều về thiết kế RDBMS.
Nguồn gốc của phương pháp "tất cả thay thế" dường như đến từ các khuyến nghị từ một số khuôn khổ ORM.
Đúng là cách tiếp cận cho phép mô hình hóa cơ sở dữ liệu nhanh chóng bằng cách không phải thực hiện nhiều phân tích kinh doanh, nhưng với chi phí duy trì và dễ đọc của mã SQL. Nhiều ưu tiên được tạo ra cho một điều gì đó có thể xảy ra hoặc không xảy ra trong tương lai (PK tự nhiên đã thay đổi, do đó chúng tôi sẽ phải sử dụng chức năng cập nhật theo tầng RDBMS) với chi phí cho nhiệm vụ hàng ngày như phải tham gia nhiều bảng hơn trong mỗi bảng truy vấn và phải viết mã để nhập dữ liệu giữa các cơ sở dữ liệu, một quy trình rất rõ ràng khác (do cần phải tránh các phân vùng PK và phải tạo các bảng giai đoạn / tương đương trước đó).
Đối số khác là các chỉ mục dựa trên số nguyên nhanh hơn, nhưng điều đó phải được hỗ trợ với điểm chuẩn. Rõ ràng, các varchars dài, khác nhau không tốt cho PK. Nhưng các chỉ mục dựa trên varchar ngắn, độ dài cố định gần như nhanh như số nguyên.
Những câu hỏi
- Có nguồn kinh điển nào hỗ trợ cho phương pháp "tất cả PK-phải-thay thế" không?
- Mô hình quan hệ của Codd có bị áp đảo bởi mô hình quan hệ mới hơn không?
TablenameID
" hoạt động rất tốt. Tôi đã thấy rằng làm việc trong thực tế với một db quy mô doanh nghiệp với hơn 500 bảng và kể từ đó tôi sử dụng điều này để mô hình hóa cơ sở dữ liệu bất cứ khi nào có thể.