2013-07-26 60 views
29

Trong SQL Server, tôi đã nhận lỗi này ->Không có khóa chính hoặc ứng cử viên trong bảng tham chiếu phù hợp với danh sách cột tham khảo trong khóa ngoại

"Không có khóa chính hoặc ứng cử viên trong bảng tham chiếu 'BookTitle' khớp với danh sách cột tham chiếu trong khóa ngoài 'FK_ BookCopy _Title__2F10007B'. "

Lần đầu tiên tôi tạo mối quan hệ được gọi là quan hệ BookTitle.

CREATE TABLE BookTitle (
ISBN   CHAR(17)  NOT NULL, 
Title   VARCHAR(100) NOT NULL, 
Author_Name  VARCHAR(30) NOT NULL, 
Publisher  VARCHAR(30) NOT NULL, 
Genre   VARCHAR(20) NOT NULL, 
Language  CHAR(3)  NOT NULL,  
PRIMARY KEY (ISBN, Title)) 

Sau đó, tôi đã tạo mối quan hệ được gọi là quan hệ BookCopy. Mối quan hệ này cần tham chiếu đến khóa chính của mối quan hệ BookTitle, Title.

CREATE TABLE BookCopy (
CopyNumber   CHAR(10)   NOT NULL, 
Title    VARCHAR(100)  NOT NULL, 
Date_Purchased  DATE    NOT NULL, 
Amount    DECIMAL(5, 2)  NOT NULL, 
PRIMARY KEY (CopyNumber), 
FOREIGN KEY (Title) REFERENCES BookTitle(Title)) 

Nhưng tôi không thể tạo mối quan hệ BookCopy vì lỗi được nêu ở trên xuất hiện.

Tôi thực sự đánh giá cao một số trợ giúp hữu ích.

+1

bạn có dữ liệu trong bảng không? – Bharadwaj

+0

Có thể trùng lặp của [Không có khóa chính hoặc ứng cử viên nào trong bảng được tham chiếu] (https://stackoverflow.com/questions/12213301/there-are-no-primary-or-candidate-keys-in-the-referenced- table) –

Trả lời

38

Phím nước ngoài hoạt động bằng cách nối cột vào khóa duy nhất trong bảng khác và khóa duy nhất phải được xác định dưới dạng một số chỉ mục duy nhất, có thể là khóa chính hoặc một số chỉ mục duy nhất khác.

Hiện tại, chỉ số duy nhất bạn có là một chỉ mục hợp lệ trên ISBN, Title là khóa chính của bạn.

Có một số tùy chọn mở cho bạn, tùy thuộc vào chính xác những gì mà BookTitle giữ và mối quan hệ của dữ liệu bên trong nó.

Tôi rất nguy hiểm khi đoán rằng ISBN là duy nhất cho mỗi hàng trong BookTitle. Về giả định đây là trường hợp, sau đó thay đổi khóa chính của bạn thành chỉ trên ISBN và thay đổi BookCopy để thay vì Tiêu đề bạn có ISBN và tham gia vào đó.

Nếu bạn cần giữ khóa chính là ISBN, Title thì bạn cần lưu trữ ISBN trong BookCopy cũng như Tiêu đề và khóa ngoài trên cả hai cột HOẶC bạn cần tạo chỉ mục duy nhất trên BookTitle (Tiêu đề) như một chỉ mục riêng biệt. Thông thường, bạn cần đảm bảo rằng cột hoặc cột bạn có trong mệnh đề REFERENCES khớp chính xác với chỉ mục duy nhất trong bảng chính: trong trường hợp của bạn không thành công vì bạn không có chỉ mục duy nhất trên Title một mình .

+0

Lý do cho điều này là bởi vì khi bạn có khóa ngoài, nó không cần phải quét bảng đích để tạo mối quan hệ đúng không? – HumbleWebDev

+0

Không, đó là vì chìa khóa nước ngoài khái niệm luôn luôn ánh xạ tới một hàng duy nhất trong bảng cha. Điều này được thực thi bởi một ràng buộc duy nhất trên bảng mà trên nhiều RDBMS được thực hiện như một chỉ mục. Nhưng nó không phải là. –

+0

Phải, tôi nghĩ đó là giải thích tốt hơn và đơn giản hơn. – HumbleWebDev

6

Bạn cần hoặc

  • Một chỉ số duy nhất trên Tiêu đề trong BOOKTITLE
  • ISBN cột trong BookCopy và FK là trên cả hai cột

Một nước ngoài nhu cầu quan trọng để nhận diện phụ huynh hàng: bạn hiện không có cách nào để làm điều đó bởi vì Tiêu đề không phải là duy nhất.

2

BookTitle có khóa Composite. vì vậy nếu khóa của BookTitle được tham chiếu là foreign key, bạn phải mang theo khóa tổng hợp hoàn chỉnh.

Vì vậy, để giải quyết sự cố, bạn cần phải thêm khóa tổng hợp hoàn chỉnh vào BookCopy. Vì vậy, hãy thêm cột ISBN. và cuối cùng.

foreign key (ISBN, Title) references BookTitle (ISBN, Title) 
9

Một điều nữa là - nếu phím của bạn rất phức tạp đôi khi bạn cần phải thay thế nơi các lĩnh vực và nó giúp:

nếu việc dosent này:

chính nước ngoài (ISBN, Tiêu đề) tham chiếu BOOKTITLE (ISBN, Tiêu đề)

Sau đó, điều này có thể làm việc (không phải cho ví dụ cụ thể này, nhưng nói chung):

chính nước ngoài (Tiêu đề, ISBN) refe rences BookTitle (Tiêu đề, ISBN)

+3

Cảm ơn! Cuối cùng tôi đã vượt qua lỗi ngu ngốc đó. [Làm thế nào quan trọng là thứ tự của các cột trong chỉ mục?] (Https://stackoverflow.com/questions/2292662/how-important-is-the-order-of-columns-in-indexes) giải thích lý do tại sao thứ tự quan trọng. – Darsstar

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