Saya memiliki sebuah tabel di mana baris-baris tersebut dapat saling berhubungan satu sama lain, dan secara logis, hubungan berjalan dua arah (pada dasarnya, tanpa arah) antara dua baris. (Dan jika Anda bertanya-tanya, ya, ini benar-benar harus menjadi satu tabel. Ini adalah dua hal dari entitas / tipe logis yang sama persis.) Saya dapat memikirkan beberapa cara untuk mewakili ini:
- Simpan hubungan dan kebalikannya
- Menyimpan hubungan satu arah, membatasi database agar tidak menyimpannya dengan cara lain, dan memiliki dua indeks dengan pesanan berlawanan untuk FK (satu indeks menjadi indeks PK)
- Simpan hubungan satu arah dengan dua indeks dan biarkan yang kedua tetap dimasukkan (kedengarannya agak menjijikkan, tapi hei, kelengkapan)
- Buat semacam tabel pengelompokan dan minta sebuah FK di atas meja asli untuk itu. (Meningkatkan banyak pertanyaan. Tabel pengelompokan hanya akan memiliki nomor; mengapa bahkan memiliki tabel? Membuat FK NULLable atau memiliki grup dengan satu baris yang terkait?)
Apa saja pro dan kontra utama dari cara-cara ini, dan tentu saja, adakah cara yang belum saya pikirkan?
Inilah SQLFiddle untuk dimainkan: http://sqlfiddle.com/#!12/7ee1a/1/0 . (Terjadi menjadi PostgreSQL karena itulah yang saya gunakan, tetapi saya tidak berpikir pertanyaan ini sangat spesifik untuk PostgreSQL.) Saat ini menyimpan hubungan dan membalikkannya hanya sebagai contoh.