Katakanlah saya memiliki entitas bernama Perangkat Lunak dan dua sub-jenis FreeSoftware dan NonFreeSoftware. Entitas NonFreeSoftware memiliki atribut seperti tanggal pembelian, vendor, dll. Entitas FreeSoftware memiliki atribut seperti lisensi, url kode sumber, dll.
Jadi jika saya ingin memodelkan entitas lain, OperatingSystem, bagaimana saya harus melakukannya? Ada hubungan "adalah" dengan Perangkat Lunak tetapi hubungan "baik / atau" dengan FreeSoftware dan NonFreeSoftware.
Saya pikir saya kehilangan sesuatu dalam cara saya menganalisis hierarki ini.
Jawaban:
Cara untuk mengelola ini adalah bahwa sub-tipe Anda harus ditentukan oleh tipe-super (yaitu PK dari sub-tipe juga merupakan FK dari sub-tipe ke tipe-super.)
Tantangannya adalah memahami apakah sesuatu itu benar-benar eksklusif atau tidak. Atribut-atribut dari sub-tipe seharusnya hanya berlaku untuk sub-tipe tersebut, tetapi mungkin saja bahwa beberapa sub-tipe tersebut saling eksklusif dan beberapa tidak.
Jika Anda memiliki beberapa sub-tipe yang saling eksklusif, maka Anda dapat menggunakan atribut partisi pada tipe super untuk menunjukkan yang mana dari (dua atau lebih) sub-jenis yang saling eksklusif berlaku. Atribut partisi ini dapat digunakan dengan kendala atau pemicu untuk menegakkan eksklusivitas mutual.
Jika Anda memiliki sub-tipe yang tidak saling eksklusif, maka mereka dapat ada tanpa menggunakan atribut partisi apa pun.
Pertimbangkan model data ini:
Anda memiliki tiga tipe super, tetapi
FREE_SOFTWARE
danNON-FREE_SOFTWARE
tipe saling eksklusif, berdasarkanSOFTWARE.free_not_free
atribut partisi flag. Setiap perangkat lunak yang diberikan juga berpotensiOPERATING_SYSTEM
, terlepas dari apakah itu gratis atau tidak.sumber
Mengapa OperatingSystem menjadi entitas yang sepenuhnya baru? Itu harus berada di bawah Perangkat Lunak satu, karena memang seperti itu. Dan OS (jika sumber tertutup) akan memiliki tanggal pembelian, vendor, dll. Dan OS open source akan memiliki lisensi, URL kode sumber, dll.
Saya akan merekomendasikan hubungan dengan
SoftwareType
atau sesuatu di sepanjang garis itu. Saat itulah Anda dapat / harus menentukan apakah Perangkat Lunak adalah OS, atau aplikasi, atau jenis perangkat lunak apa pun yang Anda dukung.sumber