Sangat menyenangkan bahwa Anda meluangkan waktu untuk memahami, mengklasifikasikan dan memodelkan data yang Anda hadapi karena, dari pengalaman pribadi saya, semua ini membuat seluruh proses pengembangan lebih mudah dan sangat fleksibel untuk perubahan di masa depan. Dan saya cukup yakin bahwa Anda juga sudah mengetahui hal ini.
Model data awal dan asumsi aturan bisnis
Saya mendefinisikan daftar aturan bisnis yang telah saya asumsikan setelah membaca pertanyaan Anda dan memeriksa dengan cermat diagram Anda, untuk menjelaskan pemahaman saya tentang spesifikasi Anda. Setelah mendefinisikan daftar tersebut, saya mendapatkan model data IDEF1X [1] yang saya putuskan untuk unggah sebagai dokumen .PDF di platform eksternal (Dropbox), karena karena formatnya model data ini tidak cocok dengan gambar yang disematkan. Kedua instrumen ini akan berguna sebagai referensi untuk beberapa poin penting yang saya sebutkan di bawah ini di bagian berjudul Aspek untuk diselesaikan agar dapat terus bergerak maju .
Pertama, ini ...
Karena hanya itu, pendahuluan, menganggapnya sebagai sarana membantu kami untuk mencapai model data akhir yang diinginkan.
Aturan bisnis yang diasumsikan
Model data awal tersebut berasal dari kumpulan aturan bisnis (disimpulkan dari pertanyaan Anda) yang akan saya sebutkan sebagai berikut:
Organisasi dan profil
Catatan yang Profile
saat ini dipahami sebagai sinonim untuk Person
.
- An
Organization
adalah teman satu-ke-banyak Profiles
.
- An
Organization
adalah teman satu-ke-banyak Organizations
.
- An
Organization
adalah anggota satu-ke-banyak Organizations
.
- A
Profile
adalah anggota satu-ke-banyakOrganizations
.
- A
Profile
adalah teman satu-ke-banyak Profiles
.
- A
Profile
adalah anggota satu-ke-banyak Profiles
.
Lokasi dan alamat
- Sebuah
Organization
memiliki satu-ke-banyak Locations
.
- A
Location
diklasifikasikan berdasarkan satu ke banyak LocationTypes
( hanya satu pada titik waktu tertentu).
- A
Location
mungkin memiliki satu-ke-banyak Addresses
( satu Physical
, satu untuk Shipping
, satu untuk Billing
, atau satu yang melayani semua tujuan tersebut, atau satu yang menggabungkan dua tujuan dan yang lain hanya melayani satu dari mereka).
Sebuah Address
dapat disimpan oleh satu-ke-banyak Profiles
atau, dengan kata lain, sebuah Profile
terus satu-ke-banyak Addresses
.
Sebuah spesifik Address
dapat digunakan oleh satu-ke-banyak Profiles
(melayani sebagai Physical
untuk satu Profile
, yang digunakan untuk Billing
oleh satu yang berbeda , dll). Jadi, sebuah Address
karya serupa untuk Locations
dan Profiles
.
- Jadi, seorang individu
Address
dapat, pada saat yang sama , bertipe Physical
, Shipping
dan Billing
.
Lokasi dan peran
- A
Location
membuka satu-ke-banyak Roles
.
- A
Role
dapat dilakukan dalam satu-ke-banyak Locations
.
- A
Profile
(setelah ditetapkan sebagai Member
a Organization
) dapat melakukan satu-ke-banyak Roles
, dalam satu-ke-banyak Locations
(tetapi hanya satu spesifik Role
di masing-masing Location
pada titik waktu tertentu, yaitu, tidak pernah dua atau lebih Roles
pada waktu yang sama ).
Aspek yang harus diselesaikan agar terus bergerak maju
Untuk terus maju dalam resolusi model data Anda, berikut adalah daftar poin yang relevan, setelah kami mengatasinya, akan membantu kami untuk mencapai tujuan ini:
Saya berasumsi bahwa istilah Profile
dalam konteks Anda memiliki makna yang serupa (atau sama) dengan Person
, tetapi mungkin sedikit berbeda. Dengan cara ini, akankah Anda mengatakan bahwa, dalam skenario Anda, entitas Organization
dan Person
merupakan subtipe Profile
?
Dapatkah Profile
(atau Person
) sendiri satu-ke-banyak EmailAddresses
, atau merupakan Profile
(atau Person
) tetap untuk tepat satu EmailAddress
?
Apakah Anda ingin memberikan kemungkinan untuk Organization
dihubungi melalui Telephone
dan Email
, atau Anda ingin membatasi itu hanya mungkin untuk Profile
(atau Person
)?
Saya berasumsi bahwa a Location
diperbaiki ke salah Address
satu tipe Physical
, apakah ini benar?
Apakah mungkin untuk Location
dibagikan oleh satu-ke-banyak berbeda Organizations
atau , jika tidak, Location
dapat dimiliki hanya oleh satuOrganization
?
Anda telah menyatakan melalui komentar bahwa fakta menjadi Member
dan a Friend
adalah sama. Seperti yang dapat Anda lihat dalam model data pendahuluan yang saya usulkan, saya mengikuti Anda spesifikasi asli dan menggambarkan semua kemungkinan kombinasi keanggotaan dan persahabatan antara Organization
dan Profile
(atau Person
) di entitas yang berbeda karena saya pikir itu dapat membantu dalam upaya menentukan yang terbaik yang mungkin. struktur untuk bagian skenario Anda. Dalam arti ini:
- Saya berasumsi bahwa pernyataan tersebut
an Organization is a Member of another Organization
memiliki efek yang berbeda dari pernyataan yang a Profile (or Person) is a Member of an Organization
berkaitan dengan entitas yang dipanggil Location
.
- Seperti yang Anda lihat dalam model data, saya berpikir bahwa
Role
dari Owner
hanya berlaku untuk Organization
dan, bagi saya, berlaku Roles
untuk Profile
(atau Person
), di dalam Location
adalah Admin
dan Member
. Apa yang Anda pikirkan tentang semua ini? Karena Anda berhubungan langsung dengan aturan bisnis yang berlaku untuk situasi Anda, Anda perlu memberi tahu saya jika asumsi saya benar.
Bisakah Profile
(atau Person
) bermain berbeda Roles
di dalam yang sama Location
? yaitu, dapatkah Person
, pada saat yang sama, Admin
dan juga Member
dari yang sama Location
? Apa aturan dalam hal ini?
Saya pikir hal yang sama Profile
(atau Person
) dapat bermain berbeda Roles
di berbeda Locations
. Misalnya: Yang spesifik Profile
(atau Person
) adalah "Admin" di Location
"1", dan yang sama ini Profile
(atau Person
) adalah " Member
" di Location
"2", pada saat yang sama. Apakah saya benar?
Apakah mungkin bagi orang tertentu Location
untuk memiliki perbedaan LocationTypes
pada saat yang sama, atau apakah seseorang Location
ditetapkan untuk memegang tepat satu LocationType
?
Apakah atribut tersebut Organization.Website
mewakili alamat situs web organisasi tertentu, seperti "dba.stackexchange.com"?
Jika Profile
"1" (dipahami sebagai Person
) adalah Member
(atau Friend
) dari Profile
"2", apakah mungkin bagi Profile
"1" untuk melaksanakan suatu Role
dalam yang Location
dimiliki oleh Profile
"2"? Saya menganggap bahwa skenario seperti itu hanya berlaku untuk hubungan antara Organization
dan Member
Person
, jadi apa yang Anda pikirkan?
Dengan cara yang sama, jika Organization
"1" adalah Member
(atau Friend
) dari Organization
"2", apakah mungkin bagi Organization
"1" untuk melakukan a Role
di Location
milik Organization
"2"? Sekali lagi, saya pikir skenario semacam ini hanya berlaku untuk hubungan antara a Organization
dan a Member
Person
, apakah ini benar?
Dalam hal ini - ketika saya menulis pertanyaan ini - saya pikir masuk akal untuk mengatakan bahwa hanya ada tiga jenis hubungan yang melibatkan Organizations
dan Persons
, dan kita dapat mendefinisikan:
- (a) Hubungan antara a
Organization
dan a Person
sebagai " Membership
".
- (B) Hubungan antara a
Person
dan yang lain berbeda Person
sebagai " Friendhip
".
- (c) Kami belum menemukan nama yang bermakna untuk menggambarkan hubungan antara individu
Organization
dan orang lain yang berbeda Organization
.
- Jadi, beri tahu saya pendapat Anda tentang (a), (b) dan (c).
Apakah mungkin untuk Organization
menjadi Friend
(atau Member
) dari satu-ke-banyak yang berbeda Organizations
pada saat yang sama? Atau hanya mungkin bagi seseorang Organization
untuk hanya memiliki hubungan dengan orang yang berbeda secara eksklusifOrganization?
Model data berturut-turut menggambarkan kemajuan pertama
Memperhatikan tanggapan dan resolusi Anda terhadap aspek-aspek yang tertunda yang telah saya sebutkan di atas, saya telah membuat yang berikut ...
Meskipun saya belum merasa cukup nyaman dengan itu, model data baru ini mengungkapkan aturan bisnis berikut:
- Sebuah
Profile
adalah salah seorang Organization
atau sebuah Person
. [2]
- A
Profile
mungkin merupakan teman persembahan satu-ke-banyak FriendProfiles
, dan Profile
mungkin merupakan teman satu-ke-banyak FriendProfiles
. [3]
- A
Location
dapat terdiri dari satu-ke-banyak Locations
. [4]
Jawaban untuk komentar spesifik Anda selanjutnya
Sangat menarik bagi saya untuk mencatat / memperparah pemisahan kekhawatiran [mis. LocationAddress dan ProfileAddress] - karena saya jelas ingin bergegas dan menahan mereka semua tanpa hubungan yang benar [lucu, itu tidak terasa benar dengan ERD asli saya].
Ya, itu adalah perbandingan yang baik, meskipun saya tidak akan menyebutnya pemisahan perhatian (yang, tentu saja, prinsip dasar dalam pemrograman aplikasi dan desain), karena istilah ini umumnya berkaitan dengan tahap pengembangan aplikasi dan kami saat ini menemukan diri kami di tahap memahami data dan merancang struktur logisnya.
Dari pengalaman pribadi saya, saya menganggap bahwa fase ini berkaitan dengan menempatkan hal-hal penting ke dalam keseluruhan konteksnya, itu berkaitan dengan melihat asosiasi yang ada di antara entitas yang berbeda yang relevan dalam skenario minat tertentu, dan kemudian menggambarkan hal-hal ini dalam model data. Dalam kasus khusus yang Anda komentari, Address
entitas mungkin memiliki berbagai jenis koneksi dengan entitas lain, satu dengan Profile
dan yang berbeda dengan Location
.
Dan, ya, ketika sesuatu tidak terasa benar atau alami , itu mungkin merupakan pertanda bahwa seseorang perlu lebih berupaya untuk memahami data terkait. Dengan cara ini, Address
entitas adalah salah satu hal yang saya anggap perlu lebih diperhatikan, karena saya berpikir bahwa hubungan antara a Profile
dan a Address
dapat ditangani melalui Location
entitas (karena setiap orang Location
harus memiliki setidaknya satu fisik Address
), oleh karena itu kami dapat memberhentikan ProfileAddress
entitas asosiatif yang digambarkan dalam model terbaru, tetapi Anda harus terus menganalisa poin-poin ini dan memberi tahu saya ide-ide Anda.
Juga, apakah ini merupakan praktik umum dalam IDEF1X untuk mengubah denominasi PK / FK dalam entitas untuk keterbacaan yang lebih baik [misalnya ProfileId - LocationOwnerProfileId]?
Ya, itu adalah komentar yang sangat cerdik dari Anda, karena IDEF1X merekomendasikan penggunaan nama - nama peran untuk mendenominasi KUNCI LUAR NEGERI, untuk menangkap makna atribut tersebut sesuai dengan entitas di mana ia digunakan. Perlu juga dicatat bahwa ini juga sangat terkait dengan konsep migrasi kunci primer . Faktanya, penggunaan nama-nama peran mendahului IDEF1X, karena nama aslinya disajikan oleh Dr. EF Codd dalam teks seminalnya tahun 1970. Dengan cara ini, orang dapat dengan jelas melihat kesetiaan yang dipertahankan oleh standar IDEF1X terhadap model relasional .
Saya akan tertarik untuk mempelajari apa yang tidak terlalu Anda sukai / rasakan tidak sesuai dengan / dengan solusinya?
Selain detail yang sudah dijelaskan di atas tentang Address
entitas, saya tidak yakin apakah yang Roles
dilakukan oleh yang diberikan Profile
dalam tertentu Location
setara dengan Organization
atau Person
. Dari sudut pandang saya, yang Person
pertama harus dikaitkan dengan Organization
, dan kemudian ini Organization
akan menunjuk mengatakan Person
untuk melakukan Role
khususnya Location
, tetapi Anda tahu skenario lebih baik, sehingga aturan ini mungkin tidak perlu. Dalam hal ini, saya akan bersikeras tentang fakta bahwa akan sangat membantu bagi saya untuk mengetahui gambaran kontekstual atau makna bahwa pengguna masa depan struktur data ini memberi untuk Organization
, Profile
, danLocation
, tapi saya mengerti bahwa ini dapat dianggap informasi rahasia, jadi ini akan menjadi batasan.
Dengan struktur saat ini, sepertinya semua orang ( Organization
atau Person
) dapat berhubungan dengan siapa saja (lagi, Organization
atau Person
) dan dapat / melakukan apa saja ( Role
) di mana saja ( Location
) tetapi, perharps, ini adalah tepat apa yang Anda dan pengguna harapkan dari database ini , untuk itu Anda akan memberikan batasan yang jelas, tentu saja. Jika ini masalahnya, maka kami hampir memberikan solusi akhir. Karena, tentu saja, pendapat Anda menentukan dalam situasi ini, Anda juga harus menganalisa ide-ide ini dan kemudian biarkan saya tahu kesimpulan Anda sehingga kami dapat mengambil langkah-langkah terakhir.
Kemajuan kedua yang layak
Sayangnya, komunikasi berhenti beberapa minggu yang lalu, saya kira karena komitmen kerja yang harus Anda penuhi, yang benar-benar masuk akal. Saya akan jauh lebih puas jika kami telah mengembangkan model yang lebih stabil dan kuat tetapi, karena interaksi kami sebelumnya, saya dapat berasumsi bahwa saya dapat mengarahkan Anda ke arah yang benar.
Selain apa yang telah disajikan dalam proses tanya jawab ini, saya menganggap bahwa memberikan perkembangan baru dari model data sebelumnya dapat membantu bagi pencari lain dengan masalah yang sama. Jadi, saya telah membuat ...
Organisasi dan Profil Model Data Awal - Kemajuan Kedua
Seperti dapat dilihat dalam model data seperti itu, saya telah menghapus hubungan banyak-ke-banyak yang telah saya gambarkan dalam model sebelumnya antara Profile
dan Address
, karena yang diberikan Profile
sudah terkait dengan satu-ke-banyak Addresses
melalui yang dimilikinya Locations
.
Perubahan lain yang diilustrasikan dalam kemajuan baru ini adalah kenyataan bahwa sekarang termasuk kemungkinan bahwa suatu pemberian Location
dapat dimiliki oleh satu-ke-banyak Profiles
. Akibatnya, saya telah mengubah Location
KUNCI UTAMA (dengan mengabaikan LocationOwnerProfileId
atribut) dan kemudian menambahkan entitas asosiatif ( banyak-ke-banyak ) yang berhubungan Profile
dengan Location
.
Catatan
1. IDEF1X adalah teknik pemodelan data yang sangat direkomendasikan yang didefinisikan sebagai standar pada bulan Desember 1993 oleh Institut Nasional Standar dan Teknologi ( NIST ).
2. Ini adalah kejadian dari kluster subtipe tipe (super) . Jika Anda tertarik, inilah jawaban di mana saya berurusan secara lebih rinci dengan hubungan semacam ini.
3. Contoh hubungan hierarkis banyak-ke-banyak , dan sangat mirip dengan struktur yang memberikan solusi pasti untuk "Masalah Eksplorasi Bagian" . Solusi semacam itu, tentu saja, diperkenalkan oleh Dr. Edgar Frank Codd dalam makalahnya tahun 1970 yang sangat berpengaruh “Model Data Relasional untuk Bank Data Bersama Besar” .
4. Dengan demikian, ini adalah contoh dari hubungan hierarkis satu-ke-banyak (atau banyak-ke-satu) .