Berbagai jenis mobil adalah contoh masalah umum yang muncul berulang kali dalam pemodelan data. Ini disebut "generalisasi / spesialisasi" dalam pemodelan ER, dan "superclass / subclass" dalam pemodelan objek.
Pemodel objek menggunakan fitur warisan yang dibangun ke dalam model objek untuk menyelesaikan masalah dengan cukup mudah. Subclass hanya memperpanjang superclass.
Pemodel relasional dihadapkan pada suatu masalah. bagaimana cara mendesain tabel agar bisa meniru manfaat yang akan didapat dari warisan?
Teknik paling sederhana disebut pewarisan tabel tunggal . Data tentang semua jenis mobil dikelompokkan ke dalam satu tabel untuk mobil. Ada kolom, car_type, yang mengelompokkan semua mobil dari satu tipe. Tidak ada mobil yang dapat dimiliki lebih dari satu jenis. Jika kolom tidak relevan dengan, katakanlah, mobil listrik, kolom NULL akan ditinggalkan di baris yang berkaitan dengan mobil listrik.
Solusi sederhana ini bekerja dengan baik untuk kasus yang lebih kecil dan sederhana. Kehadiran banyak NULLs menambahkan sedikit ke overhead penyimpanan, dan sedikit untuk mengambil overhead. Pengembang mungkin harus belajar logika tiga nilai SQL jika tes boolean dilakukan pada kolom nullable. Ini bisa membingungkan pada awalnya, tetapi orang terbiasa dengannya.
Ada teknik lain, yang disebut pewarisan tabel kelas . Dalam desain ini, ada tabel terpisah untuk gas_car, electric_car, dan hybrid_car, selain tabel gabungan, mobil, untuk semuanya. Saat Anda menginginkan semua data tentang jenis mobil tertentu, Anda bergabung dengan tabel mobil dengan tabel khusus yang sesuai. Ada lebih sedikit NULL dalam desain ini, tetapi Anda lebih banyak bergabung. Teknik ini bekerja lebih baik dalam kasus yang lebih besar dan lebih kompleks.
Ada teknik ketiga yang disebut kunci primer bersama. Teknik ini sering digunakan bersamaan dengan pewarisan tabel kelas. Tabel khusus untuk subclass memiliki, sebagai kunci utama, salinan kunci utama dari entri yang sesuai dalam tabel mobil. Kolom id ini dapat dideklarasikan sebagai kunci primer dan kunci asing.
Ini melibatkan sedikit pemrograman tambahan ketika mobil baru akan ditambahkan, tetapi itu membuat sambungannya sederhana, mudah, dan cepat.
Superclasses dan subclass terjadi setiap saat di dunia nyata. Jangan takut. Tetapi lakukan uji desain awal Anda untuk kinerja. Jika upaya pertama Anda sederhana dan sehat, Anda dapat mengubahnya untuk mempercepatnya.