我找遍了关于关系的简单解释,但没有找到任何东西,所以我将在这里尝试总结一下。
关系并不是严格意义上的 Django 事情。如果您真的想了解 Django 在做什么,请了解一般的数据库概念。
当您有多个信息表时,您需要以某种方式链接它们。如果您经营像 last.fm 这样的音乐网站,您将需要了解艺术家、流派、标签、歌曲、专辑等。所有这些数据都以某种方式相关。
例如,一位艺术家将有许多专辑(一对多),一种流派将适用于许多艺术家(一对多)。例如Metallica(一位艺术家)将有几张专辑,Black Album、St. Anger 等,但一张专辑可能不属于两位艺术家,例如Alicia Keys 和 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)
一个标签将描述几位艺术家(例如 Metal 描述 Metallica、Pantera 和 Sepultura),而一个艺术家将有多个标签(例如,人们可能将 Metallica 标记为 Metal、Rock 和 80s Metal。)数据之间的这种关系可能会产生三个表。一个艺术家表、一个标签表和一个连接表。例如,您的加入记录将如下所示(纯属虚构和假设情况)
| id | artist_id | tag_id |
| 1 | 34 | 357 |
| 2 | 98 | 234 |
artist_id 34 可能是 Metallica,tag_id 357 可能是 Metal。关键是,存在一个链接标签和艺术家的表。在这个例子中。
一般来说,关系是链接记录的一种方式。存在三种主要关系,一对一、多对多和多对一。
完全理解这一点的最好方法是学习Database Design。