【问题标题】:Different inheritance types in the same schema同一架构中的不同继承类型
【发布时间】: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


【解决方案1】:

只要你避免循环继承或菱形继承,你就可以使用它

一个循环继承(显然如下

A 类扩展 B B 类扩展 A

A 类扩展 C

B 类扩展 A

C 类扩展 A

Diamond 形状的继承更加圆润。当发生以下类型的情况时会发生这种情况

A类

B 类扩展 A

C 类扩展 A

D 类扩展 B、C

【讨论】:

  • 您是说多继承可以通过教义实现吗?由于它不是 php,我对此表示怀疑......虽然词汇量 +1
  • 我想说的是,只要这些约束不存在。我们可以安全地进行继承。
猜你喜欢
  • 2017-10-21
  • 2015-08-25
  • 2017-06-02
  • 1970-01-01
  • 2012-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多