Có một nguồn kinh điển nào hỗ trợ cho những người thay thế toàn bộ thế giới không?


8

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:

  1. Không có chìa khóa tự nhiên hoặc kinh doanh
  2. Khóa tự nhiên hoặc doanh nghiệp là xấu (thay đổi thường xuyên)
  3. 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
  4. 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?


"có thẩm quyền" có thể là một thuật ngữ tốt hơn "kinh điển". Thuật ngữ sau ngụ ý rằng chúng ta đang thảo luận về một dự án cụ thể hoặc triết lý được đặt tên, chứ không phải là một quy tắc thiết kế cơ sở dữ liệu chung.
DougM

6
Chà, tôi không biết một nguồn chính tắc, nhưng theo kinh nghiệm của tôi thì "tất cả PK phải là người thay thế", nói chính xác là "PK phải luôn là một trường tự phát có tên 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ể.
Doc Brown

2
Đáp án: 1) Không! 2) KHÔNG lớn hơn nữa !
nvogel

5
Phải đưa ra câu hỏi này -1 lớn. Các khóa thay thế mà dbms không yêu cầu là một chỉ báo cho thấy chúng không phải là 'phải'. Điều đó nói rằng, như những người khác đã chỉ ra, sử dụng chúng một cách nhất quán là một ý tưởng thông minh và giúp tránh các biến chứng xuống đường khi dữ liệu thay đổi.
GrandmasterB

Từ "thay thế" được sử dụng theo nhiều nghĩa trong ngữ cảnh này. Trong thời gian đầu sử dụng, khóa tự nhiên được mô tả là thay thế cho một thực thể. Các thực thể, như người hoặc máy bay, không thực sự được nhập vào cơ sở dữ liệu. Họ không có dữ liệu. Khóa tự nhiên xác định một thực thể và là dữ liệu. Vì vậy, nó có thể đại diện cho các thực thể bên trong cơ sở dữ liệu. Tất nhiên với điều kiện là doanh nghiệp không quản lý khóa tự nhiên. Việc sử dụng sau này sử dụng từ "thay thế" theo nghĩa là khóa nhân tạo được sử dụng làm đại diện thay thế cho khóa tự nhiên.
Walter Mitty

Câu trả lời:


9

"Tất cả các PK đều là người thay thế" hoàn toàn không phải là một chiến lược đúng đắn và chắc chắn không phải là một chiến lược mà bạn có thể tìm thấy một nguồn "có thẩm quyền" .

Trước hết hãy nghĩ về ý nghĩa của "khóa chính" trong ngữ cảnh này. Trong mô hình quan hệ không có khóa "chính" - nghĩa là không có khóa nào khác về cơ bản so với bất kỳ khóa nào khác trong cùng một bảng. Về nguyên tắc, tất cả các khóa trong cơ sở dữ liệu quan hệ đều có thể và có cùng trạng thái và có các tính năng và chức năng giống nhau, ngoại trừ mức độ mà nhà thiết kế cơ sở dữ liệu chọn khác. Do đó, việc chọn ra một khóa bất kỳ trong một bảng có nhiều khóa về cơ bản là tùy ý (đó là từ được sử dụng bởi EFCodd), chủ quan và hoàn toàn là tâm lý (quan điểm của Chris Date, đồng nghiệp và cộng tác viên của Codd). Trừ khi được giải thích sự khác biệt nào được rút ra giữa khóa "chính" và bất kỳ khóa nào khác, do đó, nó khá vô nghĩa và không có giá trị gì để khẳng định rằng khóa đó "

Thứ hai, đối số có rất ít liên quan đến các chỉ mục, đó là một tính năng lưu trữ vật lý. Khóa là một vấn đề hợp lý, không phải là vấn đề vật lý và không có lý do tuyệt đối nào để cho rằng các cân nhắc lưu trữ của khóa "chính" là hoặc nên khác với các khóa khác (xem đoạn trước). Chúng ta có thể giả định một cách hợp lý rằng bất kỳ cấu trúc lưu trữ nào được sử dụng, chi phí lưu trữ trong một số biện pháp sẽ lớn hơn với khóa thay thế so với không có khóa đó nhưng luôn có câu trả lời tốt nhất ở đây là "nó phụ thuộc". Quyết định lưu trữ nên được thực hiện trên cơ sở từng trường hợp cụ thể và quy tắc chăn rất ít giúp đỡ.

Thứ ba, từ quan điểm logic, yêu cầu tuyệt đối của khóa thay thế có rất ít ý nghĩa. Yêu cầu đối với khóa tự nhiên là hoàn toàn giống nhau khi có hoặc không có người thay thế. Nhu cầu thông tin có thể được xác định trong miền diễn ngôn (nghĩa là với khóa tự nhiên AKA "khóa doanh nghiệp", "khóa miền") là như nhau. Có, các khóa có thể cần được cập nhật nhưng đôi khi đó là bản chất của mọi thứ. Thêm một đại diện thay thế không nhất thiết phải giúp cập nhật chính dễ dàng hơn và đôi khi nó có thể làm cho chúng khó hơn.


câu trả lời tuyệt vời. Có rất nhiều điều để nói về điểm số này, nhưng làm cho câu trả lời của bạn lâu hơn sẽ không làm cho nó tốt hơn. Bạn tóm tắt những điểm thiết yếu tốt.
Walter Mitty

13

Khóa chính và khóa ngoại không phải đọc được. Mục đích của họ là duy trì cấu trúc quan hệ nội bộ của cơ sở dữ liệu, không được con người đọc.

Đương nhiên, nếu có một khóa tự nhiên thích hợp sẽ không bao giờ thay đổi (tôi khẳng định những thứ này hiếm như răng của gà mái hoặc tép bốn lá, nhưng ...), bạn có thể sử dụng và một số khách hàng sẽ đưa ra một trong những yêu cầu của họ .

Nhưng tại sao thêm sự phức tạp bổ sung vào một hệ thống cơ sở dữ liệu, cho lợi ích đáng kể? Các khóa thay thế chính được tạo bởi hệ thống, được đảm bảo là duy nhất, được đảm bảo không bao giờ thay đổi và là cùng loại dữ liệu cho tất cả các bảng. Họ sẽ có hành vi đáng tin cậy như nhau trong mọi trường hợp.

Nếu bạn đang tìm kiếm một tài nguyên kinh điển hỗ trợ thực hành này, bạn sẽ không tìm thấy tài nguyên nào. Cũng có nhiều nhà thiết kế ở phía bên kia lối đi sẽ bảo vệ một cách tàn nhẫn việc họ sử dụng các khóa tổng hợp tự nhiên với các chỉ mục được nhóm làm khóa chính và tất cả các tài nguyên chính tắc đều nói rằng đó là sự lựa chọn của nhà thiết kế.

Xem thêm
http://en.wikipedia.org/wiki/Surrogate_key


2
@Bobson: Tôi đã tuyên bố trong câu trả lời của mình rằng có những ý kiến ​​không đồng tình, và tôi đồng ý với vị trí của bạn trong đoạn bên dưới tuyên bố mà bạn đã trích dẫn, vì vậy downvote của bạn có vẻ ... thất thường.
Robert Harvey

2
"Khóa chính và khóa ngoại không được phép đọc." !! Chính xác thì ai là "giả sử" một thứ như vậy, ngoài Robert? Câu hỏi là về mô hình quan hệ mà chắc chắn không bao giờ, từng nghĩ là một điều như vậy.
nvogel

3
@sqlvogel [thở dài] Làm cho chúng có thể đọc được nếu bạn muốn. Thực sự, nó ổn. Miễn là bạn có thể đảm bảo tính bất biến và tính độc đáo, bạn có thể sơn chúng màu xanh lá cây cho tất cả những gì tôi quan tâm. Quan điểm của tôi là khả năng đọc thực sự thấp trên thang đo quan trọng.
Robert Harvey

2
@RobertHarvey Tất nhiên rồi. Không phản đối việc nghe ý kiến ​​của bạn, nhưng câu đầu tiên của bạn đọc hơi quá giống như bạn đang khẳng định một số tài sản ngầm hoặc ý định của những điều đó. Một lần nữa như những người khác đã nói, "bất biến" không phải là một yêu cầu. Tính ổn định (một thuật ngữ tương đối không phải là một từ tuyệt đối) là một thuộc tính hữu ích hoặc mong muốn của khóa; bất biến là không và dù sao cũng là ảo tưởng.
nvogel

3
@RobertHarvey, Nếu bạn không quen với các tình huống không sử dụng thay thế là một lựa chọn tốt hơn thì một số người có thể kết luận rằng bạn không nên đưa ra lời khuyên tốt nhất khi nào hoặc không nên sử dụng chúng. Tôi không có ý định bình luận về bất cứ điều gì được viết trên Witless-pedia.
nvogel
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.