2009-03-17 101 views
11

Ok. Vì vậy, tôi biết những gì một khóa chính trong DB là. Nếu bạn có bảng trong cơ sở dữ liệu, khóa chính là một giá trị duy nhất cho mỗi hàng trong bảng của bạn. Ví dụ:Chính xác thì khóa ngoại là gì?

id | name | whatever 
------------------------- 
1  Alice  .... 
2  Bob  .... 
45  Eve  .... 
988 ....  .... 

Vì vậy, tôi cần một ví dụ đơn giản để giải thích chính xác khóa ngoại là gì. Bởi vì tôi chỉ không nhận được nó :)


Edit: OK nó khá dễ dàng, tôi đoán tôi đã quá phức tạp vấn đề.

Vì vậy, một câu hỏi cuối cùng, hạn chế duy nhất đối với khóa ngoại là ở chỗ chúng là giá trị khóa chính hợp lệ trong bảng tôi đang đề cập đến?

+0

"hạn chế duy nhất đối với khóa ngoại là ..." Đó không phải là "hạn chế", đó là định nghĩa: FK LÀ khóa chính hợp lệ trên bảng khác. –

+0

"... khóa chính là một giá trị duy nhất ..." có, miễn là bạn nhận ra rằng "giá trị" là _not_ đồng nghĩa với "cột". Nó hoàn toàn hợp lệ cho khóa chính là nhiều giá trị. –

+0

Grrr. Không thể chỉnh sửa nhận xét. Câu cuối cùng nên đọc: "Nó hoàn toàn hợp lệ cho khóa chính là nhiều COLUMNS". –

Trả lời

21

Khóa ngoài là trường trỏ đến khóa chính của bảng khác.

Ví dụ:

Table Name - Users 

UserID UserName UserRoleID 
1   JohnD  1 
2   CourtneyC 1 
3   Benjamin 2 

Table Name - UserRoles 

UserRoleID Desc 
1    Admin 
2    Moderator 

Bạn có thể thấy Users.UserRoleID đó là một chìa khóa nước ngoài mà chỉ vào UserRoles.UserRoleID khóa chính

Việc sử dụng phím nước ngoài làm cho thiết lập các mối quan hệ trên các bảng khác đơn giản , cho phép bạn liên kết với nhau các dữ liệu của nhiều bảng trong một cách tốt đẹp:

Ví dụ:

SELECT 
    a.UserID, 
    a.UserName, 
    b.Desc as [UserRole] 
FROM 
    Users a INNER JOIN 
     UserRoles b ON a.UserRoleID = b.UserRoleID 

Output sau đó sẽ là:

UserID UserName User Role 
1   JohnD  Admin 
2   CourneyC Admin 
3   Benjamin Moderator 
0

Trong một cơ sở dữ liệu quan hệ mối quan hệ một-nhiều được thực hiện bằng cách tham chiếu bảng con ID của bảng cha. ID cha trong bảng con được gọi là khóa ngoài vì nó tham chiếu khóa chính của bảng khác.

12

Hãy nói rằng bạn có một lĩnh vực, đó là thành phố quê hương:

id | name | city 
------------------------- 
1  Alice  San Francisco 
2  Bob  New York 
45  Eve  New York 
988 Bill  San Francisco 

Bây giờ, nó không có ý nghĩa để lặp lại các thành phố cùng nhiều hàng. Điều này có thể dẫn bạn đến lỗi chính tả, sử dụng không gian quá mức, khó khăn để đưa ra kết quả giữa các vấn đề khác. Vì vậy, bạn sử dụng một chìa khóa nước ngoài:

id | name | fk_city 
------------------------- 
1  Alice  1 
2  Bob  2 
45  Eve  2 
988 Bill  1 

bảng thành phố quê hương:

id | name 
------------------------- 
1 | San Francisco 
2 | New York 

Hy vọng nó sẽ làm cho mọi thứ rõ ràng hơn cho bạn. :-)

Cập nhật: về câu hỏi cuối cùng của bạn: Có. :-)

3

Khóa ngoại là một cột trong một bảng xác định duy nhất nội dung nào đó trong bảng khác. Do đó, các giá trị phải tương ứng với các khóa chính trong bảng khác đó.

Ví dụ: nếu bạn có một bảng học sinh tham gia các khóa học, mỗi bản ghi sẽ bao gồm id sinh viên và id khóa học. Đây là các khóa ngoại trong bảng học sinh (trong đó có một bản ghi cho mỗi id học sinh), và một bảng các khóa học (trong đó có một bản ghi cho mỗi khóa học).

Tính toàn vẹn tham chiếu có nghĩa là tất cả các khóa ngoại của bạn thực sự tương ứng với các khóa chính trong các bảng mục tiêu này. Ví dụ: tất cả id sinh viên và id khóa học trong bảng đăng ký của bạn tương ứng với id sinh viên thực và id khóa học.

0

Khóa ngoài là trường tham chiếu bảng khác trong cơ sở dữ liệu. Ví dụ: giả sử bạn có 2 bảng, PERSONADDRESS. Có một trường trong PERSON được gọi là ID và một trường trong ADDRESS được gọi là PERSON_ID. Bạn sẽ làm cho PERSON_ID tham chiếu đến PERSON.ID làm khóa ngoại. Điều này có nghĩa là bạn không thể có địa chỉ không được kết nối với một người vì giá trị trong trường ADDRESS.PERSON_ID phải tồn tại trong bảng PERSON.

1
id | name | whatever | countryid 
------------------------------------- 
1  Alice  ....  13 
2  Bob  ....  42 
45  Eve  ....  1 
988 ....  ....  2 

id | countryid 
---------------- 
1  Japan 
2  Spain 
13  Norway 
42  Italy 

Những điểm khóa ngoại từ bảng người (đầu tiên) để một hàng trong bảng nước (thứ hai)

0

sử dụng ví dụ bảng của bạn, giả sử bạn có bảng khác:

cartid | id | itemid 
----------------------- 
100  1  abc 
101  1  cde 

trong bảng này, khóa chính là cartid, khóa ngoài là id, sẽ được liên kết với bảng đầu tiên của bạn. người dùng 1 có hai giỏ hàng, mỗi giỏ hàng có một mặt hàng.

khóa ngoại là những gì bạn sử dụng để liên kết hai hoặc nhiều bảng có thông tin liên quan với nhau.

0

Khóa ngoại là khóa chính từ bảng khác được lưu trữ trên bảng của bạn. Giả sử bạn có một bảng khách hàng và một bảng các đơn đặt hàng. CustomerId có thể là khóa chính trên bảng khách hàng và OrderId có thể là khóa chính trên bảng thứ tự. Nhưng trên bảng lệnh bạn cần biết khách hàng cho đơn đặt hàng này, phải không? Vì vậy, bạn cần lưu trữ CustomerId trên bảng thứ tự. Trong trường hợp này, CustomerId trên bảng thứ tự là khóa ngoại.

Tôi sẽ chỉ ra rằng không có yêu cầu khóa chính (và do đó khóa ngoại) là một cột đơn. Nó đơn giản, chắc chắn. Nhưng tôi đã làm việc trên các hệ thống doanh nghiệp, nơi khóa chính dài 11 cột và tôi chắc chắn có những ví dụ dài hơn. Tức là, bạn cần phải biết giá trị của 11 cột khác nhau trước khi bạn có thể xác định duy nhất hàng.

Các vấn đề liên quan