Praktik EER Diagram dan implementasi dengan fasilitas ORM Django (bag 1 dari 2)

Ini adalah proyek iseng, sembari mencatat praktik dari teori yang telah diajarkan pak Arif Djunaidy di kuliah Manajemen Data. Praktik EER diagram kali ini hanya membahas generalisasi-spesialisasi, yang merupakan pengejawantahan dari kata ‘Extended’ dalam Extended Entity Relationship. Berikut ini diagram EER hubungan generalisasi entitas Mahasiswa dengan spesialisasi MahasiswaSarjana dan MahasiswaPascasarjana.
EER Mahasiswa-Sarjana-Pascasarjana
Dari diagram di atas, dibuatlah models.py pada aplikasi Django (untuk detil mengenai Django dapat diikuti di tutorial official nya).

from django.db import models
JENIS_KELAMIN = ( 
    (0, 'Laki-laki'), 
    (1, 'Perempuan')
)
AGAMA = (
    (0, 'Tidak diketahui'),
    (1, 'Buddha'),
    (2, 'Hindu'),
    (3, 'Islam'),
    (4, 'Katolik'),
    (5, 'Konghucu'), #cmiiw
    (6, 'Kristen') 
) 
class Mahasiswa(models.Model): 
    nrp = models.CharField(max_length=10, primary_key=True)
    nama = models.CharField(max_length=64) 
    jenis_kelamin = models.PositiveSmallIntegerField(max_length=1, choices=JENIS_KELAMIN) 
    agama = models.PositiveSmallIntegerField(max_length=1, choices=AGAMA) 
    no_telp = models.CharField(max_length=16) 
    alamat_asal = models.TextField(max_length=2048) 
    alamat_surabaya = models.TextField(max_length=2048) 
    def __unicode__(self):
        return "[{0}|{1}]".format(self.nrp, self.nama)
    def kode_jurusan(self): 
        return self.nrp[:2]
    def kode_angkatan(self): 
        return self.nrp[2:4]
    """ TODO needs a complete enum for convenience """
    def kode_jenjang(self):
        return self.nrp[4:7] 
    def nomor_urut(self):
        return self.nrp[7:]

class MahasiswaSarjana(Mahasiswa):
    sekolah_asal = models.CharField(max_length=64) 
    nilai_matematika = models.FloatField() 
    nilai_kimia = models.FloatField() 
    nilai_fisika = models.FloatField() 
    nilai_biologi = models.FloatField() 
    nilai_bahasa_indonesia = models.FloatField() 

class MahasiswaPascasarjana(Mahasiswa): 
    pt_asal = models.CharField(max_length=128) 
    prodi_sarjana = models.CharField(max_length=64)
    ipk = models.FloatField() 
    tahun_lulus = models.PositiveSmallIntegerField() 
    nama_perusahaan = models.CharField(max_length=64) 
    alamat_perusahaan = models.TextField(max_length=2048) 
    no_telp_perusahaan = models.CharField(max_length=16)

jalankan ./manage.py sqlall $nama_aplikasi dan skrip SQL akan di-generate oleh Django.
posting bagian kedua akan membahas bagaimana jika sub-entitas tidak memiliki atribut samasekali.