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)