Memahami Foreign Keys di SQL Server
Saat merancang basis data relasional, sangat penting untuk membangun hubungan antar tabel untuk menjaga integritas data. Salah satu cara untuk mencapai ini adalah melalui penggunaan foreign keys. Foreign key di SQL Server adalah sebuah kolom (atau kumpulan kolom) di satu tabel yang secara unik mengidentifikasi sebuah baris di tabel lain. Jika Anda berasal dari sistem basis data lain, seperti PostgreSQL, Anda mungkin menemukan beberapa perbedaan dalam sintaks dan implementasi di SQL Server, yang dapat menyebabkan kebingungan.
Masalah: Membuat Foreign Key
Dalam skenario yang diberikan, ada upaya untuk membuat tiga tabel: exams
, question_bank
, dan answer_bank
. Tujuannya adalah untuk membuat foreign key di question_bank
yang merujuk ke tabel exams
. Namun, terjadi kesalahan saat menjalankan kode SQL. Pesan kunci dari kesalahan tersebut adalah:
Msg 8139, Level 16, State 0, Line 9 Jumlah kolom referensi di foreign key berbeda dari jumlah kolom yang direferensikan, tabel ‘question_bank’.
Ini menunjukkan bahwa ada ketidaksesuaian dalam definisi foreign key.
Solusi: Menentukan Foreign Key dengan Benar
Langkah 1: Tinjau Definisi Tabel
Mari kita lihat lebih dekat bagaimana cara mengatur foreign key dengan benar di tabel question_bank
.
Setup Tabel Saat Ini
SQL asli membuat tabel question_bank
seperti ini:
create table question_bank
(
question_id uniqueidentifier primary key,
question_exam_id uniqueidentifier not null,
question_text varchar(1024) not null,
question_point_value decimal,
constraint question_exam_id foreign key references exams(exam_id)
);
Foreign key ini dimaksudkan untuk merujuk ke exam_id
dari tabel exams
, tetapi kurang memiliki sintaks dan struktur yang tepat.
Langkah 2: Memperbarui Definisi Foreign Key
Untuk mendefinisikan hubungan foreign key dengan benar, tentukan bagaimana kolom foreign key (question_exam_id
) berhubungan dengan primary key di tabel yang direferensikan (exam_id
):
create table question_bank
(
question_id uniqueidentifier primary key,
question_exam_id uniqueidentifier not null,
question_text varchar(1024) not null,
question_point_value decimal,
constraint fk_questionbank_exams foreign key (question_exam_id) references exams (exam_id)
);
Perubahan Kunci:
- Tentukan nama foreign key: Merupakan praktik yang baik untuk memberikan nama pada constraint foreign key (misalnya,
fk_questionbank_exams
) untuk kejelasan. - Referensi kolom foreign key dengan benar: Pastikan bahwa foreign key merujuk pada kolom yang benar di tabel yang direferensikan.
Langkah 3: Menerapkan Perubahan
Sekarang, Anda dapat menghapus tabel question_bank
yang ada (jika ada) dan membuatnya kembali dengan definisi foreign key yang sudah diperbaiki menggunakan:
drop table if exists question_bank;
create table question_bank
(
question_id uniqueidentifier primary key,
question_exam_id uniqueidentifier not null,
question_text varchar(1024) not null,
question_point_value decimal,
constraint fk_questionbank_exams foreign key (question_exam_id) references exams (exam_id)
);
Kesimpulan
Mengatur foreign keys di SQL Server adalah langkah penting dalam memastikan integritas data dan membangun hubungan antar tabel. Dengan mendefinisikan constraint foreign key dengan hati-hati dan memperbaiki masalah sintaks, Anda dapat membuat desain basis data yang kuat dan efisien.
Jika Anda mengalami kesalahan, selalu periksa definisi foreign key untuk memastikan bahwa kolom referensi sesuai dengan kolom yang direferensikan. Dengan panduan ini, Anda seharusnya siap untuk mengimplementasikan foreign key dengan sukses di basis data SQL Server Anda.