ฉันควรสร้างแบบจำลองความสัมพันธ์“ หรือ /” อย่างไร


12

ว่าฉันมีนิติบุคคลชื่อ Software และสองประเภทย่อย FreeSoftware และ NonFreeSoftware เอนทิตี NonFreeSoftware มีคุณสมบัติเช่นวันที่ซื้อ, ผู้ขาย, ฯลฯ เอนทิตี FreeSoftware มีคุณสมบัติเช่นใบอนุญาต, URL ของซอร์สโค้ดเป็นต้น

ดังนั้นหากฉันต้องการสร้างแบบจำลองเอนทิตีอื่นระบบปฏิบัติการฉันควรทำอย่างไร? มีความสัมพันธ์แบบ "เป็น" กับซอฟต์แวร์ แต่ความสัมพันธ์แบบ "หรือ" กับ FreeSoftware และ NonFreeSoftware

ฉันคิดว่าฉันขาดอะไรบางอย่างในแบบที่ฉันวิเคราะห์ลำดับชั้นนี้


ทบทวนคำตอบนี้ มันครอบคลุมรายละเอียดการใช้งานของการสร้างแบบจำลองความสัมพันธ์ชนิดนี้
Nick Chammas

คำตอบ:


8

วิธีจัดการสิ่งนี้คือประเภทย่อยของคุณจะต้องถูกกำหนดโดยประเภทพิเศษ (เช่น PK ของประเภทย่อยนั้นยังเป็น FK จากประเภทย่อยไปยังประเภท super)

ความท้าทายคือการเข้าใจว่าบางสิ่งมีความพิเศษเฉพาะตัวหรือไม่ คุณลักษณะของประเภทย่อยควรใช้กับประเภทย่อยเหล่านั้นเท่านั้น แต่อาจเป็นไปได้ว่าบางประเภทย่อยนั้นไม่สามารถใช้ร่วมกันได้

หากคุณมีประเภทย่อยแบบเอกสิทธิ์เฉพาะบุคคลบางอย่างร่วมกันคุณสามารถใช้แอ็ตทริบิวต์การแบ่งพาร์ติชันในประเภทแบบพิเศษเพื่อระบุประเภทย่อยแบบเอกสิทธิ์เฉพาะบุคคล (สองคนขึ้นไป) ที่ใช้ร่วมกัน แอ็ตทริบิวต์การแบ่งพาร์ติชันนี้สามารถใช้กับข้อ จำกัด หรือทริกเกอร์เพื่อบังคับใช้การผูกขาดเฉพาะซึ่งกันและกัน

หากคุณมีประเภทย่อยที่ไม่ได้เกิดร่วมกันพวกเขาสามารถอยู่ได้โดยไม่ต้องใช้คุณสมบัติการแบ่ง

พิจารณาตัวแบบข้อมูลนี้:

ERD

คุณมี super-types สามชนิด แต่FREE_SOFTWAREและNON-FREE_SOFTWAREชนิดเป็นแบบพิเศษร่วมกันโดยยึดตามSOFTWARE.free_not_freeแอ็ตทริบิวต์การแบ่งพาร์ติชัน ส่วนใดก็ตามของซอฟต์แวร์อาจเป็นไปได้OPERATING_SYSTEMเช่นกันไม่ว่าจะฟรีหรือไม่ก็ตาม


1
OT เล็กน้อย: คุณใช้อะไรในการทำแผนภาพ ER นี้
Daniel Serodio

@DanielSerodio - ฉันใช้ Visio กับรูปร่างที่ชาญฉลาดฉันได้สร้างตัวเองตามสัญกรณ์ James Martin ERD รูปร่างใช้พื้นผิวของเส้นที่กำหนดเองเพื่อให้ปรากฏอย่างไม่เป็นทางการซึ่งฉันพบว่ามีประโยชน์ในการเตือนผู้คนเมื่อไดอะแกรมคือ "ร่าง" หรือการออกแบบแบบร่าง
Joel Brown

@JoelBrown คุณยินดีที่จะแบ่งปันลายฉลุของคุณหรือไม่ นี่เป็นรูปร่างที่ดีจริงๆ
imoatama

2
@imoatama - มันไม่นานมานี้ แต่ในที่สุดฉันก็ได้โพสต์ stencil ที่นี่: moosewarevisioerd.codeplex.com หมายเหตุในรายละเอียดว่ารูปร่างสมาร์ทของ stencil นั้นสร้างขึ้นสำหรับ Visio รุ่นเก่าและพฤติกรรมบางอย่างของ รูปร่างของตัวเชื่อมต่อความสัมพันธ์อาจเป็นบิตเล็กน้อย วันหนึ่งฉันจะแก้ไขเรื่องนี้
Joel Brown

1

เหตุใดระบบปฏิบัติการจึงเป็นนิติบุคคลใหม่ที่สมบูรณ์แบบ ควรอยู่ภายใต้ Software หนึ่งนั่นคือสิ่งที่มันเป็น และระบบปฏิบัติการ (ถ้าปิดแหล่งที่มา) จะมีวันที่ซื้อ, ผู้ขาย, และระบบปฏิบัติการโอเพ่นซอร์สจะมีใบอนุญาต, URL ของซอร์สโค้ดเป็นต้น

ฉันอยากจะแนะนำความสัมพันธ์กับSoftwareTypeหรือสิ่งที่ตามสายเหล่านั้น นั่นคือเมื่อคุณสามารถ / ควรระบุว่าซอฟต์แวร์เป็นระบบปฏิบัติการหรือแอปพลิเคชันหรือซอฟต์แวร์ประเภทอื่น ๆ ที่คุณสนับสนุน


ฉันต้องการให้ระบบปฏิบัติการเป็นนิติบุคคลแยกต่างหากเนื่องจากเป็นซอฟต์แวร์เฉพาะทาง อาจมีแอตทริบิวต์ที่ไม่มีซอฟต์แวร์อื่น ๆ (เช่นประเภทเคอร์เนล, ธง RTOS หรือไม่, ธงหลายผู้ใช้ ฯลฯ )
jl6

1
@ jl6 ฉันยังขอแตกต่างที่นี่ ซอฟต์แวร์ทุกชิ้น (ไม่ว่าจะเป็นระบบปฏิบัติการหรือไม่ก็ตาม) จะมีคุณสมบัติเฉพาะ สามารถจัดเก็บที่อื่นได้ คุณลดความสามารถในการขยายระบบให้เล็กที่สุดโดยแยกระบบปฏิบัติการออกจากกัน
Thomas Stringer

หากฉันเข้าใจอย่างถูกต้องคุณกำลังแนะนำเอนทิตีซอฟต์แวร์และเอนทิตี SoftwareType คุณกำลังพูดว่าฟรีไม่ใช่ฟรีและระบบปฏิบัติการเป็นเพียงตัวอย่างของ SoftwareType ที่แตกต่างกันหรือไม่? ฉันแน่ใจว่าคุณถูกต้องแล้วคุณเก็บคุณสมบัติต่าง ๆ ของประเภทต่างๆไว้ที่ไหน
jl6
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.