gpt4 book ai didi

django 之间的区别 - 一对一、多对一和多对多

转载 作者:行者123 更新时间:2023-12-04 04:42:57 36 4
gpt4 key购买 nike

所以,这是我第一次学习计算机语言。我选择了python和django。现在,我了解了 python 和 django 的许多基本概念。我可以使用 View 和所有其他内容创建新页面。但我仍然对这些关系感到困惑,即一对一、多对一和多对多。请有人请向我解释一下。我该如何使用它?我真的需要知道。

谢谢。

最佳答案

尤其是 django,它使复杂的数据库设计变得轻而易举,我认为了解它们如何在 SQL 级别上工作以更好地理解您正在做的任何事情非常重要。我认为一个例子是理解这一点的最好方法。

您应该了解的第一件事是每个 SQL 表都有一个称为“主键”的字段(通常是自动递增的)。该字段是每行具有唯一值的列。

假设在 django 中,您创建了一个代表作者的模型,该模型具有三个字段 - first_name、last_name 和一个包含电子邮件的可选字段。 Django 还会自动添加主键字段并将其命名为 pk(您也可以决定定义自己的字段以用作主键,但通常不这样做)。因此,当使用命令 manage.py syncdb 时,它将创建一个如下所示的表:

+----+------------+-----------+-----------------------+
| pk | first_name | last_name | email |
+----+------------+-----------+-----------------------+

当您添加一个新值(例如“Stephen King”)时,它会将其添加到作者表中,如下所示:
+----+------------+-----------+-----------------------+
| pk | first_name | last_name | email |
+----+------------+-----------+-----------------------+
| 1 | Stephen | King | stephenking@gmail.com |
+----+------------+-----------+-----------------------+

让我们添加另一个:
+----+------------+-----------+-----------------------+
| pk | first_name | last_name | email |
+----+------------+-----------+-----------------------+
| 1 | Stephen | King | stephenking@gmail.com |
| 2 | J.D. | Salinger | |
+----+------------+-----------+-----------------------+

这很简单。现在我们添加一个名为 Book 的新模型:
+----+--------------+--------+--------+
| pk | title | genre | author |
+----+--------------+--------+--------+
| 1 | Pet Semetary | Horror | 1 |
+----+--------------+--------+--------+

现在看看我在那里做了什么?在作者字段中,我为 book 提供了 Stephen King 主键的值 - 请记住,它是唯一的,因此它只会取回 Stephen King。那是 外键 - 它指向相关表上的 pk,并表示 多对一 关系,即不同的书可以指向一个作者的同一个pk,但不能反过来。这样每个作者都可以拥有许多相关的书籍,但每本书只有一个作者。

现在假设我们要添加斯蒂芬金的另一本书。这个叫做护身符:
+----+--------------+---------+--------+
| pk | title | genre | author |
+----+--------------+---------+--------+
| 1 | Pet Semetary | Horror | 1 |
| 2 | The Talisman | Fantasy | 1 |
+----+--------------+---------+--------+

但是,哦,等等——最后一个实际上是与另一位名叫彼得·斯特劳布的作者合着的。那么我们该怎么办?我们首先需要将 Straub 添加到我们的作者表中:
+----+------------+-----------+-----------------------+
| pk | first_name | last_name | email |
+----+------------+-----------+-----------------------+
| 1 | Stephen | King | stephenking@gmail.com |
| 2 | J.D. | Salinger | |
| 3 | Peter | Straub | |
+----+------------+-----------+-----------------------+

但是现在我们如何告诉表格 The Talisman 与两个不同的行相关?简单 - 使用 第三表将两者联系起来。

所以表一将是作者(如上所示)。第二张 table 是书。第三个表将被称为 authors_books 并且看起来像这样:
+------------+--------------+
| pk_of_book | pk_of_author |
+------------+--------------+
| 1 | 1 |
| 2 | 1 |
| 2 | 3 |
+------------+--------------+

看?它告诉您如何在表之间链接不同的 pk。这是 多对多 关系,因为不同的书可以与不同的作者相关,反之亦然。我描述的三表模式是它的基本设计。

一对一 关系类似于 ForeignKey 但带有 unique=True所以你只能将一个对象链接到另一个对象,仅此而已。它通常用于当您想要扩展某个模型而不更改原始模型时(例如,您想将自己的自定义字段添加到内置的用户模型中)。

希望这有助于澄清事情。 Django 太棒了,您几乎不需要使用 SQL,但它仍然有助于了解一些后台发生的事情。网上有很多关于这些关系的解释,我只给你一个小的一般介绍,我强烈建议你谷歌一下,扩大你自己的理解。祝你好运!

关于django 之间的区别 - 一对一、多对一和多对多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19641841/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com