<p>有一种东西叫做<a href="http://en.wikipedia.org/wiki/Object-relational_impedance_mismatch" rel="nofollow">Object-relational impedance mismatch</a>。松散地说,这意味着如果您不在数据库模型中使用继承,您将更加高兴。在</p>
<p>我不确定这是否可行/可取,但:</p>
<blockquote>
<p>Each plant type then has differing requirements for a set of
attributes, some of which a plant can have multiple values (habitat,
regions located, etc.). For example, trees are unlikely to have more
than one type of life cycle where as flowers have differing life
cycles.</p>
</blockquote>
<p>如果您主要关心的是<em>多重性</em>(或者说DBA语言的<a href="http://en.wikipedia.org/wiki/Cardinality_%28data_modeling%29" rel="nofollow">cardinality</a>),则不需要继承。你只需要一个“<a href="http://docs.sqlalchemy.org/en/rel_0_8/orm/relationships.html#one-to-many" rel="nofollow">one-to-many</a>”关系。例如,每个<code>plant</code>可以关联到“一对多”<code>life cycle</code>。在</p>
<p>如果<code>plant</code>的每一个子集为其父集添加一个或多个不同的属性,那么您将真正受益于继承。在</p>
<p>在这种情况下,你已经(至少?)SQLAlchemy的三种选择:</p>
<ul>
<li><a href="http://docs.sqlalchemy.org/en/rel_0_8/orm/inheritance.html#single-table-inheritance" rel="nofollow">Single table inheritance</a>:在这种情况下,在DB级别,只有一个表存储基类的任何实例。对于每个实例,只有必需的字段被“使用”</li>
<li>^{a5,每个类都有一个</li>
<li><a href="http://docs.sqlalchemy.org/en/rel_0_8/orm/inheritance.html#joined-table-inheritance" rel="nofollow">Joined table inheritance</a>:您有一个基类表和一些“附加”表来为不同的子类添加所需的属性</li>
</ul>
<p>选择一种解决方案还是另一种解决方案将取决于您的用例以及您(和外部应用程序)将如何查询数据库。在</p>