У мене є таблиця, де рядки можуть бути пов'язані один з одним, і логічно, що відносини йдуть обома напрямками (в основному, без напрямків) між двома рядками. (І якщо вам цікаво, так, це справді повинна бути одна таблиця. Це дві речі точно такої ж логічної сутності / типу.) Я можу придумати кілька способів представити це:
- Зберігайте відносини та його зворотні
- Збережіть взаємозв'язок в один бік, обмежте базу даних не зберігаючи її іншим способом і майте два індекси з протилежними порядками для ФК (один індекс - індекс PK)
- Зберігайте взаємозв'язок в один бік з двома індексами і дозволяйте ввести все-таки другий (звучить на кшталт приємно, але ей, повнота)
- Створіть якусь таблицю групування і додайте ФК до неї в оригінальній таблиці. (Виникає багато питань. Таблиця групування матиме лише число; чому взагалі мати таблицю? Зробити FK NULLable або мати групи з одним рядком?)
Які основні плюси і мінуси цих способів, і, звичайно, є якийсь спосіб, про який я не думав?
Ось SQLFiddle з якою грати: http://sqlfiddle.com/#!12/7ee1a/1/0 . (Буває PostgreSQL, оскільки саме це я використовую, але я не думаю, що це питання є дуже специфічним для PostgreSQL.) В даний час він зберігає як відносини, так і їх зворотні лише як приклад.