sql >> Database >  >> RDS >> Sqlserver

SQL Server 2016:een relatie maken

U kunt een relatie tussen tabellen maken met behulp van de GUI of het SQL-script. Hier demonstreer ik beide methoden.

Bij relationeel databaseontwerp is een relatie is waar twee of meer tabellen aan elkaar zijn gekoppeld omdat ze gerelateerde gegevens bevatten. Hierdoor kunnen gebruikers query's uitvoeren voor gerelateerde gegevens in meerdere tabellen.

Hier zullen we de volgende relaties creëren.

De methode

Hier is hoe we het doen:

  • We gebruiken SQL om de Albums . te maken tafel en één relatie.
  • We gebruiken de GUI om de andere relatie te creëren.

Op die manier krijg je beide manieren te zien om een ​​relatie op te bouwen.

We hoeven maar één tabel te maken omdat we al twee van deze tabellen eerder in deze tutorial hebben gemaakt (de Artiesten tabel via de GUI en de Genres tabel met SQL).

Een relatie maken met SQL

Open een nieuw queryvenster in SSMS en voer de volgende code uit:

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    
);

Het eerste deel van dat statement maakt de tabel.

Het laatste deel definieert de relatie. Dit deel:

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

De eerste twee regels creëren de relatie. Ze creëren een externe sleutelbeperking tussen de Albums.ArtistId kolom en de Artists.ArtistId kolom.

De laatste twee regels geven aan wat SQL Server moet doen als iemand probeert een bovenliggende record te verwijderen of bij te werken waarnaar wordt verwezen door een record in de onderliggende tabel. In dit geval NO ACTION betekent dat het verwijderen/bijwerken niet doorgaat. De gebruiker krijgt alleen een foutmelding.

Je zou dit kunnen veranderen in ON DELETE CASCADE als u de ouder en het kind in één keer wilt kunnen verwijderen (d.w.z. het verwijderen gaat van de ouder naar het kind). Dezelfde logica is van toepassing op updates, door gebruik te maken van ON UPDATE CASADE .

NO ACTION is de standaardwaarde, dus we hadden het zonder die laatste twee regels code kunnen doen. Ik heb het echter toegevoegd, omdat het een belangrijke factor is om over na te denken bij het maken van externe sleutelbeperkingen.

Wat is een beperking voor een externe sleutel?

Een buitenlandse sleutelbeperking definieert een relatie tussen deze tabel en een andere tabel. Wanneer u een externe sleutelbeperking maakt, maakt u deze tegen een specifieke kolom in de child tabel, om te verwijzen naar een specifieke kolom in ouder tafel.

Dit maakt de kolom in de onderliggende tabel een vreemde sleutel . De beperking zorgt ervoor dat elke waarde die in deze (vreemde sleutel) kolom gaat, overeenkomt met een waarde in de primaire sleutelkolom van de bovenliggende tabel. Als iemand een waarde probeert in te voeren die niet overeenkomt met een waarde in de primaire sleutelkolom van de bovenliggende tabel, geeft SQL Server een fout.

Dit helpt bij het afdwingen van referentiële integriteit. Het voorkomt dat we verweesde records hebben (onderliggende records die geen bovenliggende records hebben). Of in ons voorbeeld albums die niet aan een artiest zijn gekoppeld.

Een relatie maken via de GUI

Nu gaan we de andere relatie maken via de GUI van SQL Server Management Studio.

Het zou gemakkelijker zijn geweest om dit in het bovenstaande script op te nemen, maar ik wilde beide methoden voor het creëren van een relatie demonstreren.

  1. Open de onderliggende tabel in de tabelontwerper

    Klik met de rechtermuisknop op de onderliggende tabel (onze nieuw gemaakte Albums tabel) en selecteer Ontwerp vanuit het contextmenu.

    Als u uw nieuw gemaakte tabel niet kunt zien in de Objectbrowser, moet u waarschijnlijk de Objectbrowser vernieuwen.

    Klik met de rechtermuisknop op de Tabellen knooppunt en selecteer Vernieuwen .

  2. Open het dialoogvenster Externe sleutelrelaties

    Selecteer Tabelontwerper> Relaties... uit het hoofdmenu.

  3. De relatie toevoegen

    Het dialoogvenster Externe-sleutelrelaties toont u alle bestaande relaties voor de tabel. We kunnen de relatie zien die we net daarvoor hebben vastgesteld, toen we de tabel maakten.

    Klik op Toevoegen om nog een relatie toe te voegen.

  4. Specificatie tabellen en kolommen selecteren

    Er verschijnt een nieuwe relatie boven de andere in de Geselecteerde relatie lijst met de naam FK_Albums_Albums .

    Zorg ervoor dat de nieuwe relatie is geselecteerd en klik op Specificatie tabellen en kolommen in het rechterdeelvenster. Rechts van de eigenschap verschijnt een ellips.

    Klik op de weglatingstekens (... ) om het dialoogvenster Tabellen en kolommen te openen.

  5. Het dialoogvenster Tabellen en kolommen

    Hier selecteert u de primaire-sleuteltabel in het linkerdeelvenster en de externe-sleuteltabel aan de rechterkant.

    • Onder Primaire sleuteltabel: selecteer Genres als de tabel en GenreId als de kolom.
    • Onder Tabel buitenlandse sleutels: selecteer Albums als de tabel en GenreId als de kolom.

    Klik op OK .

    SQL Server zal een naam voor de relatie voorstellen. U kunt dit desgewenst bewerken. Laat het anders zoals het is.

  6. De relatie

    Uw relatie wordt nu correct weergegeven in het dialoogvenster Foreign Key Relationships.

    Klik op Sluiten .

  7. De relatie redden

    Je relatie wordt pas gered als je de tafel opslaat. Wanneer u de tabel opslaat, krijgt u waarschijnlijk een waarschuwing dat er twee tabellen worden opgeslagen. Dit is te verwachten, aangezien de relatie twee tabellen beïnvloedt.

    Klik op Ja om beide tabellen op te slaan.

    Als u Tabelontwerper> Relaties... . selecteert voor de bovenliggende tabel zie je daar ook de relatie.


  1. PL/SQL print ref-cursor geretourneerd door een opgeslagen procedure

  2. Oracle SELECT TOP 10-records

  3. gem install:kan de native extensie van gem niet bouwen (kan header-bestanden niet vinden)

  4. ClusterControl - Geavanceerd back-upbeheer - mariabackup deel II