【问题标题】:Generic relations in DjangoDjango 中的通用关系
【发布时间】:2009-11-29 06:52:00
【问题描述】:

想听听您的意见。在当前阶段(1.1),您会在 django 中使用通用关系还是坚持更传统的建模 - 鉴于目前还不可能轻松地遍历和过滤此类关系(与 ForeignKey、ManyToMany、OneToOne 关系相比)?

这是一个示例 - 我在数据库中记录每个用户最后一次看到每个页面的时间、他/她决定“关注”一篇文章的时间、他们希望多久接收一次电子邮件更新以及他们何时请求上次,上次向用户发送此类电子邮件的时间以及页面修订日志。

因此,为了构建一个有意义的电子邮件摘要,我必须构建非常繁重的查询,这样用户就不会收到比他们要求的更多的电子邮件,并且消息是最翔实和简短的。

一种方法 - 定义可能适合任何场景的 Activity 模型,并使用通用关系将它们连接到其他模型,另一种方法 - 定义单独的模型 PageView、EmailUpdateLog、EmailSubscription 并以“常规方式”访问它们。

使用泛型关系的缺点 - 编写复杂查询的代码更加困难,它们运行速度会更慢,优点是 - 模型中的代码更少并且更容易访问泛化对象(例如 Activity)。

您是否发现了一个场景,其中泛型关系除了成为一个有趣的概念外,还给您带来了巨大的优势?

也许您找到了其他模拟泛型关系的方法?

谢谢。

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    我会质疑你的假设:

    鉴于目前还不可能轻松地遍历和过滤此类关系

    我认为遍历和过滤泛型关系并不是特别困难。只要您定义了关系的两端,向前和向后遍历的工作方式与使用普通外键的工作方式大致相同。

    完全有可能使这些查询与普通关系一样高效,因此我认为问题不大。

    【讨论】:

    • 每个通用关系不需要额外的两个连接吗?所以它们不能那么高效 - 至少在数据库级别。
    • 也许你应该在做出这个假设之前实现它并分析你的代码。
    【解决方案2】:

    一切都取决于您的要求/任务..

    对于某些任务,通用关系很好(我使用它们) 为了其他更好的使用“传统建模”

    【讨论】:

    • "在某些情况下它是好的;在某些情况下它是不好的。"谢谢你什么都没说。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 2015-04-03
    • 2011-12-11
    • 2016-09-22
    • 1970-01-01
    相关资源
    最近更新 更多