我有一个代表植物的模型。每种植物都有一个类型(花、树、灌木等)。然后,每种植物类型对一组属性都有不同的要求,其中一些植物可以具有多个值(栖息地、所在地区等)。例如,树木不可能有不止一种生命周期,而花有不同的生命周期。
我将如何对我的数据进行建模:
- 所有植物都在同一个模型中
- 对不同的植物类型实施一组属性
- 在集合中的这些属性中,其中一些可以为每株植物具有多个值,但都需要至少一个。
- 随着新植物类型的添加,创建新属性、新集合或重用旧属性的能力
到目前为止,我有一个植物表,它自己的表中的每个属性都有多个多对多关系,我将在代码中强制执行至少一个值。
http://i.imgur.com/82CoW15.png
我曾考虑过为属性使用 Entity-Attribute-Value,但这样我就不会真正受益于我正在使用的 ORM (SQLAlchemy)。与序列化 LOB 相同。
我想我需要类表继承,但我不确定如何处理某些属性可以有序地具有多个值。
Plant Habitat
----- |--> --> ------- --> Multiple values per plant
|
| Flower Life Cycle
|--> ------ --> ---------- --> Single Value
|
| Tree Cone Type
|--> ---- --> --------- --> Single value
|
| Shrub
|--> -----
另一种可能性是在运行时为每个新属性添加属性表,但我不确定如何在 SQLAlchemy 或任何其他 ORM 中完成此操作