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

Utwórz relację w SQL Server 2017

Dowiedz się, jak utworzyć relację między dwiema tabelami w SQL Server.

W projekcie relacyjnej bazy danych powiązanie to miejsce, w którym co najmniej dwie tabele są połączone ze sobą, ponieważ zawierają powiązane dane. Umożliwia to użytkownikom uruchamianie zapytań o powiązane dane w wielu tabelach.

Ta część samouczka wyjaśnia, jak utworzyć następujące relacje:

Na tym diagramie są dwie zależności. Istnieje związek między Albums i Artists tabele i istnieje inny związek między Albums i Genres tabele.

Patrząc na ten diagram, widzimy, że jeden artysta mógł mieć wiele albumów. W tym przypadku wystarczy nam jeden wiersz zawierający nazwisko artysty, niezależnie od tego, ile ma albumów. Dzieje się tak, ponieważ możemy utworzyć rekord w Artists tabela z unikalnym ArtistId . Wszystkie albumy tego wykonawcy będą znajdować się w Albums tabeli i będą zawierać ten sam identyfikator wykonawcy we własnym ArtistId kolumna. W ten sposób możemy uruchomić zapytanie w obu tabelach i zwrócić nazwę wykonawcy oraz wszystkie wydane przez niego albumy. To jest korzyść z relacji.

Wcześniej stworzyliśmy bazę danych zawierającą powyższe trzy tabele. Kiedy to zrobiliśmy, stworzyliśmy również jedną z relacji przedstawionych na powyższym diagramie. Stworzyliśmy relację między Albums tabeli i Artists tabela (gdzie ArtistId kolumna Albums tabela odwołuje się do ArtistsId kolumna Artists tabeli).

Oto kod, który uruchomiliśmy, aby utworzyć tabele:

Podświetlony kod to część, która tworzy relację między Albums tabeli i Artists stół. Robi to poprzez ustawienie ArtistId kolumna Albums by odwołać się do ArtistId kolumna Artists tabela.

Bardziej technicznym sposobem powiedzenia tego jest to, że Albums.ArtistId staje się kluczem obcym Artists.ArtistId (który sam w sobie jest kluczem podstawowym tej tabeli). To jest ograniczenie klucza obcego.

Co to jest ograniczenie klucza obcego?

ograniczenie klucza obcego definiuje relację między tą tabelą a inną tabelą. Kiedy tworzysz ograniczenie klucza obcego, tworzysz je względem określonej kolumny w dziecko tabeli, aby odwoływać się do określonej kolumny w rodzicu tabela.

To sprawia, że ​​ta kolumna w tabeli podrzędnej jest kluczem obcym . Ograniczenie zapewnia, że ​​każda wartość, która trafia do tej kolumny (klucza obcego), odpowiada wartości w kolumnie klucza podstawowego tabeli nadrzędnej. Jeśli ktoś spróbuje wprowadzić wartość, która nie odpowiada wartości w kolumnie klucza podstawowego tabeli nadrzędnej, SQL Server zgłosi błąd.

Pomaga to wymusić integralność referencyjną. Uniemożliwia nam to osierocone rekordy (rekordy podrzędne, które nie mają rodzica). Lub w naszym przykładzie albumy, które nie są powiązane z żadnym wykonawcą.

Jeśli używasz narzędzia GUI do zarządzania bazą danych, takiego jak SSMS lub Azure Data Studio, relacja pojawi się pod Keys węzeł dla tabeli z kluczem obcym:

Zdekonstruujmy kod:

CONSTRAINT FK_Albums_Artists FOREIGN KEY (ArtistId)     
    REFERENCES dbo.Artists (ArtistId)     
    ON DELETE NO ACTION    
    ON UPDATE NO ACTION

Pierwsze dwie linie tworzą relację. Tworzą ograniczenie klucza obcego między Albums.ArtistId kolumna i Artists.ArtistId kolumna. W tym przypadku wywołujemy ograniczenie klucza obcego FK_Albums_Artists .

Ostatnie dwa wiersze określają, co powinien zrobić program SQL Server, jeśli ktoś próbuje usunąć lub zaktualizować rekord nadrzędny, do którego odwołuje się rekord w tabeli podrzędnej. W takim przypadku NO ACTION oznacza, że ​​usuwanie/aktualizacja nie będzie kontynuowana. Użytkownik po prostu otrzyma błąd.

Możesz to zmienić na ON DELETE CASCADE jeśli chcesz mieć możliwość usunięcia rodzica i dziecka za jednym razem (tj. usunięcie będzie kaskadowe od rodzica do dziecka). Ta sama logika dotyczy aktualizacji, używając ON UPDATE CASADE .

NO ACTION jest wartością domyślną, więc mogliśmy obejść się bez tych dwóch ostatnich wierszy kodu. Jednak uwzględniłem to, ponieważ jest to ważny czynnik, o którym należy pomyśleć podczas tworzenia ograniczeń kluczy obcych.

Dodaj relację do istniejącej tabeli

Poprzedni przykład tworzy relację w tym samym czasie, w którym tworzone są tabele. Może się jednak zdarzyć, że trzeba będzie dodać relację do istniejącej tabeli.

Dodajmy nową relację między Genres i Albums tabele.

Uruchom następujący kod:

USE Music;   
ALTER TABLE Albums
ADD CONSTRAINT FK_Albums_Genres FOREIGN KEY (GenreId)     
	REFERENCES dbo.Genres (GenreId)     
	ON DELETE NO ACTION    
	ON UPDATE NO ACTION
;

Tworzy to nowy klucz obcy w Albums stół. Powoduje to Albums.GenreId staje się kluczem obcym, który odwołuje się do Genres.GenreId .

Tak więc uruchomienie tej instrukcji spowoduje wyświetlenie nowego klucza obcego pod Kluczami węzeł:

Klucze obce jednokolumnowe

Klucze obce jednokolumnowe (takie jak ten powyżej) można również określić na poziomie kolumny. Więc inny sposób tworzenia Albums tabela i jej klucz obcy wygląda tak:

CREATE TABLE Albums (
  AlbumId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
  AlbumName nvarchar(255) NOT NULL,
  ReleaseDate date NOT NULL,
  ArtistId int NOT NULL
		REFERENCES Artists(ArtistId),
  GenreId int NOT NULL   
);

Ta metoda nie może być używana na ograniczeniach wielokolumnowych, więc w tym przypadku użyj składni z oryginalnego przykładu powyżej.

Wielokolumnowe klucze obce

W wielokolumnowym kluczu obcym dla klucza obcego używana jest więcej niż jedna kolumna. Jest to zwykle używane, gdy tabela nadrzędna używa wielu kolumn jako klucza podstawowego. Może tak być, jeśli tabela nadrzędna łączy wartości z dwóch kolumn, aby utworzyć unikalną wartość.

Wielokolumnowe klucze obce można tworzyć przy użyciu składni z oryginalnego przykładu powyżej. Po prostu dodaj każdą nazwę kolumny oddzieloną przecinkiem.

Jeśli więc wyobrazimy sobie, że Albums tabela ma również ArtistName kolumna (i że Artists tabela używa ArtistId i ArtistName jako klucz podstawowy), wielokolumnowy klucz obcy wyglądałby tak:

CONSTRAINT FK_Albums_Artists FOREIGN KEY (ArtistId, ArtistName)     
    REFERENCES dbo.Artists (ArtistId, ArtistName)

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak uzyskać wydajną obsługę zakleszczeń Sql Server w C# za pomocą ADO?

  2. Konsolidacja wystąpienia programu SQL Server za pomocą klastrowania i tworzenia stosów

  3. Jak zainstalować program SQL Server na komputerze Mac M1 (ARM64)

  4. Co to jest zaufane połączenie?

  5. zwraca wartość na pozycji z STRING_SPLIT w SQL Server 2016