Я знаю, что это старая тема, но все еще актуальна.
Допустим, Мэри и Джон женаты и имеют двоих детей, Джейн и Мэтта ...
А как насчет этой структуры таблицы:
side1 | side1type | side2type | side2
----------------------------------------------------
Mary | wife | husband | John
Jane | child | mother | Mary
Jane | child | father | John
Matt | child | mother | Mary
Matt | child | father | John
Jane | sister | brother | Matt
Когда нам интересно найти родственников одного человека, мы можем выполнить 2 запроса, ища этого человека в столбце side1, а затем в столбце side2 ...
Или, может быть, один запрос ищет этого человека в том или ином столбце, чем мы используем логику в нашем приложении и:
If that person has been found in side1 column
we print side1, side1type, "of ", side2
Мэри - жена Иоанна
If that person has been found in side2 column
we print side2, side2type, "of ", side1
Мэри - мать Джейн
Мария - мать Мэтта
Или, может быть, более элегантно ...
If that person has been found in side1 column
we print side2 (side2type)
Джон (муж)
If that person has been found in side2 column
we print side1 (side1type)
Джейн (ребенок)
Мэтт (ребенок)