sql >> Database teknologi >  >> RDS >> Sqlserver

SQL Server 2016:Opret et forhold

Du kan oprette en relation mellem tabeller ved at bruge GUI- eller SQL-scriptet. Her demonstrerer jeg begge metoder.

I relationelt databasedesign, et relation er, hvor to eller flere tabeller er knyttet sammen, fordi de indeholder relaterede data. Dette gør det muligt for brugere at køre forespørgsler efter relaterede data på tværs af flere tabeller.

Her vil vi skabe følgende relationer.

Metoden

Sådan gør vi det:

  • Vi bruger SQL for at oprette albums tabel og én relation.
  • Vi bruger GUI at skabe den anden relation.

På den måde kan du se begge metoder til at skabe et forhold.

Vi behøver kun at oprette én tabel, fordi vi allerede har oprettet to af disse tabeller tidligere i denne øvelse ( Kunstnerne tabellen via GUI og genrerne tabel ved hjælp af SQL).

Opret et forhold ved hjælp af SQL

Åbn et nyt forespørgselsvindue i SSMS og kør følgende kode:

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,
  GenreId int NOT NULL
  
  CONSTRAINT FK_Albums_Artists FOREIGN KEY (ArtistId)     
    REFERENCES dbo.Artists (ArtistId)     
    ON DELETE NO ACTION    
    ON UPDATE NO ACTION    
);

Den første del af denne sætning opretter tabellen.

Den sidste del definerer forholdet. Denne del:

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

De første to linjer skaber forholdet. De skaber en fremmednøgle-begrænsning mellem Albums.ArtistId kolonnen og Artists.ArtistId kolonne.

De sidste to linjer angiver, hvad SQL Server skal gøre, hvis nogen forsøger at slette eller opdatere en overordnet post, der refereres til af en post i den underordnede tabel. I dette tilfælde NO ACTION betyder, at sletningen/opdateringen ikke fortsætter. Brugeren får bare en fejl.

Du kan ændre dette til ON DELETE CASCADE hvis du vil være i stand til at slette forælderen og barnet på én gang (dvs. sletningen vil kaskade fra forælderen til barnet). Den samme logik gælder for opdateringer ved at bruge ON UPDATE CASADE .

NO ACTION er standardværdien, så vi kunne have undværet de sidste to linjer kode. Jeg inkluderede det dog, fordi det er en vigtig faktor at tænke på, når du opretter begrænsninger for fremmednøgle.

Hvad er en fremmednøglebegrænsning?

En fremmednøglebegrænsning definerer en relation mellem denne tabel og en anden tabel. Når du opretter en fremmednøglebegrænsning, opretter du den mod en specifik kolonne i underordnet tabel, for at referere til en specifik kolonne i overordnet tabel.

Dette gør kolonnen i den underordnede tabel til en fremmednøgle . Begrænsningen sikrer, at enhver værdi, der går ind i denne (fremmednøgle) kolonne, svarer til en værdi i den primære nøglekolonne i den overordnede tabel. Hvis nogen forsøger at indtaste en værdi, der ikke svarer til en værdi i den overordnede tabels primære nøglekolonne, vil SQL Server give en fejl.

Dette hjælper med at håndhæve referentiel integritet. Det forhindrer os i at have forældreløse optegnelser (underordnede optegnelser, der ikke har nogen forælder). Eller i vores eksempel albums, der ikke er knyttet til nogen kunstner.

Opret et forhold via GUI

Nu vil vi skabe den anden relation via SQL Server Management Studio's GUI.

Det ville have været nemmere at inkludere dette i ovenstående script, men jeg ville gerne demonstrere begge metoder til at skabe et forhold.

  1. Åbn underordnet tabel i tabeldesigneren

    Højreklik på den underordnede tabel (vores nyoprettede album). tabel) og vælg Design fra kontekstmenuen.

    Hvis du ikke kan se din nyoprettede tabel i objektbrowseren, skal du sandsynligvis opdatere objektbrowseren.

    Højreklik på Tabeller node og vælg Opdater .

  2. Åbn dialogboksen Foreign Key Relationships

    Vælg Tabeldesigner> Relationer... fra topmenuen.

  3. Tilføj forholdet

    Dialogen Foreign Key Relations vil vise dig eventuelle eksisterende relationer for tabellen. Vi kan se forholdet, som vi etablerede lige før, da vi oprettede tabellen.

    Klik på Tilføj for at tilføje endnu et forhold.

  4. Vælg specifikation for tabeller og kolonner

    En ny relation vises over den anden i det valgte forhold liste med navnet FK_Albums_Albums .

    For at sikre, at den nye relation er valgt, skal du klikke på Tabell- og kolonnespecifikation i højre rude. En ellipse vises til højre for ejendommen.

    Klik på ellipserne (... ) for at starte dialogboksen Tabeller og kolonner.

  5. Dialogboksen Tabeller og kolonner

    Her vælger du primærnøgletabellen i venstre rude og fremmednøgletabellen til højre.

    • Under Tabel med primær nøgle: vælg Genrer som tabellen og GenreId som kolonnen.
    • Under Tabel med fremmednøgler: vælg Albums som tabellen og GenreId som kolonnen.

    Klik på OK .

    SQL Server vil foreslå et navn til relationen. Du kan redigere dette, hvis du ønsker det. Ellers lad det være som det er.

  6. Forholdet

    Dit forhold vil nu blive vist korrekt i dialogboksen Foreign Key Relationships.

    Klik på Luk .

  7. Gem forholdet

    Dit forhold bliver ikke gemt, før du gemmer bordet. Når du gemmer bordet, vil du sandsynligvis få en advarsel om, at to tabeller bliver gemt. Dette kan forventes, da forholdet påvirker to tabeller.

    Klik på Ja for at gemme begge tabeller.

    Hvis du vælger Tabeldesigner> Relationer... for den overordnede tabel vil du også se forholdet der.


  1. Sådan går du gennem et mysql-resultatsæt

  2. Oracle:Hvordan finder man ud af, om der er en afventende transaktion?

  3. Rekursiv underforespørgsel med sortering

  4. SQL LocalDB vs SQL Server CE