Grails域设计:继承还是一个具有可空属性的类?

Grails域设计:继承还是一个具有可空属性的类?,grails,inheritance,gorm,Grails,Inheritance,Gorm,我有一个域OrderItem 目前,OrderItem仅指啤酒。产品是啤酒的一种。包装为罐/瓶/桶/等 然后客户决定也销售非啤酒的商品:烈酒、配料、纪念品等 我认为这些都是OrderItem对象,但系统目前将OrderItem视为啤酒。我应该如何介绍扩展模型?注意:有些新产品没有产品、包装或两者都没有 遗产仍然只将OrderItem视为啤酒。然后,所有新项都将有自己的类来扩展OrderItem。利弊每个层次结构还是每个类的表? Add propertiessome是否可以为Null以区分Orde

我有一个域OrderItem

目前,OrderItem仅指啤酒。产品是啤酒的一种。包装为罐/瓶/桶/等

然后客户决定也销售非啤酒的商品:烈酒、配料、纪念品等

我认为这些都是OrderItem对象,但系统目前将OrderItem视为啤酒。我应该如何介绍扩展模型?注意:有些新产品没有产品、包装或两者都没有

遗产仍然只将OrderItem视为啤酒。然后,所有新项都将有自己的类来扩展OrderItem。利弊每个层次结构还是每个类的表? Add propertiessome是否可以为Null以区分OrderItem中的新项目?比如“类别”、“someItemCode”、“someItemPricing”等。 我更喜欢第二个,添加额外的属性,比如category或itemType

因此,当添加新字段时,迁移脚本必须为所有现有记录将itemType字段值设置为Beers,因为您拥有的所有产品都是Beers


我不知道哪些字段将为空,但如果OrderItem表仍有许多可为空的列,则需要对其进行规范化

我要说的是,使用第二种方法,向OrderITem添加属性,该属性表示它是什么项目、它的代码、价格等等。。我们希望您可以轻松地支持新项目,而无需为将来可能需要支持的每个新项目添加子类。如果您决定使用继承,如果您不需要多态查询,请使用每个类的表,即单个查询以查找价格低于100的所有订单项目Sprit、配料、纪念品。若您需要多态查询,并且可以在没有非空约束的情况下生存,那个么可以使用每个类的表层次结构。每个层次结构的表将提供更好的性能,每个类的表将提供指定空约束的能力
class OrderItem {
    Product product
    Packaging packaging
    //other details
}

class Product {
 //other details
}

class Packaging {
//other details
}