/ / Zastosowanie klucza podstawowego jako klucza obcego w tabeli kluczy obcych - mysql, sql, klucze obce, schemat, klucz podstawowy

Użycie klucza podstawowego jako klucza obcego w tabeli klucza obcego - mysql, sql, klucze obce, schemat, klucz podstawowy

To może wydawać się mylące lub proste, ale ...

Jeśli użyję klucza obcego z tabeli B w tabeli A, która ma osobny klucz podstawowy. Czy ja potrzeba zawrzeć klucz podstawowy tabeli A jako klucz obcy w tabeli B?

Dzięki!

================================================== ======================

EDYTOWAĆ:

Dobra, pozwól mi trochę wyjaśnić moje pytanie.

PRZYKŁAD

W powyższym przypadku powinien Używam Taco_ID jako FK w tabeli 2? Czy jest to całkowicie niepotrzebne?

Odpowiedzi:

1 dla odpowiedzi № 1

Ogólnie rzecz biorąc, zwykle nie tworzysz kluczy obcychdwukierunkowo tak. Jeśli to zrobisz, oznacza to, że dwie tabele istnieją w relacji 1 do 1: Każde taco ma typ, a każdy typ taco może być używany tylko przez jedno taco. Jeśli masz taką relację, to naprawdę nie ma powodu, aby mieć je w osobnych tabelach, mogą to być dodatkowe kolumny w tej samej tabeli.

Zwykle klucze obce są używane w relacjach jeden do wielu lub wiele do wielu. Relacja 1-do-wielu byłaby, gdyby wiele różnych tacos mogło być tego samego typu. Każdy z nich ma Taco_Type_ID klucz obcy.

W przypadku relacji wiele do wielu zwykle używasz osobnej tabeli relacji.

CREATE TABLE Taco_Types (
Taco_ID INT, -- FK to Table1.Taco_ID
Taco_Type_ID INT, -- FK to Table2.Taco_Type_ID
PRIMARY KEY (Taco_ID, Taco_Type_ID)
);

0 dla odpowiedzi nr 2

klucze obce i klucze podstawowe są CZASAMIpowiązane, ale nie zawsze. Klucz obcy w tabeli dosłownie oznacza po prostu „jakakolwiek wartość w tym polu MUSI istnieć w tej drugiej tabeli nad ---> tutaj”. To, czy ta wartość jest PK, czy nie w tej innej tabeli, nie ma znaczenia - po prostu musi istnieć i musi być unikalne. To może pasować do rachunku za bycie kluczem podstawowym, ale bycie podstawowym nie jest wymagane.

Możesz mieć złożone klucze obce, np. w (głupiej) książce adresowej stolik podrzędny, w którym podajesz numery telefonów danej osoby, MUSI być wpisany (firstname, lastname), ale napotyka to na problem „ok, do którego John Smith należy ten numer?”.


0 dla odpowiedzi № 3

W większości baz danych odniesienia do kluczy obcych muszą dotyczyć kluczy podstawowych lub kluczy unikalnych (i NULLs są dozwolone). MySQL zaleca to, ale nie wymaga tego:

Jednak system nie wymuszaza wymóg, aby przywoływane kolumny były UNIKALNE lub zadeklarowane NIE ZERO. Obsługa odwołań do kluczy obcych do nietypowych kluczy lub kluczy zawierające wartości NULL nie są dobrze zdefiniowane dla operacji takich jak AKTUALIZUJ lub USUŃ KASKADĘ. Zaleca się używanie tego klucza obcego odnoszą się tylko do kluczy UNIKALNYCH (w tym PODSTAWOWYCH) i NIE NULL.

Czy potrzebujesz odwoływać się do kluczy podstawowych dlarelacja klucza obcego? Po pierwsze, nie trzeba nawet deklarować relacji klucza obcego. Myślę, że są one ważne, ponieważ pozwalają bazie danych zachować spójność referencyjną. Ale nie są one wymagane. Nie ma też semantycznej różnicy w zapytaniach, w zależności od obecności klucze obce (na przykład NATURAL JOIN nie korzysta z nich). Optymalizacja może wykorzystać zadeklarowany związek.

Po drugie, jeśli zamierzasz zadeklarować klucz obcy, zaleciłbym użycie klucza podstawowego tabeli, do której istnieje odwołanie. Jest to w końcu jeden z głównych powodów posiadania kluczy podstawowych.