【发布时间】:2011-12-20 16:38:27
【问题描述】:
假设我有两个表(我使用的是 Django,但这个问题主要与语言无关):
Organization(models.Model):
name = models.CharField(max_length=100)
Event(models.Model):
organization = models.ForeignKey(Organization)
name = models.CharField(max_length=100)
允许用户创建活动和组织。两个不同的用户有可能创建应该类似于同一个现实世界组织的组织对象。当有人注意到这个问题时,他们应该能够合并这两个对象,这样就只有一个组织了。
我的问题是:如何合并这两个组织,以确保如果用户错误地合并它们,我可以“取消合并”它们?因此,删除一个组织对象并将所有事件指向另一个的简单解决方案不是一种选择。我在这里寻找有关最佳实践的高级指南。
一些可能的解决方案:
- 添加另一个表,将已“合并”的组织连接在一起并以这种方式跟踪合并
- 在组织上添加外键字段以指向与其合并的组织
- 保留合并前所有原始对象的副本,使用类似django-reversion
【问题讨论】:
-
不属于你的世界,但 OWL 和 FOAF 本体正是为此而设计的……它们基于规则定义,两个对象之间的等价声明随后可能被撤销或争议。在数据库世界中,这相当于在两个组织之间添加另一个链接表 - 很容易填充,但是您很难查询到正确的问题。
-
看起来 OWL 和 FOAF 可能不适用于我正在做的事情,但感谢您提出这个问题!学习新事物很有趣。
-
至于您对在不同组织之间添加链接的评论,我同意这绝对是一种现实的方法,尽管在实践中有点烦人,因为查询会更复杂。
-
是的 - 我想我会为你扔掉那个通配符,但如此完全地切换齿轮并不实际。这些查询可能会有点烦人 - 这些问题会很棘手,您需要将它们融入到您所问的几乎所有问题中......
-
同意。我越想如何处理对链接模型的查询,我发现的问题就越多。我倾向于一种更接近 django-reversion 的解决方案,我只需跟踪所有以前的数据,然后根据这些数据找出如何取消合并。
标签: python database django django-models schema