gpt4 book ai didi

database - Django:遵循一对一关系的反方向

转载 作者:搜寻专家 更新时间:2023-10-30 20:02:49 25 4
gpt4 key购买 nike

我对 Django 建模一对一关系的方式有疑问。

假设我们有 2 个模型:A 和 B:

class B(models.Model):
bAtt = models.CharField()

class A(models.Model):
b = models.OneToOneField(B)

在创建的表A中有一个字段“b_id”,但是在Django创建的表B中没有“a_id”这个字段。

因此,给定一个 A 对象,检索相应的 B 对象肯定很快,只需通过 A 行的“b_id”列即可。

但是 Django 如何在给定 B 对象的情况下检索 A 对象呢?

最坏的情况是扫描A表在“b_id”列中搜索B.id。如果是这样,是否建议我们在 B 模型和表中手动引入一个额外的字段“a_id”?

提前致谢!

最佳答案

将 id 存储在其中一个表中就足够了。

在情况 1 中,(a.b) 生成的 SQL 将是

SELECT * from B where b.id = a.b_id

在情况 2 中,SQL 将是:

SELECT * from A where a.b_id = b.id

您可以看到两种方式生成的 SQL 是相似的,并且分别取决于它们的大小。

在几乎所有情况下,索引就足够了,而且只有 1 个 ID 的性能会很好。

关于database - Django:遵循一对一关系的反方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7552755/

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