Python 外键优于integerfield的优点

Python 外键优于integerfield的优点,python,django,database,Python,Django,Database,我不确定这是不是一个合适的问题。我知道答案,但我真的不知道为什么,当我向我的团队提出这个问题时,我需要证据 我们在Django网站上发表了许多博客文章。可以克隆其中一篇博客文章,将其复制到另一个站点。当前开发人员的做法是将原始帖子的pk作为克隆源存储在克隆帖子的IntegerField中。因此,要获得故事的克隆,我们需要: clone=BlogPost.all\u sites.filterclone\u source=pk 在我看来,作为一种外键关系,这种结构会更好 我说得对吗?为什么 删除的对

我不确定这是不是一个合适的问题。我知道答案,但我真的不知道为什么,当我向我的团队提出这个问题时,我需要证据

我们在Django网站上发表了许多博客文章。可以克隆其中一篇博客文章,将其复制到另一个站点。当前开发人员的做法是将原始帖子的pk作为克隆源存储在克隆帖子的IntegerField中。因此,要获得故事的克隆,我们需要:

clone=BlogPost.all\u sites.filterclone\u source=pk

在我看来,作为一种外键关系,这种结构会更好

我说得对吗?为什么

删除的对象 如果您决定删除原始帖子,则需要一个单独的查询来处理您希望对克隆帖子执行的任何操作,而不是使用FK的on_delete kwarg

这是一个额外的问题 如注释中所述,外键允许您直接通过ORM关系方法遍历关系

数据结构可视化工具 这些将无法从整数字段向下遍历任何内容,因为它将认为它位于叶节点


尽管如此,在整个过程中,房间里的大象是克隆仍然只是重复的数据,所以我想知道为什么你不让一篇博客文章被多次引用,那么你就不必担心如何存储克隆了。

好吧,是的,只要添加适当的约束,克隆源列就可能成为数据库级别的FK,这可以反映在Django模型级别。我需要很好地说明为什么这是一种改进,无论是在代码维护方面,还是在效率方面,还是在其他方面。您可以直接访问克隆的post source对象作为某个_post.clone_源,它将从DB中获取它。如果需要,您还可以使用指向该帖子的对象预回迁该帖子。IDK关于你的问题领域,所以我无法判断什么是改进。它还不是活代码,我只是认为它很愚蠢,但我需要说明为什么如果它是一个好主意,那么改变它是一个好主意is@thumbtackthief根据您的分享,我认为在本例中可以将其存储为整数。如果它没有坏,可能就不值得换了。不过,你必须对这件事做出判断。