ฉันจะใช้คำถามนี้จากการสร้างแบบจำลองมุมมอง
ตราบใดที่คุณไม่เพิ่มความสัมพันธ์ใด ๆ ที่ไม่ได้มีอยู่จริงคุณก็ปลอดภัย หากคุณเพิ่มพวกเขาคุณจะได้รับความสมบูรณ์ของข้อมูลน้อยลง (เพราะมีความซ้ำซ้อน) และรหัสคู่ที่แน่นมากขึ้น
สิ่งที่มีการอ้างอิงแบบวงกลมโดยเฉพาะคือฉันไม่ได้เห็นกรณีที่พวกเขาจะต้องใช้จริงยกเว้นการอ้างอิงด้วยตนเอง หากคุณจำลองต้นไม้หรือกราฟคุณจำเป็นต้องใช้และมันก็เป็นสิ่งที่ถูกต้องอย่างสมบูรณ์เพราะการอ้างอิงตนเองนั้นไม่เป็นอันตรายจากมุมมองคุณภาพของรหัส (ไม่ได้เพิ่มการพึ่งพา)
ฉันเชื่อว่าในขณะนี้คุณเริ่มต้องการการอ้างอิงที่ไม่ใช่ตัวเองในทันทีคุณควรถามว่าคุณไม่สามารถสร้างแบบจำลองเป็นกราฟ (ยุบเอนทิตีหลาย ๆ อันเป็นหนึ่งโหนด) อาจมีกรณีระหว่างที่คุณทำการอ้างอิงแบบวงกลม แต่การสร้างแบบจำลองเนื่องจากกราฟไม่เหมาะสม แต่ฉันสงสัยอย่างมากว่า
มีอันตรายที่ผู้คนคิดว่าพวกเขาต้องการการอ้างอิงแบบวงกลม แต่ในความเป็นจริงพวกเขาไม่ได้ กรณีที่พบบ่อยที่สุดคือ "กรณีหนึ่งในจำนวนมาก" ตัวอย่างเช่นคุณมีลูกค้าที่มีหลายที่อยู่ซึ่งควรจะทำเครื่องหมายที่อยู่หนึ่งเป็นที่อยู่หลัก มันเป็นเรื่องที่ดึงดูดอย่างมากในการสร้างแบบจำลองสถานการณ์นี้เนื่องจากความสัมพันธ์ที่แยกกันสองรายการมี_addressและis_primary_address_ofแต่มันไม่ถูกต้อง เหตุผลก็คือการเป็นที่อยู่หลักไม่ใช่ความสัมพันธ์แยกกันระหว่างผู้ใช้และที่อยู่ แต่เป็นคุณลักษณะของความสัมพันธ์ที่มีที่อยู่แทน. ทำไมถึงเป็นอย่างนั้น? เนื่องจากโดเมนนั้น จำกัด อยู่เฉพาะที่อยู่ของผู้ใช้และไม่ใช่ที่อยู่ทั้งหมดที่มี คุณเลือกลิงค์ใดลิงค์หนึ่งและทำเครื่องหมายว่าแข็งแกร่งที่สุด (ลิงค์หลัก)
(จะพูดคุยเกี่ยวกับฐานข้อมูลในขณะนี้) หลายคนเลือกใช้โซลูชันสองความสัมพันธ์เพราะพวกเขาเข้าใจ "หลัก" ว่าเป็นตัวชี้ที่ไม่ซ้ำกันและ foreign key เป็นชนิดของตัวชี้ ดังนั้นคีย์ต่างประเทศควรเป็นสิ่งที่ใช้ใช่ไหม ไม่ถูกต้อง. คีย์ต่างประเทศแสดงถึงความสัมพันธ์ แต่ "หลัก" ไม่ใช่ความสัมพันธ์ มันเป็นกรณีที่เลวลงของการสั่งซื้อที่องค์ประกอบหนึ่งอยู่เหนือสิ่งอื่นใดและส่วนที่เหลือจะไม่ได้รับคำสั่ง หากคุณต้องการสร้างแบบจำลองการสั่งซื้อทั้งหมดคุณจะถือว่ามันเป็นคุณลักษณะของความสัมพันธ์เพราะไม่มีทางเลือกอื่น แต่ในขณะที่คุณเลวลงมันมีทางเลือกและเป็นสิ่งที่น่ากลัวมาก - ในการสร้างแบบจำลองบางอย่างที่ไม่สัมพันธ์กันในฐานะความสัมพันธ์ ดังนั้นที่นี่มา - ซ้ำซ้อนความสัมพันธ์ซึ่งแน่นอนว่าไม่ใช่สิ่งที่จะประเมิน
ดังนั้นฉันจะไม่อนุญาตให้มีการอ้างอิงแบบวงกลมเกิดขึ้นเว้นแต่จะมีความชัดเจนว่ามาจากสิ่งที่ฉันทำตัวเป็นแบบอย่าง
(หมายเหตุ: นี่คือเอนเอียงเล็กน้อยกับการออกแบบฐานข้อมูล แต่ฉันจะพนันได้ว่ามันใช้ได้กับพื้นที่อื่นเช่นกัน)