Mapping Inheritance pada Object Relational Mapping (ORM)

Database relasional tidak selalu mendukung inheritance (warisan), memaksa anda untuk memetakan struktur warisan dalam skema objek Anda ke skema data Anda. Konsep warisan menyebabkan beberapa masalah ketika menyimpan objek ke dalam DB relasional. Bagaimana mengatur atribut mewarisi dalam model data Anda? Ada tiga solusi utama untuk warisan pemetaan ke dalam database relasional. Teknik-teknik ini:
  • Map entire class hierarchy to a single table 
  • Map each concrete class to its own table 
  • Map each class to its own table

Diagram pada Gambar 3 menggambarkan tiga kelas - Person, adalah abstract class, dan dua concrete classes, Karyawan dan Pelanggan. Karena Person yang abstrak, namanya akan ditampilkan dalam huruf miring.

Map entire class hierarchy to a single table

Atribut dari semua kelas disimpan dalam tabel Person. Sebuah strategi penamaan tabel yng baik adalah dengan menggunakan nama kelas hirarki, dalam cara yang sangat mudah. Nama tabel biasanya sebagai kelas induk. Sebuat atribut tambahan yang ditambahkan untuk menunjukan tipe dari Person. Dua kolom telah ditambahkan ke table - PersonPOID dan PersonType. Kolom pertama adalah kunci utama (Primary Key) dan kolom kedua adalah kode yang menunjukkan apaka orang tersebut adalah pelanggan, karyawan, atau mungkin keduanya. PersonPOID adalah persistent object identifier (POID), sering hanya disebut object identifier (OID), yang merupakan surrogate key.

Pendekatan ini sangat sederhana dan memungkinkan seseorang untuk dengan mudah menambahkan kelas baru. Karena hanya ada satu tabel, tidak ada alasan apapun untuk menggabungkan data query. Kurangnya tabel yang bergabung biasanya menunjukkan pengambilan data lebih efisien.
Namun, tidak semua atribut yang relevan untuk semua Person types. Hal ini dapat mengakibatkan banya null atau nilai-nilat atribut yng kosong dalam tabel database. Efek ini akan menyia-nyiakan ruang database. Coupling meningkat antara hirarki kelas dan table. Hal ini tidak diinginkan sebagai perubahan dalam satu kelas yang dapat mempengaruhi kelas-kelas lain dalam hirarki. Tabel yang dihasilkan mungkin tidak sesuai dengan praktik terbaik di dalam hal normalisasi database.

Map each concrete class to a table

Dengan pendekatan ini, tabel dibuat untuk setiap concrete class, masing-masing table termasuk atribut dilaksanakan oleh kelas dan atribut yang diwariskan. Gambar berikut menggambarkan model data fisik untuk kelas hirarki yang telah dibahas di atas ketika pendekatan ini diambil. Ada tabel sesuai dengan masing-masing Costumer dan kelas karyawan karena mere concrete, objek yang instant dari mereka, tetapi tidak bagi Person, karena abstrak. Setiap tabel ditugaskan primary key-nya sendiri, costumerPOID dan employeePOID masing-masing.

Keuntungan metode ini adalah kinerja yang baik dalam hal mengakses data sebuah objek tunggal. Namun, ketika sebuah perubahan kelas, hal itu tidak hanya akan diperlukan untuk mengubah tabel terkait, tetapi juga tabel yang sesuai dengan anak kelasnya.

Map each class to its own table

Berikut ini adalah strategi Anda untuk membuat satu tabel per kelas, dengan satu kolom per atribut bisnis dan informasi identifikasi yang diperlukan. Gambar berikut ini menggambarkan model data fisik untuk kelas hirarki contoh di atas bila masing-masing kelas dipetakan ke tabel sendiri. Data untuk kelas Costumer disimpan dalam dua tabel, Costumer dan Person. Oleh karena itu untuk mengambil data ini, Anda akan perlu untuk menggabungkan dua tabel. Penentuan key sangat menarik. Perhatikan personPOID bagaimana digunakan sebagai primary key untuk semua tabel. Untuk tabel Costumer dan Employee personPOID adalah primary key dan foreign key yang digunakan untuk menjaga hubungan ke tabel Person.
Setiap kelas memiliki tabel yang terkait dalam database. Ada pemetaan langsung antara kelas-kelas dan tabel-tabel. Dengan metode ini, mudah untuk menambahkan atau memodifikasi subclass atau untuk memodifikasi kelas dasar. Pemetaan one-to-one membuat pendekatan ini mudah dimengerti. Akses data dalam hal membaca dan menulis dapat menjadi lambat karena adanya tabel yang lebih terlibat. Tabel-tabel yang digabungkan mungkin diperlukan untuk melakukan operasi data terkait.