Saya membaca kesalahan desain database paling umum yang dibuat oleh pengembang Q&A di stackoverflow. Pada jawaban pertama ada ungkapan tentang arc eksklusif:
Busur eksklusif adalah kesalahan umum di mana sebuah tabel dibuat dengan dua atau lebih kunci asing di mana satu dan hanya satu saja yang bisa non-nol. Kesalahan besar. Untuk satu hal, mempertahankan integritas data menjadi jauh lebih sulit. Setelah semua, bahkan dengan integritas referensial, tidak ada yang mencegah dua atau lebih kunci asing ini ditetapkan (terlepas dari kendala pemeriksaan kompleks).
Saya benar-benar tidak mengerti mengapa busur eksklusif itu jahat. Mungkin saya tidak mengerti dasar-dasarnya. Apakah ada penjelasan bagus tentang busur eksklusif?
sumber
alter table mytable add constraint myconstraint check ((col1 is not null and col2 is null and col3 is null) or (col1 is null and col2 is not null and col3 is null) or (col1 is null and col2 is null and col3 is not null))
. Saya tidak suka busur eksklusif tetapi mereka dapat diberlakukan dengan batasan cek. Tentu saja kendala FK juga harus ada.Tidak ada yang jahat tentang busur eksklusif. Cukup menegakkan aturan bisnis terkait menggunakan kendala pemeriksaan. Sebagian besar sistem manajemen basis data utama mendukung kendala pemeriksaan (Oracle, SQL Server, PostgreSQL). Jika Anda menggunakan alat pemodelan data maka ada kemungkinan besar alat Anda akan secara otomatis menghasilkan kode untuk mengimplementasikan batasan pemeriksaan.
sumber
Busur eksklusif sangat berguna dalam desain konseptual atau logis. Itu tidak berarti bahwa Anda harus mengimplementasikannya. Dalam contoh sebelumnya, perancang dapat memutuskan untuk mengimplementasikan desain dengan tiga tabel. Satu untuk lokasi parkir, satu untuk karyawan dan satu untuk bengkel.
sumber