Trong SQL, nó là khóa tổng hợp hay khóa ghép?


31

Giới thiệu về SQL (Máy tính / Cơ sở dữ liệu):

Khi chúng ta có hai hoặc nhiều trường trong một bảng, cùng nhau, xác định các bản ghi của nó một cách duy nhất, cách gọi đúng đắn của chúng là gì? Phím tổng hợp hay phím ghép?

Tôi đã thấy trên web cả hai sử dụng vì vậy tôi không thực sự chắc chắn.


1
Kiểm tra hai xu hướng Tìm kiếm Google này: goo.gl/5u4XdR .
igordcard

Câu trả lời:


32

Cả khóa tổng hợp và khóa tổng hợp mô tả một khóa ứng cử viên có nhiều hơn một thuộc tính. Theo Từ điển cơ sở dữ liệu quan hệ (CJDate), chúng có nghĩa tương tự.

Trong mô hình ER, thuật ngữ "khóa ghép" cũng có nghĩa cụ thể hơn. Nó có nghĩa là một khóa có các thuộc tính cấu thành là các tham chiếu đến các khóa trong các thực thể khác - tức là một khóa ghép tạo thành một mối quan hệ xác định. Đối với hầu hết các mục đích, đây không phải là một khái niệm đặc biệt hữu ích hoặc quan trọng vì vậy các thuật ngữ hỗn hợp / hợp chất thường được coi là có thể hoán đổi cho nhau. Có lẽ tốt nhất để bám vào "khóa tổng hợp" trừ khi bạn đề cập cụ thể đến khái niệm mô hình ER của khóa ghép.


3
"Trong mô hình ER, thuật ngữ" khóa ghép "cũng có nghĩa cụ thể hơn" - Nghe có vẻ thuyết phục :) Nhưng bạn có trích dẫn không?
onedaywhen ngày

Vì vậy, một khóa ghép sẽ là khóa thường được tìm thấy trong một bảng nối được sử dụng cho nhiều mối quan hệ chẳng hạn?
Josh P

19

Tôi vẫn không chắc tại sao http://en.wikipedia.org/wiki/Compound_key không được hỏi ý kiến. Nó nói rất rõ (và đúng):

Trong thiết kế cơ sở dữ liệu, khóa ghép là một khóa bao gồm 2 hoặc nhiều thuộc tính xác định duy nhất một sự xuất hiện của thực thể. Mỗi thuộc tính tạo nên khóa ghép là một khóa đơn giản theo đúng nghĩa của nó.

Điều này thường bị nhầm lẫn với một khóa tổng hợp, mặc dù đây cũng là một khóa bao gồm 2 hoặc nhiều thuộc tính xác định duy nhất một sự xuất hiện của thực thể, ít nhất một thuộc tính tạo nên khóa tổng hợp không phải là một khóa đơn giản theo đúng nghĩa của nó.

Khóa tổng hợp được tạo thành từ các yếu tố có thể có hoặc không phải là khóa ngoại. Ví dụ: Trong một bảng chi tiết Giao dịch, khóa là (TransactionId, ItemNumber). Một chi tiết giao dịch là một phần phụ của một giao dịch. TransactionId là khóa ngoại, tham chiếu bảng Giao dịch. ItemNumber không phải là một chìa khóa trong chính nó. Nó chỉ xác định duy nhất một mục trong bối cảnh của một giao dịch.

Khóa ghép là một khóa trong đó bất kỳ phần nào của khóa là khóa ngoại. Ví dụ: trong hệ thống đặt phòng khách sạn, đặt phòng có khóa ghép, (GuestId, HotelId, DestinationDate). GuestId xác định một Khách và tham chiếu bảng Khách. HotelId xác định một Khách sạn và tham chiếu bảng Khách sạn. DestinationDate xác định một Ngày. Có thể có hoặc không có bảng Ngày mà nó tham chiếu, nhưng nó xác định một Thực thể (một Ngày) theo bất kỳ cách nào.

Cũng cần lưu ý là thông tin này: Một khóa đơn giản là một khóa được tạo thành từ một cột, trong khi đó một khóa tổng hợp được tạo thành từ hai hoặc nhiều cột.


4
jcolebrand: "Khóa ghép là một khóa theo đó bất kỳ phần nào của khóa có thể xác định bản ghi." Điều đó không chính xác. Theo định nghĩa, một khóa phải là không thể sửa chữa (một siêu khóa tối thiểu). Nếu chỉ một số thuộc tính được yêu cầu để xác định duy nhất một tuple thì theo định nghĩa đó là siêu khóa chứ không phải khóa.
nvogel

a) Tôi đã trích dẫn trang wikipedia. b) Tôi có xu hướng đồng ý với nó. Bất kỳ phần nào của khóa ghép cũng là một khóa đơn giản. Tôi không phiền nếu bạn cũng gọi nó là một siêu khóa. Tuy nhiên, tôi không tin rằng tất cả các khóa ghép có thể là siêu khóa. Ergo, tôi đứng trước những gì trong bài viết trên wikipedia và tôi đứng trước định nghĩa mà tôi đã trích dẫn. Tôi có thể đi và lấy cuốn sách thiết kế cơ sở dữ liệu bìa cứng đã xuất bản của mình nếu điều đó sẽ làm bạn hạnh phúc hơn.
jcolebrand

2
Tôi nghĩ rằng bạn đã bỏ lỡ điểm liên quan, đó là một khóa ghép được tạo thành từ các khóa từ các thực thể khác . Một tập hợp con đúng của một khóa không thể là một khóa. Như tôi chắc chắn bạn biết, một khóa được yêu cầu tối thiểu (trong bảng có khóa) - vì vậy nếu bạn xóa bất kỳ thuộc tính nào khỏi nó thì nó sẽ không còn là khóa nữa.
nvogel

2
"Khóa" chỉ viết tắt của "khóa ứng viên". Định nghĩa sách giáo khoa về khóa ứng viên là và luôn luôn là một "siêu khóa tối thiểu". Tài liệu tham khảo: Từ điển của ngày pg17 hoặc Sách Alice nếu bạn nghi ngờ về định nghĩa của khóa.
nvogel

1
Các định nghĩa về " khóa ghép " và " khóa compsite " trên trang Wikipedia đã được thay đổi vào ngày 13 tháng 7 năm 2014 và không còn phù hợp với các định nghĩa trong câu trả lời này. (Tôi đã không thay đổi các định nghĩa, chỉ chỉ ra rằng các định nghĩa không khớp bây giờ.)
spencer7593

3

Trong tiếng Anh nó là "khóa tổng hợp". Ví dụ, hãy xem trang web MSDN (mọi tìm kiếm có chứa "khóa tổng hợp sql" sẽ làm).

http://www.google.com/search?q=sql+compổng + key + site: msdn.microsoft.com

Giả sử rằng câu hỏi liên quan đến Cơ sở dữ liệu quan hệ, tôi đã tìm kiếm một định nghĩa "trung lập" trong Wikipedia :

Khóa tổng hợp là một khóa được tạo thành từ hai hoặc nhiều thuộc tính trong một bảng (cùng nhau) xác định duy nhất một bản ghi


1
Không có nguồn, không có tài liệu tham khảo, không có liên kết, không có gì Câu trả lời tồi.


google.com/search?q=sql+composite+key+def định sẽ chỉ đưa bạn đến hàng trăm trang web nói về Khóa tổng hợp SQL
Hemme

1
vì vậy, một tìm kiếm google cho khóa ghép
jcolebrand

3
Đây là khoa học: googlefight.com/ từ
Hemme

3

Khóa tổng hợp bao gồm nhiều hơn một thuộc tính để xác định duy nhất một lần xuất hiện thực thể. Điều này khác với khóa tổng hợp ở chỗ một hoặc nhiều thuộc tính, tạo nên khóa, không phải là khóa đơn giản theo cách riêng của chúng.

Ví dụ: bạn có một cơ sở dữ liệu chứa bộ sưu tập CD của bạn. Một trong những thực thể được gọi là các bản nhạc, chứa các chi tiết của các bản nhạc trên CD. Điều này có một khóa tổng hợp của tên CD, số lượng theo dõi.


2

Nghe có vẻ như một phím tổng hợp là một superset bao gồm các phím ghép. Nếu chúng tôi chấp nhận rằng một khóa tổng hợp được tạo từ nhiều hơn một thuộc tính (dưới bất kỳ hình thức nào) và một khóa tổng hợp được tạo từ nhiều hơn một khóa đơn giản. Khóa ghép là một loại khóa tổng hợp có ý nghĩa cụ thể hơn, nhưng thuật ngữ "khóa tổng hợp" luôn phù hợp để sử dụ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.