2009-11-29 71 views
1

想听听您的意见。在目前的阶段(1.1),你会在django中使用泛型关系还是坚持更传统的建模 - 考虑到它很难轻松地遍历和过滤这些关系(与ForeignKey,ManyToMany,OneToOne关系相比)?Django中的泛型关系

这里有一个例子 - 当每个用户最后一次看到每个页面时,他/她决定“关注”一篇文章时,他们希望接收电子邮件更新的频率以及他们何时请求最后一次,这种电子邮件最后发送给用户和页面修订日志。

因此构建一个有意义的电子邮件摘要我必须构造挺重的查询,以便用户不会获得更多的电子邮件比他们要求和消息是最翔实和简短。

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

使用通用关系的缺点 - 它很难编写复杂的查询,他们会运行速度较慢,上升空间 - 在模型更少的代码和广义对象更容易获得(例如活动)。

您是否发现了一种通用关系为您带来巨大优势的场景,除了只是一个有趣的概念?

也许你发现了一些其他的方式来模拟泛型关系?

谢谢。

回答

-1

一切都取决于你的需求/任务..

对于某些任务一般关系都很好(我使用它们) 对于其他更好的利用“传统模拟”

+3

“对于某些情况,这很好,对于某些情况它不好。”谢谢你没有说什么。 – 2009-11-29 10:31:24

2

我会质疑你的起始假设:

因为它尚未不可能遍历和反对这种关系很容易过滤

我认为遍历和过滤泛型关系并不是特别困难。只要定义关系的两端,前向和后向遍历的工作方式与正常ForeignKeys的工作方式大致相同。

完全有可能使这些查询与普通关系一样高效,所以我没有看到太多问题。

+0

你不需要每个泛型关系额外的两个连接吗?所以它们不能高效 - 至少在数据库级别。 – Evgeny 2009-11-29 20:09:30

+0

也许你应该在做出这个假设之前实现它并分析你的代码。 – Soviut 2009-12-03 06:30:32