Bạn gọi cái gì không phải là khóa chính?


7

Tôi đã làm việc với một nhóm người đã xây dựng một hệ thống trong đó họ đã đặt ra một vài điều khoản mới trong quy trình và tôi muốn biết liệu có điều gì chuẩn hơn mà họ nên gọi nó không.

Về cơ bản, chúng có các bảng chứa thông tin được phiên bản, do đó, khóa duy nhất cho bảng là mã định danh cho tài liệu được theo dõi, cộng với số bản ghi (mặc dù, số bản ghi được tự động đánh số, vì vậy nó là duy nhất). Chúng đề cập đến các trường tạo nên số nhận dạng của tài liệu (nó thay đổi cho từng bảng), dưới dạng 'khóa chính' ... nhưng các trường cả riêng lẻ và tập thể (ví dụ: nếu nó có các trường A, B và C để có được một định danh duy nhất, họ có thể hoán đổi cho nhau tham khảo A như là ' một chìa khóa thủ' và A / B / C là ' những chìa khóa chính'

Nếu họ có cơ sở dữ liệu được chuẩn hóa, đây sẽ là một ứng cử viên rõ ràng cho khóa ngoại - nhưng nó không được chuẩn hóa, vì vậy nó không phải là một tham chiếu đến một bảng khác.

Có một số tên cho khái niệm này - một định danh để chọn một số khái niệm không phải là cái mà bảng dựa trên, nhưng đó không phải là khóa ngoại?


cập nhật: nó không phải là khóa thay thế, vì nó không xác định một bản ghi duy nhất trong bảng; nó xác định một nhóm các hồ sơ. Lấy bảng folowing:

id   document_id   version_no
--   -----------   ----------
 1             1            1
 2             2            1
 3             1            2
 4             2            2
 5             2            3

Vì vậy, chúng tôi đang theo dõi siêu dữ liệu cho 5 đối tượng, đó là hai tệp khác nhau, một trong số đó đã được cập nhật một lần (2 phiên bản / phiên bản của nó) và một tệp đã được cập nhật hai lần.

Chúng tôi có những điều sau đây:

  • khóa ứng viên: (id) hoặc (document_id, version_no)
  • khóa tự nhiên: (document_id, version_no)
  • khóa thay thế: (id)
  • khóa chính: (id, document_id) (Tôi đã không chọn nó)

... nếu document_idlà mối quan hệ với một bảng khác, thì đó sẽ là khóa ngoại, nhưng 'khóa ngoại' thường cũng gây ra một ràng buộc (nghĩa là giá trị phải tồn tại trong một số bảng khác trước khi có thể sử dụng ở đây) .. Nhưng trong trường hợp này, nó không phải là. Vì vậy, có một số thuật ngữ khác để mô tả điều này như là một cái gì đó chọn một nhóm các đối tượng liên quan chứ không phải là một bản ghi ra khỏi bảng?

Định nghĩa đầu tiên về thay thế trên trang wikipedia cho phù hợp với khóa thay thế , nhưng đó không phải là cách sử dụng phổ biến của thuật ngữ này, trong đó hầu hết mọi người coi khóa thay thế để phù hợp với định nghĩa thứ hai:

  • Surrogate (1): Định nghĩa này dựa trên định nghĩa được đưa ra bởi Hall, Owlett và Todd (1976). Ở đây một người thay thế đại diện cho một thực thể trong thế giới bên ngoài. Chất thay thế được hệ thống tạo ra bên trong nhưng vẫn hiển thị cho người dùng hoặc ứng dụng.
  • Surrogate (2): Định nghĩa này dựa trên định nghĩa được đưa ra bởi Wieringa và De Jrid (1991). Ở đây một đại diện thay thế đại diện cho một đối tượng trong cơ sở dữ liệu. Người thay thế được hệ thống tạo ra bên trong và vô hình với người dùng hoặc ứng dụng.

cập nhật 2 : Về cơ bản, nếu bạn có một bảng xử lý phiên bản các bản ghi, nếu bạn di chuyển các bản ghi sang một bảng mới và lịch sử chỉnh sửa được lưu trữ, các trường liên kết trở lại bảng gốc sẽ được coi là khóa ngoại ... nhưng nếu bạn đã lưu trữ tất cả trong một bảng, mà không liên quan đến bảng phụ, có tên cho nhóm các trường xác định nhiều phiên bản của bản ghi không?

Lý do tôi hỏi là nhóm tôi làm việc cùng đã quyết định gọi nó là 'chìa khóa chính' và khi tôi lên tàu, tôi đã xem lại tất cả các tài liệu của họ và nói với họ rằng họ có lỗi đánh máy, và đó là "Khóa chính", nhưng họ giải thích rằng không, đó là cụm từ họ đã đặt ra để mô tả khái niệm này.

Tôi đang cố gắng xác định xem có một tên được chấp nhận trong cộng đồng cơ sở dữ liệu cho khái niệm này không.


Theo một số cách, document_id là một khóa thay thế, nhưng trong trường hợp cụ thể của chúng tôi, đó là việc băm một khóa tự nhiên (thời gian được đặt vào 12 'giây' ... khóa tự nhiên (thời gian) có thể thay đổi giữa các phiên bản / phiên bản. dữ liệu khoa học, do đó, có sự điều chỉnh cho đồng hồ trôi, v.v.)
Joe

Nếu id là khóa ứng viên thì (id, document_id) không thể là khóa chính vì đó không phải là một siêu khóa tối thiểu. Nó có thể là cột được gọi bằng một ràng buộc CHÍNH CHÍNH, nhưng khác.
nvogel

@dportas: nó không phải là khóa ứng cử viên ... về mặt kỹ thuật, nó là một định danh thành một khái niệm khác. Hãy để tôi đi cập nhật câu hỏi.
Joe

Câu trả lời:


7

Thuật ngữ người dùng thay thế khóa tự nhiên và khóa tự nhiên cho khóa chính dưới dạng một biến thể.

Phím thay thế:

Các khóa thay thế là các khóa không có ý nghĩa kinh doanh trực tuyến và chỉ được sử dụng để xác định một bản ghi trong bảng. Các khóa như vậy là cơ sở dữ liệu được tạo (ví dụ: Danh tính trong SQL Server, Chuỗi trong Oracle, Chuỗi / Nhận dạng trong UDB của DB2, v.v.) hoặc các giá trị được tạo bởi hệ thống (như được tạo thông qua một bảng trong lược đồ).

Khóa tự nhiên:

Các khóa là tự nhiên nếu thuộc tính mà nó đại diện được sử dụng để nhận dạng độc lập với lược đồ cơ sở dữ liệu. Điều này về cơ bản có nghĩa là các khóa là tự nhiên nếu mọi người sử dụng chúng ví dụ: Số hóa đơn, Mã số thuế, SSN, v.v.

Khóa thay thế so với Khóa tự nhiên cho Khóa chính


6

"Khóa ứng cử viên" là bất kỳ cột hoặc tập hợp các cột nào có thể xác định duy nhất một bản ghi trong bảng.

"Khóa chính" là khóa ứng viên được xác định là khóa chính cho bảng.

Trong nội bộ, một khóa chính chỉ đơn giản là một chỉ mục duy nhất, được nhóm hoặc không được phân cụm, thường được sử dụng trong các mối quan hệ khóa ngoài.

Có nhiều thứ hơn thế, như mọi khi, nhưng tôi hy vọng điều này sẽ giúp.


5

Một chìa khóa hợp chất cũng sẽ xác định những gì bạn mô tả.

Tôi đã nghe nó gọi những thứ khác là tốt, như khóa tổng hợp. Nhưng lưu ý rằng khóa tổng hợp không giống với khóa ghép. Chỉ cần cố gắng để cảnh báo bạn với hai từ vựng.

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.