Вопрос, на который вам нужно ответить, следующий: эквивалентны ли следующие два утверждения?
- Боб друг Ал
- Ал друг Боба
Это зависит от контекста. В социальных сетях Al и Bob - это просто узлы на графике, и пока существует связь между ними, которой достаточно.
Но если Ал преследует Боба, то Ал может утверждать утверждение №1 сколько угодно, Боб никогда не согласится с утверждением №2. Или рассмотрим аналогичного государственного деятеля:
- Боб - менеджер Al
- Ал - менеджер Боба
Нечасто, что оба эти утверждения могут быть верными одновременно, но существуют некоторые сложные управленческие структуры.
В обеих этих ситуациях ваша первая таблица не содержит дубликатов данных, поскольку (1,2) не совпадает с (2,1). Если вы выберете второе решение, вы должны применить правило, что если (1,2) существует, (2,1) не может существовать.
Существуют ситуации, в которых ваше первое решение является подходящим, а в некоторых - второе. Другими словами, моделирование данных сложно :)
Главное, сначала верните правильную логическую модель. Забудьте о SQL, пока не начнете писать запросы. Если ваши таблицы разработаны правильно, SQL будет течь. Или, другими словами, если вам сложно написать запрос, скорее всего, ваша модель данных неверна.