Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Cara membuat Batasan Kunci Asing pada Beberapa Kolom di SQL Server - Tutorial SQL Server / TSQL Bagian 67

Skenario:

Anda bekerja sebagai pengembang SQL Server, Anda perlu membuat tabel dbo.Pelanggan dengan kunci primer komposit dengan menggunakan kolom FName dan SSN. Setelah Anda selesai membuat kunci utama di tabel dbo.Pelanggan, Anda perlu membuat tabel kedua dbo.Pesanan dan membuat batasan kunci asing dengan menggunakan kolom Kunci Utama.

Solusi:

Mari kita buat tabel dbo.Customer dengan kunci utama komposit dengan menggunakan skrip di bawah ini.

USE YourDatabaseName
GO

CREATE TABLE dbo.Customer (
    Customerid INT Identity(1,1)
    ,FName VARCHAR(100) Not Null
    ,LName VARCHAR(100)
    ,SSN VARCHAR(10) Not Null,
    Constraint Pk_FName_SSN Primary Key (FName,SSN)
    )




Perhatikan bahwa kita telah menggunakan Constraint Constraint_Name Primary Key(Column1, Column2) seperti yang disorot dalam warna hijau untuk membuat Composite Primary Key.
Mari kita buat dbo.Orders tabel dengan menggunakan skrip di bawah ini.

CREATE TABLE dbo.Orders (
    OrderId INT Identity(1, 1)
    ,OrderitemName VARCHAR(50)
    ,OrderItemAmt INT
    ,FirstName VARCHAR(100),
     SSN VARCHAR(10) Not Null,
     Constraint Fk_Order_Customer_FName_SSN 
     FOREIGN KEY (FirstName,SSN) REFERENCES dbo.Customer(FName,SSN)
    )




Untuk membuat Batasan Kunci Asing dengan banyak kolom, Anda akan menggunakan skrip yang disorot dengan warna hijau. Anda akan mengatakan Constraint Constraint_Name Foreign Key(Column1,Column2) Referensi dbo.PrimaryKeyTable(PrimaryKeyColumn1,PrimaryKeyColumn2)
Anda dapat melihat bahwa Dalam dbo.Orders, saya memiliki kolom FirstName, bukan FName yang saya miliki di tabel dbo.Customer. Artinya Anda tidak harus memiliki nama kolom yang sama di kedua tabel saat Anda membuat referensi kunci asing.

Mari kita sisipkan catatan di setiap tabel dan lihat apakah semuanya berfungsi dengan baik dengan Kunci Asing Batasan.
     INSERT INTO dbo.Customer 
    (FName, LName,SSN)
     values
    ('Aamir','Shahzad','000-000-01')

    INSERT INTO dbo.Orders
    (OrderItemName,OrderItemAmt,FirstName,SSN)
    values ('TV',1,'Aamir','000-000-01')
 
 Catatan berhasil dimasukkan. Mari kita verifikasi dengan menggunakan Select query
Cara membuat Batasan Kunci Asing pada Beberapa Kolom di Tabel SQL Server


Mari kita coba memasukkan nilai di dbo.Orders yang tidak ada di dbo.Customer. Itu harus melalui kami sebagai kesalahan karena batasan Kunci Asing.
    INSERT INTO dbo.Orders
    (OrderItemName,OrderItemAmt,FirstName,SSN)
    values ('TV',1,'Aamir','000-000-02')

Karena nilai SSN yang disorot tidak ada di dbo.Customer, kami mendapatkan kesalahan di bawah ini.
Msg 547, Level 16, State 0, Line 30Pernyataan INSERT bertentangan dengan batasan FOREIGN KEY "Fk_Order_Customer_FName_SSN". Konflik terjadi di database "YourDatabaseName", tabel "dbo.Customer".Pernyataan telah dihentikan.


*** Urutan kolom harus sama dengan yang Anda miliki di kunci utama saat kita membuat batasan kunci asing. Jika saya mencoba membuat batasan kunci asing dengan urutan yang berbeda, saya akan mendapatkan kesalahan di bawah ini.
    CREATE TABLE dbo.Orders (
    OrderId INT Identity(1, 1)
    ,OrderitemName VARCHAR(50)
    ,OrderItemAmt INT
    ,FirstName VARCHAR(100),
     SSN VARCHAR(10) Not Null,
     Constraint Fk_Order_Customer_FName_SSN 
     FOREIGN KEY (SSN,FirstName) REFERENCES dbo.Customer(SSN,FName)
    )
 
 Pesan 1776, Level 16, Status 0, Baris 13Tidak ada kunci utama atau kandidat dalam tabel referensi 'dbo.Pelanggan' yang cocok dengan daftar kolom referensi di kunci asing 'Fk_Order_Customer_FName_SSN'.Pesan 1750, Level 16, Status 0, Baris 13Tidak dapat membuat batasan atau indeks. Lihat kesalahan sebelumnya.


Demo Video :Cara membuat Batasan Kunci Asing pada Beberapa Kolom di SQL Server







  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dapatkan hari terakhir dalam sebulan di SQL

  2. SQL Server Ekspresi reguler di T-SQL

  3. Hasil SSMS ke Kotak - CRLF tidak disimpan dalam salin/tempel - ada teknik yang lebih baik?

  4. Hitung Selisih Waktu Antara Dua Baris

  5. Pemeriksaan Kesehatan SQL Server Proaktif, Bagian 5:Statistik Tunggu