Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

W tabeli odniesienia nie ma kluczy podstawowych ani kandydujących, które pasują do listy kolumn odniesienia w kluczu obcym

Klucze obce działają poprzez łączenie kolumny z unikalnym kluczem w innej tabeli, a ten unikalny klucz musi być zdefiniowany jako pewna forma unikalnego indeksu, czy to klucz podstawowy, czy inny unikalny indeks.

W tej chwili jedynym unikalnym indeksem, jaki masz, jest złożony indeks ISBN, Title który jest twoim kluczem podstawowym.

Dostępnych jest wiele opcji, w zależności od tego, co dokładnie zawiera BookTitle i jakie są w nim dane.

Zaryzykowałbym przypuszczenie, że numer ISBN jest unikalny dla każdego wiersza w tytule książki. Przy założeniu, że tak jest, zmień klucz podstawowy, aby był tylko na ISBN i zmień BookCopy tak, aby zamiast tytułu miał ISBN i dołącz do niego.

Jeśli musisz zachować klucz podstawowy jako ISBN, Title wtedy albo musisz zapisać numer ISBN w BookCopy, a także tytuł i klucz obcy w obu kolumnach, LUB musisz utworzyć unikalny indeks w BookTitle(Title) jako odrębny indeks.

Ogólnie rzecz biorąc, musisz upewnić się, że kolumna lub kolumny, które masz w swoich REFERENCES klauzula pasuje dokładnie do unikalnego indeksu w tabeli nadrzędnej:w twoim przypadku nie powiedzie się, ponieważ nie masz jednego unikalnego indeksu w Title sam.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 6 sposobów konwersji ciągu na wartość daty/godziny w SQL Server

  2. Użycie programu SQL Server sp_msforeachtable, aby wybrać tylko te tabele, które spełniają określone warunki

  3. ROUND() Przykłady w SQL Server

  4. Przywracanie SQL Server 2017

  5. Tworzenie niestandardowego obrazu dockera SQL Server na oficjalnym obrazie