Mengapa kendala diterapkan dalam Database? Apakah tidak akan lebih fleksibel untuk memasukkannya ke dalam kode?
Saya membaca buku pemula tentang mengimplementasikan database, jadi saya meminta ini sebagai pemula. Katakanlah saya telah mendesain database, termasuk model entitas ini:
entity type | sub-types
----------------+--------------------------------------------
Person | Employee, Student, ...
Student | Graduate, Undergraduate, ...
Employee | Teacher, Administrator, ...
Kendala saat ini:
- Orang yang terdaftar pada sistem hanya dapat menjadi Siswa atau Karyawan.
- Entitas pribadi memerlukan keunikan bilangan sosial, yang kami anggap setiap orang hanya memiliki satu nomor unik (alias, kunci utama yang cukup bagus ). (lihat # 1)
Kemudian kami memutuskan untuk menghapus nomor 1: Jika suatu hari perguruan tinggi memutuskan bahwa Teacher
( Employee
sub-tipe) dapat juga Student
, mengambil kursus di waktu luang mereka, jauh lebih sulit untuk mengubah desain basis data yang dapat memiliki ribuan, jutaan, miliaran, zillions entri daripada hanya mengubah logika dalam kode: hanya bagian yang tidak memungkinkan seseorang didaftarkan baik sebagai siswa dan karyawan.
(Ini sangat mustahil tetapi saya tidak bisa memikirkan hal lain saat ini. Rupanya itu mungkin).
Mengapa kita peduli dengan aturan bisnis dalam desain database daripada dalam kode?
# 1: Sebuah catatan 7 tahun kemudian, contoh kehidupan nyata:
Saya telah melihat pemerintah di mana karena kesalahan, SSN yang dikeluarkan digandakan: banyak orang, SSN yang sama. Mereka yang merancang DB asli pasti membuat kesalahan dengan tidak menerapkan kendala keunikan ini dalam database. (dan kemudian bug dalam aplikasi asli? beberapa aplikasi menggunakan database bersama dan tidak menyetujui tempat untuk meletakkan, memeriksa dan menegakkan batasan? ...).
Bug ini akan terus hidup dalam sistem dan semua sistem yang dikembangkan setelah itu bergantung pada database sistem asli itu, selama bertahun-tahun yang akan datang. Membaca jawaban di sini saya belajar menerapkan semua kendala, sebanyak mungkin dari mereka, dengan bijak (tidak secara membabi buta) dalam database untuk mewakili dunia fisik nyata di luar sana sebaik yang saya bisa.