ฉันมีตารางที่แถวสามารถเชื่อมโยงซึ่งกันและกันและตามหลักเหตุผลความสัมพันธ์ไปทั้งสองทาง (โดยทั่วไปไม่มีทิศทาง) ระหว่างสองแถว (และหากคุณสงสัยว่าใช่นี่ควรเป็นหนึ่งตารางมันเป็นสองสิ่งที่มีเอนทิตี / ประเภทตรรกะที่เหมือนกัน) ฉันสามารถคิดถึงวิธีที่จะแสดงสิ่งนี้:
- เก็บความสัมพันธ์และสิ่งที่ตรงกันข้าม
- จัดเก็บความสัมพันธ์ทางเดียว จำกัด ฐานข้อมูลจากการจัดเก็บในทางอื่นและมีดัชนีสองรายการที่มีคำสั่งตรงกันข้ามสำหรับ FKs (ดัชนีหนึ่งรายการเป็นดัชนี PK)
- จัดเก็บความสัมพันธ์ทางเดียวด้วยดัชนีสองรายการและอนุญาตให้แทรกสองวิธีต่อไปได้
- สร้างตารางการจัดกลุ่มบางประเภทและมี FK ไว้ในตารางต้นฉบับ (เพิ่มคำถามจำนวนมากตารางการจัดกลุ่มจะมีตัวเลขเท่านั้นเพราะเหตุใดถึงมีตารางทำให้ FK NULLable หรือมีกลุ่มที่มีแถวเดียวเชื่อมโยงกัน)
อะไรคือข้อดีและข้อเสียที่สำคัญของวิธีการเหล่านี้และแน่นอนมีวิธีที่ฉันไม่เคยคิดบ้างไหม?
นี่เป็น SQLFiddle จะเล่นกับ: http://sqlfiddle.com/#!12/7ee1a/1/0 (เกิดขึ้นเป็น PostgreSQL เนื่องจากเป็นสิ่งที่ฉันใช้ แต่ฉันไม่คิดว่าคำถามนี้เฉพาะเจาะจงมากกับ PostgreSQL) ปัจจุบันมีการจัดเก็บทั้งความสัมพันธ์และย้อนกลับเป็นตัวอย่าง