เป็นเรื่องที่ดีมากที่คุณสละเวลาในการทำความเข้าใจจัดประเภทและสร้างแบบจำลองข้อมูลที่คุณติดต่อด้วยนับตั้งแต่ประสบการณ์ส่วนตัวของฉันทั้งหมดนี้ทำให้กระบวนการพัฒนาทั้งหมดง่ายขึ้นและยืดหยุ่นมากสำหรับการเปลี่ยนแปลงในอนาคต และฉันค่อนข้างแน่ใจว่าคุณก็รู้เรื่องนี้อยู่แล้ว
แบบจำลองข้อมูลเบื้องต้นและกฎเกณฑ์ทางธุรกิจที่สมมติขึ้น
ฉันกำหนดรายการของกฎเกณฑ์ทางธุรกิจที่ฉันได้สันนิษฐานไว้หลังจากอ่านคำถามของคุณและตรวจสอบไดอะแกรมของคุณอย่างใกล้ชิดเพื่ออธิบายการทำความเข้าใจข้อกำหนดของคุณ หลังจากกำหนดรายการดังกล่าวฉันได้รับแบบจำลองข้อมูลIDEF1X [1]ที่ฉันตัดสินใจอัปโหลดเป็นเอกสาร. PDF ในแพลตฟอร์มภายนอก (Dropbox) เนื่องจากรูปแบบของรูปแบบข้อมูลนี้ไม่เหมาะกับภาพที่ฝังอยู่ สองคนนี้เป็นเครื่องมือที่จะไปเป็นประโยชน์เป็นข้อมูลอ้างอิงสำหรับจุดสำคัญบางอย่างที่ผมระบุด้านล่างในส่วนสิทธิด้านการแก้ปัญหาเพื่อให้ก้าวไปข้างหน้า
ก่อนอื่นนี่คือ ...
- องค์กรและโปรไฟล์เบื้องต้นรูปแบบข้อมูล
เนื่องจากเป็นเพียงแค่นั้นเบื้องต้นให้ถือว่าเป็นวิธีการที่ช่วยให้เราเข้าใจรูปแบบข้อมูลขั้นสุดท้ายที่ต้องการ
กฎเกณฑ์ทางธุรกิจที่สันนิษฐาน
แบบจำลองข้อมูลเบื้องต้นดังกล่าวมาจากการรวบรวมกฎเกณฑ์ทางธุรกิจ (อนุมานจากคำถามของคุณ) ที่ฉันจะแจกแจงดังนี้:
องค์กรและโปรไฟล์
หมายเหตุที่เป็นที่เข้าใจในปัจจุบันเป็นคำพ้องความหมายสำหรับProfile
Person
Organization
คือเพื่อนของหนึ่งต่อหลายคน Profiles
Organization
คือเพื่อนของหนึ่งต่อหลายคน Organizations
Organization
เป็นสมาชิกของหนึ่งต่อหลายคน Organizations
Profile
เป็นสมาชิกของหนึ่งต่อหลายคนOrganizations
Profile
คือเพื่อนของหนึ่งต่อหลายคน Profiles
Profile
เป็นสมาชิกของหนึ่งต่อหลายคน Profiles
สถานที่และที่อยู่
Organization
เป็นเจ้าของหนึ่งต่อหลายคน Locations
- A
Location
ถูกจัดประเภทโดยหนึ่งต่อหลาย LocationTypes
( หนึ่งจุด ณ เวลาที่กำหนด)
Location
อาจจะมีหนึ่งต่อหลายคน Addresses
( หนึ่ง Physical
, หนึ่งสำหรับShipping
, หนึ่งสำหรับBilling
, หรือหนึ่งที่ทำหน้าที่ทุกวัตถุประสงค์กล่าวหรือหนึ่งที่รวมสองวัตถุประสงค์และอื่นที่ทำหน้าที่เพียงคนเดียวของพวกเขา)
Address
อาจถูกเก็บไว้โดยหนึ่งต่อหลายคน Profiles
หรือใส่อีกวิธีหนึ่งที่Profile
ช่วยให้หนึ่งต่อหลายคน Addresses
ที่เฉพาะเจาะจงAddress
อาจถูกใช้โดยหนึ่งต่อหลายคน Profiles
(ที่ทำหน้าที่เป็นPhysical
สำหรับหนึ่ง Profile
ถูกนำมาใช้สำหรับการBilling
โดยที่แตกต่างกันอย่างใดอย่างหนึ่งฯลฯ ) ดังนั้นการAddress
ทำงานในลักษณะที่คล้ายกันสำหรับการและLocations
Profiles
- ดังนั้นบุคคลที่
Address
อาจจะเป็นในเวลาเดียวกัน , ประเภทPhysical
, และShipping
Billing
สถานที่และบทบาท
Location
เปิดอย่างใดอย่างหนึ่งต่อหลายคน Roles
Role
อาจจะดำเนินการในแบบหนึ่งต่อหลายคน Locations
- A
Profile
(เมื่อมีการตั้งค่าเป็นMember
ของOrganization
) อาจดำเนินการแบบหนึ่งต่อหลาย Roles
ในหนึ่งต่อหลาย Locations
(แต่เพียงหนึ่งเฉพาะRole
ในแต่ละLocation
จุด ณ เวลาหนึ่งกล่าวคือไม่เคยสองคนหรือมากกว่า Roles
ในเวลาเดียวกัน )
ด้านการแก้ไขเพื่อให้ก้าวไปข้างหน้า
เพื่อที่จะก้าวต่อไปในการแก้ปัญหาของรูปแบบข้อมูลของคุณนี่คือรายการของจุดที่เกี่ยวข้องที่เมื่อเราทำงานออกมาจะช่วยให้เราบรรลุเป้าหมายนี้:
ฉันสันนิษฐานว่าคำProfile
ในบริบทของคุณมีความหมายคล้ายกัน (หรือเหมือนกัน) เหมือนกันPerson
แต่อาจแตกต่างกันเล็กน้อย ด้วยวิธีนี้คุณจะบอกว่าในสถานการณ์สมมติของคุณเอนทิตีOrganization
และPerson
เป็นชนิดย่อยของProfile
?
ที่สามารถProfile
(หรือPerson
) ของตัวเองหนึ่งไปยังหลาย EmailAddresses
, หรือเป็นProfile
(หรือPerson
) จับจ้องไปตรงหนึ่ง EmailAddress
?
คุณต้องการที่จะให้ความเป็นไปได้สำหรับการOrganization
ได้รับการติดต่อผ่านทางTelephone
และEmail
, หรือคุณต้องการ จำกัด ว่าจะเป็นไปได้เพียงProfile
(หรือPerson
)?
ฉันคิดว่า a Location
ได้รับการแก้ไขให้เป็น Address
ประเภทใดประเภทหนึ่งPhysical
ถูกต้องหรือไม่
เป็นไปได้หรือไม่ที่ a Location
จะแบ่งปันโดยหนึ่งต่อหลายคนที่แตกต่างกันOrganizations
หรือมิฉะนั้น a Location
สามารถเป็นของเพียงคนเดียวได้ Organization
หรือไม่?
คุณได้ระบุผ่านความคิดเห็นว่าข้อเท็จจริงของการเป็นMember
และFriend
เป็นเหมือนกัน อย่างที่คุณเห็นในรูปแบบข้อมูลเบื้องต้นที่เสนอของฉันฉันทำตามข้อกำหนดดั้งเดิมและบรรยายถึงความเป็นไปได้ทั้งหมดของการเป็นสมาชิกและมิตรภาพระหว่างOrganization
และProfile
(หรือPerson
) ในหน่วยงานที่แตกต่างกันเนื่องจากฉันคิดว่ามันมีประโยชน์ในความพยายาม โครงสร้างของส่วนนั้นของคุณ ในแง่นี้
- ผมคิดว่าคำสั่ง
an Organization is a Member of another Organization
มีผลแตกต่างจากคำสั่งที่นับถือนิติบุคคลที่เรียกว่าa Profile (or Person) is a Member of an Organization
Location
- ที่คุณสามารถดูในรูปแบบข้อมูลที่ผมคิดว่า
Role
ของOwner
จะใช้ได้เฉพาะสำหรับOrganization
และให้ฉันถูกต้องRoles
สำหรับProfile
(หรือPerson
) ภายในLocation
มีและAdmin
Member
คุณคิดยังไงกับเรื่องทั้งหมดนี้? เนื่องจากคุณอยู่ในการติดต่อโดยตรงกับกฎเกณฑ์ทางธุรกิจที่ใช้กับสถานการณ์ของคุณคุณต้องบอกฉันว่าสมมติฐานของฉันถูกต้องหรือไม่
สามารถProfile
(หรือPerson
) เล่นแตกต่างกันRoles
ภายในเดียวกันได้Location
หรือไม่ คือสามารถPerson
ในเวลาเดียวกันAdmin
และยังเป็นMember
ของเดียวกันได้Location
หรือไม่ กฎอะไรในเรื่องนี้?
ผมคิดว่าเหมือนกันProfile
(หรือPerson
) สามารถเล่นที่แตกต่างกันในการที่แตกต่างกันRoles
Locations
ตัวอย่างเช่น: Profile
(หรือPerson
) เฉพาะคือ“ ผู้ดูแลระบบ” ในLocation
“ 1” และที่เหมือนกันนี้Profile
(หรือPerson
) คือ“ Member
” ในLocation
“ 2” ในเวลาเดียวกัน ฉันถูกไหม?
มันเป็นไปได้สำหรับโดยเฉพาะอย่างยิ่งLocation
ที่จะมีที่แตกต่างกันLocationTypes
ในเวลาเดียวกันหรือบุคคลที่Location
ได้รับการแก้ไขที่จะถือว่าหนึ่งLocationType
?
คุณลักษณะนี้Organization.Website
แสดงถึงที่อยู่เว็บไซต์ขององค์กรหนึ่ง ๆ เช่น“ dba.stackexchange.com” หรือไม่
หากProfile
“ 1” (เข้าใจแล้วPerson
) เป็นMember
(หรือFriend
) ของProfile
“ 2” เป็นไปได้หรือไม่ที่Profile
“ 1” จะสามารถดำเนินการRole
ใน“ 2” ที่Location
เป็นเจ้าของได้Profile
หรือไม่? ฉันคิดว่าสถานการณ์ดังกล่าวใช้ได้กับความสัมพันธ์ระหว่างOrganization
และMember
Person
คุณคิดว่าอย่างไร
ในทำนองเดียวกันหากOrganization
“ 1” เป็นMember
(หรือFriend
) ของOrganization
“ 2” เป็นไปได้หรือไม่ที่Organization
“ 1” จะสามารถดำเนินการRole
ใน“ 2” ที่Location
เป็นเจ้าของได้Organization
หรือไม่? อีกครั้งฉันคิดว่าสถานการณ์ประเภทนี้ใช้ได้เฉพาะกับความสัมพันธ์ระหว่างOrganization
a และ a Member
Person
เท่านั้นถูกต้องหรือไม่
ในเรื่องนี้ - ในขณะที่ฉันกำลังเขียนคำถามนี้ - ฉันคิดว่ามันสมเหตุสมผลที่จะพูดว่ามีความสัมพันธ์ที่แตกต่างกันสามประเภทที่เกี่ยวข้องOrganizations
และPersons
และเราสามารถกำหนด:
- (a) ความสัมพันธ์ระหว่าง
Organization
และPerson
กับ " Membership
"
- (b) ความสัมพันธ์ระหว่าง a
Person
และอีกอย่างแตกต่างกันPerson
เป็น“ Friendhip
”
- (ค) เรายังไม่พบว่ามีความหมายชื่อเพื่ออธิบายความสัมพันธ์ระหว่างบุคคลและที่แตกต่างกันอีก
Organization
Organization
- ดังนั้นให้ฉันรู้ว่าคุณคิดอย่างไรเกี่ยวกับ (a) (b) และ (c)
มันเป็นไปได้สำหรับOrganization
ที่จะเป็นFriend
(หรือMember
) ของหนึ่งต่อหลายคนที่แตกต่างกันOrganizations
ในเวลาเดียวกันได้หรือไม่ หรือเป็นไปได้เพียงที่Organization
จะมีความสัมพันธ์กับคนละคนเท่านั้นOrganization?
แบบจำลองข้อมูลต่อเนื่องแสดงให้เห็นถึงความก้าวหน้าครั้งแรก
ด้วยความใส่ใจในการตอบสนองและการแก้ปัญหาของคุณต่อประเด็นที่ค้างอยู่ที่ฉันได้กล่าวไว้ข้างต้นฉันได้สร้างสิ่งต่อไปนี้ ...
แม้ว่าฉันจะรู้สึกไม่สบายใจกับมัน แต่รูปแบบข้อมูลใหม่นี้แสดงกฎทางธุรกิจต่อไปนี้:
Profile
เป็นอย่างใดอย่างหนึ่งOrganization
หรือ [2]Person
Profile
อาจจะเป็นเพื่อนที่เสนอขายแบบหนึ่งต่อหลายคน FriendProfiles
และProfile
อาจจะเป็นเพื่อนที่ยอมรับของหนึ่งต่อหลายคน [3]FriendProfiles
Location
อาจประกอบด้วยหนึ่งต่อหลายคน [4]Locations
คำตอบสำหรับความคิดเห็นเฉพาะที่ตามมาของคุณ
มันน่าสนใจมากสำหรับฉันที่จะจดบันทึก / รวมการแยกข้อกังวล [เช่น LocationAddress และ ProfileAddress] - เพราะฉันต้องการเร่งรีบและจับพวกมันทั้งหมดโดยไม่มีความสัมพันธ์ที่ถูกต้อง [ตลกมันไม่รู้สึกผิดกับ ERD ดั้งเดิมของฉัน]
ใช่นั่นคือการเปรียบเทียบที่ดีแม้ว่าฉันจะไม่เรียกมันว่าเป็นการแยกข้อกังวล (ซึ่งก็คือหลักการพื้นฐานในการเขียนโปรแกรมและการออกแบบแอปพลิเคชัน) เนื่องจากคำนี้มักเกี่ยวข้องกับขั้นตอนการพัฒนาแอปพลิเคชัน ขั้นตอนของการทำความเข้าใจข้อมูลและออกแบบโครงสร้างเชิงตรรกะ
จากประสบการณ์ส่วนตัวของฉันฉันคิดว่าระยะนี้เกี่ยวข้องกับการใส่สิ่งสำคัญลงในบริบททั้งหมดของพวกเขามันเกี่ยวข้องกับการเห็นความสัมพันธ์ที่มีอยู่ระหว่างหน่วยงานต่าง ๆ ที่เกี่ยวข้องในสถานการณ์เฉพาะที่น่าสนใจแล้ว แสดงสิ่งเหล่านี้ในแบบจำลองข้อมูล ในกรณีที่เฉพาะเจาะจงที่คุณแสดงความคิดเห็นเกี่ยวกับการที่Address
นิติบุคคลที่อาจมีความแตกต่างกันของการเชื่อมต่อกับหน่วยงานอื่น ๆ หนึ่งด้วยและหนึ่งที่แตกต่างกันด้วยProfile
Location
และใช่เมื่อบางสิ่งไม่ถูกต้องหรือเป็นธรรมชาติมันอาจเป็นสัญญาณว่าเราจำเป็นต้องใช้ความพยายามมากขึ้นเพื่อที่จะเข้าใจข้อมูลที่เกี่ยวข้อง ในลักษณะนี้Address
กิจการเป็นหนึ่งในสิ่งที่ฉันพิจารณาว่าต้องการความสนใจมากขึ้นเนื่องจากฉันคิดว่าความสัมพันธ์ระหว่าง a Profile
และa Address
สามารถจัดการได้ด้วยวิธีของLocation
กิจการ (เนื่องจากข้อเท็จจริงที่ว่าทุกคนLocation
ต้องมีอย่างน้อยหนึ่งร่างกายAddress
) ดังนั้นเราสามารถยกเลิกการProfileAddress
เชื่อมโยงเอนทิตีที่ปรากฎในรุ่นล่าสุด แต่คุณควรวิเคราะห์ประเด็นเหล่านี้และแจ้งให้เราทราบความคิดของคุณ
นอกจากนี้ยังเป็นเรื่องธรรมดาใน IDEF1X ที่จะเปลี่ยนการบอกเลิก PK / FK ในเอนทิตีเพื่อให้อ่านง่ายขึ้น [เช่น ProfileId - LocationOwnerProfileId]
ใช่นั่นเป็นคำพูดที่ฉลาดมากจากคุณเนื่องจาก IDEF1X แนะนำให้ใช้ชื่อบทบาทสำหรับการระบุคีย์ต่างประเทศเพื่อรวบรวมความหมายของแอตทริบิวต์ดังกล่าวตามเอนทิตีที่ใช้งานอยู่ นอกจากนี้ยังเป็นที่น่าสังเกตว่าเรื่องนี้ก็เป็นเรื่องที่เกี่ยวข้องอย่างยิ่งกับแนวคิดของการโยกย้ายคีย์หลัก ตามความเป็นจริงการใช้ชื่อบทบาทนำหน้า IDEF1X เนื่องจากเป็นการนำเสนอโดยดร. EF Codd ในข้อความน้ำเชื้อปี 1970 ของเขา ในลักษณะนี้อย่างใดอย่างหนึ่งสามารถเห็นได้ชัดเจนความจงรักภักดีที่มาตรฐาน IDEF1X ช่วยให้ต่อแบบเชิงสัมพันธ์
ฉันสนใจที่จะเรียนรู้สิ่งที่คุณไม่ชอบโดยเฉพาะ / รู้สึกว่าไม่ได้เป็นแบบอย่างด้วย / ในการแก้ปัญหา?
นอกจากนี้รายละเอียดที่อธิบายไว้แล้วข้างต้นเกี่ยวกับAddress
นิติบุคคลผมไม่แน่ใจว่าถ้าRoles
ดำเนินการโดยได้รับProfile
ในโดยเฉพาะอย่างยิ่งLocation
จะเทียบเท่าการหรือOrganization
Person
จากมุมมองของฉันPerson
ต้องมีการเชื่อมโยงกับสิ่งOrganization
แรกสิ่งนี้Organization
จะบอกว่าPerson
ให้ทำRole
สิ่งใดสิ่งหนึ่งโดยเฉพาะLocation
แต่คุณรู้สถานการณ์ดีขึ้นดังนั้นกฎนี้อาจไม่จำเป็น ในเรื่องนี้ผมจะยืนยันเกี่ยวกับความจริงที่ว่ามันจะเป็นประโยชน์มากสำหรับผมที่จะรู้ว่าคำอธิบายบริบทหรือความหมายว่าผู้ใช้ในอนาคตนี้ให้โครงสร้างข้อมูลOrganization
, Profile
และLocation
แต่ฉันเข้าใจว่านี่อาจเป็นข้อมูลที่เป็นความลับดังนั้นนี่จึงเป็นข้อ จำกัด
ด้วยโครงสร้างปัจจุบันดูเหมือนว่าทุกคน ( Organization
หรือPerson
) สามารถเชื่อมโยงกับทุกคน (อีกครั้งOrganization
หรือPerson
) และสามารถ / ทำอะไรก็ได้ ( Role
) ที่ใดก็ได้ ( Location
) แต่สำหรับ perharps นี่เป็นสิ่งที่คุณและผู้ใช้คาดหวังจากฐานข้อมูลนี้ ซึ่งแน่นอนว่าคุณจะมีข้อ จำกัด ที่ชัดเจน หากเป็นกรณีนี้เราเกือบจะให้ทางออกสุดท้าย เนื่องจากโดยปกติแล้วความคิดเห็นของคุณจะแตกหักในสถานการณ์นี้คุณควรวิเคราะห์ความคิดนี้แล้วแจ้งให้เราทราบข้อสรุปของคุณเพื่อให้เราสามารถทำตามขั้นตอนสุดท้ายได้
ความก้าวหน้าที่สองเป็นไปได้
น่าเสียดายที่การหยุดสื่อสารไม่กี่สัปดาห์ที่ผ่านมาฉันเดาว่าเนื่องจากข้อผูกพันในงานที่คุณต้องปฏิบัติ ฉันจะได้รับเนื้อหามากขึ้นถ้าเราพัฒนาแบบจำลองที่มีเสถียรภาพและมีเสถียรภาพมากขึ้น แต่เนื่องจากการโต้ตอบก่อนหน้าของเราฉันสามารถสรุปได้ว่าฉันสามารถชี้คุณไปในทิศทางที่ถูกต้อง
นอกจากสิ่งที่นำเสนอในคำถามและคำตอบนี้แล้วฉันคิดว่าการให้ความก้าวหน้าใหม่จากตัวแบบข้อมูลก่อนหน้านี้อาจเป็นประโยชน์สำหรับผู้ค้นหารายอื่นที่มีปัญหาคล้ายกัน ดังนั้นฉันได้สร้าง ...
องค์กรและโปรไฟล์แบบจำลองข้อมูลเบื้องต้น - ขั้นสูงที่สอง
ดังที่เห็นได้ในตัวแบบข้อมูลดังกล่าวฉันได้ลบความสัมพันธ์แบบหลายต่อหลายอย่างที่ฉันได้อธิบายไว้ในตัวแบบก่อนหน้าระหว่างProfile
และAddress
เนื่องจากสิ่งที่ได้รับProfile
นั้นสัมพันธ์กับแบบตัวต่อตัว Addresses
ผ่านเจ้าของLocations
แล้ว
การเปลี่ยนแปลงที่จะมีภาพประกอบล่วงหน้าใหม่นี้ก็คือความจริงที่ว่ามันในขณะนี้มีความเป็นไปได้ที่ที่กำหนดLocation
สามารถเป็นเจ้าของโดยหนึ่งต่อหลายคน Profiles
ดังนั้นฉันได้เปลี่ยนLocation
คีย์หลัก (โดยไล่LocationOwnerProfileId
แอตทริบิวต์) แล้วเพิ่มการเชื่อมโยงนิติบุคคล ( หลายต่อหลายคน ) ที่เกี่ยวข้องกับProfile
Location
หมายเหตุ
1. IDEF1Xเป็นเทคนิคการสร้างแบบจำลองข้อมูลที่ขอแนะนำอย่างยิ่งซึ่งถูกกำหนดให้เป็นมาตรฐานในเดือนธันวาคม 1993 โดยสถาบันมาตรฐานและเทคโนโลยีแห่งชาติของสหรัฐอเมริกา ( NIST )
2. นี้เป็น ocurrence ของ(Super) คลัสเตอร์ประเภทย่อย ในกรณีที่คุณมีความสนใจนี่คือคำตอบที่ฉันจัดการอย่างละเอียดมากขึ้นกับความสัมพันธ์แบบนี้
3. ตัวอย่างของความสัมพันธ์แบบลำดับชั้นหลายต่อหลายคนและเป็น simliar มากกับโครงสร้างที่ให้แก้แตกหักกับ“อะไหล่ Explotion ปัญหา” วิธีการแก้ปัญหาดังกล่าวเป็นของหลักสูตรที่นำโดยดร. เอ็ดการ์แฟรงก์ Coddในปี 1970 กระดาษที่มีอิทธิพลอย่างมากของเขา“เป็นความสัมพันธ์รูปแบบของข้อมูลขนาดใหญ่ที่ใช้ร่วมกันข้อมูลธนาคาร”
4. ในฐานะที่เป็นเช่นนี้เป็นตัวอย่างของหนึ่งต่อหลายคน (หรือหลายต่อหนึ่ง) ความสัมพันธ์แบบลำดับชั้น