2011-12-21 38 views
19

Tôi rất bối rối giữa hai điều này. Chúng giống nhau hay khác nhau? Một số sách hoặc người nói rằng chúng giống nhau và những người khác nói rằng chúng khác nhau. Tôi đã thử nhưng không tìm thấy bất kỳ câu trả lời xác thực nào.
Xin hãy giải quyết nó.Sự khác nhau giữa khóa ngoại và khóa tham chiếu là gì?

Trả lời

9

"Khóa tham chiếu" không phải là thuật ngữ kỹ thuật thông thường trong mô hình quan hệ hoặc trong thực thi SQL bằng tiếng Anh Mỹ.

Khóa ngoại "tham chiếu" khóa trong một số bảng khác; đó có thể là nơi sự nhầm lẫn đến từ đâu không?

5

Bạn không thực sự gọi một cái gì đó một tham khảo chính ... Họ là những điều tương tự ... bạn có thể thấy từ tài liệu tham khảo sử dụng ví dụ như trong sqlite: bạn có thể sử dụng cú pháp như thế này để bắt đầu một db của tác giả và sách. Điều này cho phép bạn cho thấy rằng một tác giả có thể có nhiều sách. Điều này cho db rằng books.author_id (được định nghĩa một vài dòng lên) tham chiếu author.id

CREATE TABLE 'author' (
    id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
    firstname varchar(255) 
    lastname varchar(255) 
); 

CREATE TABLE 'books' (
    id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
    author_id INTEGER, 
    title varchar(255), 
    published date, 
    FOREIGN KEY(author_id) REFERENCES author(id) 
); 
2

Có lẽ bạn đang sử dụng thuật ngữ "chủ chốt tham khảo" hơi lỏng lẻo?

Giá trị khóa ngoại trong một hàng được gọi là "tham chiếu" hàng chứa giá trị khóa tương ứng. Lưu ý từ "tham chiếu" trong câu trước là một động từ, vì vậy chúng ta có thể nói chúng ta có một giá trị khóa ngoại lệ tham chiếu và một giá trị khóa được tham chiếu.

Mặc dù đó là giá trị khóa, thay vì ràng buộc khóa bảng, đang được tham chiếu, tôi giả sử nói một cách lỏng lẻo rằng chúng tôi có thể nói "khóa được tham chiếu" có nghĩa là các hàng bao gồm các giá trị có khả năng được tham chiếu. Sau đó tôi thấy cách "khóa tham chiếu" có thể trở thành "khóa được tham chiếu" nhưng không phải là nguồn gốc của nó.

36

Tôi giả sử bạn đang nói về việc sử dụng REFERENCES trong đó từ khóa FOREIGN KEY không được sử dụng, ví dụ:

author_id INTEGER REFERENCES author(id) 

... thay vì ...

author_id INTEGER, 
FOREIGN KEY(author_id) REFERENCES author(id) 

Câu trả lời là, nó chỉ đơn giản là cú pháp viết tắt cho điều tương tự. Mối quan tâm chính khi thay đổi giữa hai điều này là dễ đọc.

+0

Mặc dù lần đầu tiên sẽ hoạt động mà không bật phím nước ngoài và phím thứ hai sẽ không hoạt động. Là cách thứ hai chỉ không được sử dụng nữa? – schwiz

+0

Nó cũng quan trọng nếu bạn cố gắng sử dụng kỹ thuật đảo ngược để tạo sơ đồ từ cơ sở dữ liệu của bạn trong MySQL Workbench. Nếu bạn đã sử dụng tùy chọn linh sam trong khi tạo cơ sở dữ liệu, công cụ sẽ không thể tạo các kết nối giữa các phần tử biểu đồ. –

2

Khóa ngoại "tham chiếu" một khóa trong một số bảng khác. Khóa đó trong một số bảng khác được gọi là khóa tham chiếu. Có thể bạn sẽ nghe rất nhiều về điều này nếu bạn đang sử dụng tính năng Đồ họa trên phpmyadmin.

1

Có 2 cách để khai báo một khóa ngoại (s):

  1. nếu phím nước ngoài là một thuộc tính SINGLE:
    Tài liệu tham khảo()

  2. nếu phím nước ngoài là một danh sách các thuộc tính

KEY NƯỚC NGOÀI() THAM KHẢO

1

Sự khác biệt duy nhất và quan trọng nhất giữa hai từ khóa 'NGOẠI TỆ' và "TÀI LIỆU THAM KHẢO" từ khóa mặc dù cả hai đều làm cho dữ liệu là dữ liệu con của bảng cha, "KEY FOREIGN" được sử dụng để tạo ra một mức bảng ràng buộc trong khi từ khóa REFERENCES chỉ có thể được sử dụng để tạo ràng buộc mức cột. Chỉ có thể tạo các ràng buộc mức cột khi tạo bảng. Nhưng các ràng buộc mức bảng có thể được thêm vào bằng cách sử dụng lệnh ALTER TABLE.

1

Khóa ngoại phải tham chiếu đến khóa chính. Khi sử dụng REFERENCES ràng buộc đơn giản, thì không cần thiết khóa tham chiếu là khóa chính.

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