Я искал простое объяснение отношений, но не смог ничего найти, поэтому постараюсь обобщить его здесь.
Отношения не являются чем-то вроде Джанго. Если вы действительно хотите понять, что делает Django, узнайте о концепциях базы данных в целом.
Когда у вас есть несколько таблиц информации, вам нужно как-то связать их. Если вы работаете с музыкальным сайтом, таким как last.fm, вам нужно будет узнать об исполнителях, жанрах, тегах, песнях, альбомах и т. Д. Все эти данные как-то связаны.
Например, у одного исполнителя будет много альбомов (один ко многим), один жанр будет применяться ко многим исполнителям (один ко многим), например. У Metallica (одного исполнителя) будет несколько альбомов, Black Album, St. Anger и т. Д., Но один альбом, вероятно, не будет принадлежать двум исполнителям, например Алисия Киз и Metallica записывают один и тот же альбом. Чтобы достичь этого отношения, каждая запись в альбоме должна иметь artist_id, чтобы указать, к какому исполнителю она относится.
mysql> select * from albums where artist_id = 40;
+-----+------------------------------+------+---------------------+-----------+----------+------------+
| id | name | year | created_at | artist_id | genre_id | updated_at |
+-----+------------------------------+------+---------------------+-----------+----------+------------+
| 309 | Reise, Reise | 2004 | 2009-11-22 16:01:13 | 40 | 2 | NULL |
| 310 | Mutter | 2001 | 2009-11-22 16:12:28 | 40 | 2 | NULL |
| 311 | Sehnsucht | 1998 | 2009-11-22 16:20:22 | 40 | 2 | NULL |
| 312 | Live aus Berlin | 1999 | 2009-11-22 16:29:11 | 40 | 2 | NULL |
| 313 | Rosenrot | 2005 | 2009-11-22 16:40:43 | 40 | 4 | NULL |
| 314 | The Very Best of Rammstein | 0 | 2009-11-22 16:51:38 | 40 | 2 | NULL |
| 315 | Live aus Berlin (bonus disc) | 0 | 2009-11-22 17:05:24 | 40 | 2 | NULL |
+-----+------------------------------+------+---------------------+-----------+----------+------------+
7 rows in set (0.02 sec)
Тег будет описывать нескольких исполнителей (например, Металл описывает Metallica, Pantera и Sepultura), а один исполнитель будет иметь несколько тегов (например, люди могут пометить Metallica как Металл, Рок и Металл 80-х.) Такого рода отношения между данными вероятно, будет производить три таблицы. Таблица художников, таблица тегов и таблица соединений. Например, ваши записи о присоединении будут выглядеть так (чисто воображаемая и гипотетическая ситуация)
| id | artist_id | tag_id |
| 1 | 34 | 357 |
| 2 | 98 | 234 |
artist_id из 34 может быть Metallica, а tag_id из 357 может быть Metal. Дело в том, что существует таблица, которая существует для связи тегов и исполнителей. В этом примере.
В общем, отношения - это способ связать записи. Существует три основных отношения: один к одному, многие ко многим и многие к одному.
Лучший способ полностью понять это - изучить Дизайн базы данных .