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
"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?
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)
);
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ó.
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.
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.
Có 2 cách để khai báo một khóa ngoại (s):
nếu phím nước ngoài là một thuộc tính SINGLE:
Tài liệu tham khảo()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
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.
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.
- 1. Sự khác nhau giữa omnifunc và completefunc ngoại trừ ánh xạ khóa gọi là gì?
- 2. Sự khác nhau giữa tham chiếu yếu và tham chiếu yếu kém là gì?
- 3. sự khác nhau giữa từ khóa tham gia và từ khóa kết hợp bên trong trong sql oracle là gì?
- 4. OneToMany - sự khác nhau giữa bảng nối và khóa ngoài là gì?
- 5. Sự khác biệt giữa khóa chính và ràng buộc khóa duy nhất là gì?
- 6. Sự khác nhau giữa NSNotificationCenter và kỹ thuật Quan sát giá trị khóa là gì?
- 7. Sự khác biệt giữa ràng buộc và tham chiếu khóa ngoài trong Rails
- 8. Sự khác nhau giữa các tham chiếu và các đối tượng trong java là gì?
- 9. Sự khác nhau giữa tham chiếu dự án và phụ thuộc dự án là gì?
- 10. Sự khác nhau giữa các loại giá trị và loại tham chiếu trong C# là gì?
- 11. Sự khác nhau giữa "mutex" và "lock" là gì?
- 12. Sự khác nhau giữa LinkedBlockingQueue và ConcurrentLinkedQueue là gì?
- 13. Sự khác nhau giữa JavaScript Array và Object ngoại trừ thuộc tính .length là gì?
- 14. Sự khác nhau giữa Index v.s. Khóa trong MySQL
- 15. Sự khác nhau giữa WebConfigurationManager và ConfigurationManager là gì?
- 16. LINQ: Sự khác nhau giữa == và bằng tham gia là gì?
- 17. sự khác biệt giữa các khóa khác nhau trong mã hóa khóa công khai
- 18. Sự khác nhau giữa Float.POSITIVE_INFINITY và Float.MAX_VALUE là gì?
- 19. Sự khác nhau giữa CreateWnd và CreateWindowHandle là gì?
- 20. Sự khác nhau giữa null và System.DBNull.Value là gì?
- 21. Sự khác nhau giữa Surfaceview và TextureView là gì?
- 22. Sự khác nhau giữa GetBlobReference và GetBlobReferenceFromServer là gì?
- 23. Sự khác nhau giữa proxy và reify là gì?
- 24. Sự khác biệt giữa x: Khóa và x: Tên trong WPF là gì?
- 25. Sự khác nhau giữa Ctrl-C và SIGINT là gì?
- 26. IsAssignableFrom, IsInstanceOfType và từ khóa là gì, sự khác biệt là gì?
- 27. Sự khác biệt giữa khóa chính, khóa duy nhất và khóa ứng cử viên
- 28. Ý nghĩa của việc tự tham chiếu khóa ngoại là gì?
- 29. Sự khác biệt giữa màn hình và khóa?
- 30. Sự khác nhau giữa app.doScript và $ .evalFile là gì?
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
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 đồ. –