我有一个带有抽象基类的对象模型,以及从该基类继承的5-6个类。我想设计一个适当的关系数据模型来存储它们。设计数据模型的最佳方法是什么?
这是一个想要跟踪已发送消息的虚构应用程序的快速示例:
消息(基类)
EmailMessage (扩展消息)
PhoneMessage (扩展消息)
我倾向于为每个类创建一个单独的表,其中每个表 email_message 和 phone_message 仅包含其私有字段。它的美妙之处在于它反映了对象模型并且清晰地分离了关注点。不好的是,数据必须加载两次:一次用于确定具体类型,另一次用于从具体表中加载剩余数据。
我发现这是一个非常普遍的问题,我没有找到令人满意的答案。对于你的任何建议,我将不胜感激。你有什么经历?感谢。
皮特
答案 0 :(得分:1)
有多种方法可以做到这一点,选择取决于您。常见的解决方案是单表继承(STI),多表继承(MTI),也称为类表继承(CTI)和混凝土表继承。
使用STI,父类的所有子类的所有列都在单个表中定义。不使用某些列的类将其值存储为NULL。类的类型通常存储在附加列中。
使用MTI,所有超类列都存储在单个父表中,而每个子类的单独表保存其唯一字段。子类表上的外键链接回父记录。
具体表继承更进一步,并且每个子类都需要一个完全独立的表。
有很多文章推广各种方法 - STI通常最容易实现,而MTI / CTI可能会避免STI固有的某些问题(需要可空字段是常见字段)。