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

Hubungan sql kunci utama komposit

Jika Anda memiliki komposit kunci utama, lalu semua batasan kunci asing yang mereferensikannya harus menggunakan semua kolom dari kunci primer komposit.

Jadi dalam kasus Anda - TableTwo harus referensi TableOne(ReportID, Date)

Satu-satunya cara untuk mengatasinya adalah dengan membuat UNIQUE INDEX di TableOne (ReportID) - maka Anda dapat membuat referensi kunci asing untuk batasan unik itu saja.

Tapi itu kemudian menimbulkan pertanyaan:mengapa tidak ReportID sendiri kunci utama, jika sudah unik (karena Anda dapat meletakkan UNIQUE INDEX di atasnya) dan NOT NULL (karena itu adalah bagian dari senyawa PK) ?

Langkah 1:buat UNIQUE INDEX :

CREATE UNIQUE NONCLUSTERED INDEX UIX_TableOne ON dbo.TableOne(ReportID);

Langkah 2:buat kunci asing dari TableTwo :

ALTER TABLE dbo.TableTwo
ADD CONSTRAINT FK_TableTwo_TableOne
FOREIGN KEY(ReportID) REFERENCES dbo.TableOne(ReportID)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Berapa ukuran yang Anda gunakan untuk varchar(MAX) dalam deklarasi parameter Anda?

  2. Klien dengan alamat IP tidak diizinkan untuk mengakses database server Azure SQL

  3. Peningkatan identitas melompat di database SQL Server

  4. Apa itu WAKTU STATISTIK di SQL Server?

  5. Hubungkan SQL Server ke SugarCRM