【发布时间】:2011-06-08 09:29:09
【问题描述】:
我在 symfony 项目中使用 Doctrine 1.2, 我正在考虑在我的模式中混合具体和列聚合继承类型: 列聚合让我可以在父表中查询并获取父记录和子记录,而具体的继承让我获得更清晰的架构。 另外,混合将在同一个继承链中。 我将如何编写模式文件?喜欢下面的?
A:
B:
inheritance:
extends: A
type: concrete
C:
inheritance:
extends: B
type: column_aggregation
keyField: type
keyValue: 1
或者像这样:
A:
B:
inheritance:
extends: A
type: concrete
C:
inheritance:
extends: B
type: concrete
D:
inheritance:
extends: C
type: column_aggregation
keyField: type
keyValue: 1
E:
inheritance:
extends: C
type: column_aggregation
keyField: type
keyValue: 2
有什么危险/注意事项吗?
【问题讨论】:
-
看起来没有其他人有经验可以分享。不过我很想知道这是怎么回事——我最初的想法是它不会很好用。
-
@benlumley 好吧,我们已经尝试过了,我们正在测试,目前它似乎工作得很好。如果我们遇到一些问题,我会编辑我的帖子并添加评论。我们尝试了架构的第二个版本。
-
@greg0ire:当涉及到具体继承时,请注意关系 :-) 确保您没有在基表上定义它们。我从来没有在任何程度上混合和匹配,所以很想听到你遇到的任何问题......
-
@prodigitalson:你能详细说明一下吗?为什么继承关系是危险的?因为国外的别名。我会在这里发布我遇到的任何问题(包括这个问题,如果它是一个)。
-
@greg0ire:因为有了具体继承,基表 (
A) 已创建但未使用。如果您有指向A的外键,则键检查将失败,因为数据实际上存储在B中。只要您将关系保留在聚合表上,您就应该没问题。但在某些情况下,这会破坏以A开头的目的。
标签: inheritance symfony1 doctrine concrete-inheritance column-aggregation