sql >> データベース >  >> RDS >> Sqlserver

SQL Server 2016:関係を作成する

    GUIまたはSQLスクリプトを使用して、テーブル間の関係を作成できます。ここでは、両方の方法を示します。

    リレーショナルデータベースの設計では、関係 2つ以上のテーブルに関連データが含まれているため、2つ以上のテーブルがリンクされている場所です。これにより、ユーザーは複数のテーブルにまたがる関連データのクエリを実行できます。

    ここでは、次の関係を作成します。

    方法

    方法は次のとおりです。

    • SQLを使用します アルバム を作成するには テーブルと1つの関係。
    • GUIを使用します 他の関係を作成します。

    そうすれば、関係を作成する両方の方法を見ることができます。

    このチュートリアルで以前にこれらのテーブルを2つ作成したので、1つのテーブルを作成するだけで済みます( Artists GUIおよび ジャンル を介したテーブル SQLを使用したテーブル)。

    SQLを使用して関係を作成する

    SSMSで新しいクエリウィンドウを開き、次のコードを実行します。

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

    そのステートメントの最初の部分でテーブルが作成されます。

    最後の部分は関係を定義します。この部分:

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

    最初の2行は関係を作成します。 Albums.ArtistId 間に外部キー制約を作成します 列と Artists.ArtistId 列。

    最後の2行は、子テーブルのレコードによって参照されている親レコードを誰かが削除または更新しようとした場合にSQLServerが実行する処理を指定します。この場合、NO ACTION 削除/更新が先に進まないことを意味します。ユーザーにはエラーが表示されます。

    これをON DELETE CASCADEに変更できます 親と子を一度に削除できるようにしたい場合(つまり、削除は親から子にカスケードされます)。 ON UPDATE CASADEを使用して、同じロジックを更新に適用します 。

    NO ACTION はデフォルト値であるため、最後の2行のコードがなくても実行できます。ただし、外部キー制約を作成するときに考慮することが重要な要素であるため、これを含めました。

    外部キー制約とは何ですか?

    外部キー制約 このテーブルと別のテーブルの間の関係を定義します。外部キー制約を作成するときは、の特定の列に対して外部キー制約を作成します。 テーブル、の特定の列を参照する テーブル。

    これにより、子テーブルの列が外部キーになります。 。この制約により、この(外部キー)列に入るすべての値が、親テーブルの主キー列の値に対応することが保証されます。親テーブルの主キー列の値と一致しない値を入力しようとすると、SQLServerはエラーをスローします。

    これは、参照整合性を強化するのに役立ちます。これにより、孤立したレコード(親を持たない子レコード)を作成できなくなります。または、この例では、どのアーティストにも関連付けられていないアルバムです。

    GUIを介して関係を作成する

    次に、SQL ServerMangementStudioのGUIを介して他の関係を作成します。

    上記のスクリプトにこれを含める方が簡単でしたが、関係を作成する両方の方法を示したかったのです。

    1. テーブルデザイナで子テーブルを開きます

      子テーブル(新しく作成されたアルバム)を右クリックします 表)を選択し、デザインを選択します コンテキストメニューから。

      新しく作成したテーブルがオブジェクトブラウザに表示されない場合は、オブジェクトブラウザを更新する必要があります。

      テーブルを右クリックします ノードを選択し、更新を選択します 。

    2. 外部キー関係ダイアログを開く

      テーブルデザイナ>リレーションシップ...を選択します トップメニューから。

    3. 関係を追加する

      [外部キー関係]ダイアログには、テーブルの既存の関係が表示されます。テーブルを作成した直前に確立した関係を確認できます。

      追加をクリックします 別の関係を追加します。

    4. テーブルと列の仕様を選択

      選択した関係 で、新しい関係が他の関係の上に表示されます FK_Albums_Albums という名前のリスト 。

      新しい関係が選択されていることを確認して、テーブルと列の仕様をクリックします。 右ペインにあります。プロパティの右側に省略記号が表示されます。

      省略記号( ... )をクリックします )[テーブルと列]ダイアログボックスを起動します。

    5. [テーブルと列]ダイアログボックス

      ここでは、左側のペインで主キーテーブルを選択し、右側で外部キーテーブルを選択します。

      • 主キーテーブルの下: ジャンルを選択します テーブルおよびGenreIdとして 列として。
      • 外部キーテーブルの下: アルバムを選択します テーブルおよびGenreIdとして 列として。

      OKをクリックします 。

      SQL Serverは、関係の名前を提案します。必要に応じてこれを編集できます。それ以外の場合は、そのままにしておきます。

    6. 関係

      これで、[外部キー関係]ダイアログボックスに関係が正しく表示されます。

      閉じるをクリックします 。

    7. 関係を保存する

      テーブルを保存するまで、関係は保存されません。テーブルを保存すると、2つのテーブルが保存されるという警告が表示される可能性があります。関係は2つのテーブルに影響するため、これは予想されることです。

      はいをクリックします 両方のテーブルを保存します。

      テーブルデザイナ>リレーションシップ...を選択した場合 親テーブルの場合は、そこに関係も表示されます。


    1. データベースからcsvファイルにテーブルをエクスポートします

    2. MySQLでのUUIDパフォーマンス?

    3. CXPACKET待機の詳細:歪んだ並列処理

    4. 事前入力されたデータベースはAPI28で機能せず、そのようなテーブル例外はスローされません