Ваш подход правильный ... нет другого способа сделать это, кроме вспомогательной таблицы (friends_lists
в вашем сценарии).Вот как можно достичь отношения «многие ко многим» между двумя таблицами.
В вашем случае две таблицы одинаковы (people_list
), но концептуально ониможно считать «друзьями» и «людьми»
Но могу ли я дать вам несколько советов об этом подходе?
1 - Каждая таблица, в некотором смысле, является «списком»,Итак, почему суффикс "_list"?Не, по той же причине мы не используем множественное число для имен таблиц (его продукт, а не продукт * s *. Конечно, где будет много;)
2 - вместо использования авто-Инкрементный идентификатор у друга, превратить и person_id1, и person_id2 в первичный ключ.Вы избавляетесь от бесполезного столбца И, таким образом, гарантируете, что каждая пара Person X - Friend Y уникальна.
3 - Дайте person_id1 и 2 значащим именам на основе контекста, например, «person_id» и «friend_id"
Подводя итог:
table person {
person_id (auto-increment, primary key)
name
age
race
...
}
table friend {
person_id (foreing key from person, primary key)
friend_id (foreing key from person, primary key)
}