如何将对象继承映射到数据模型?

时间:2013-02-11 22:04:24

标签: sql database oop inheritance

我有一个带有抽象基类的对象模型,以及从该基类继承的5-6个类。我想设计一个适当的关系数据模型来存储它们。设计数据模型的最佳方法是什么?

这是一个想要跟踪已发送消息的虚构应用程序的快速示例:

消息(基类)

  • long id
  • 日期创建日期
  • 字符串文字

EmailMessage (扩展消息)

  • String recipientList

PhoneMessage (扩展消息)

  • String phoneNumber

我倾向于为每个类创建一个单独的表,其中每个表 email_message phone_message 仅包含其私有字段。它的美妙之处在于它反映了对象模型并且清晰地分离了关注点。不好的是,数据必须加载两次:一次用于确定具体类型,另一次用于从具体表中加载剩余数据。

我发现这是一个非常普遍的问题,我没有找到令人满意的答案。对于你的任何建议,我将不胜感激。你有什么经历?感谢。

皮特

1 个答案:

答案 0 :(得分:1)

有多种方法可以做到这一点,选择取决于您。常见的解决方案是单表继承(STI),多表继承(MTI),也称为类表继承(CTI)和混凝土表继承。

使用STI,父类的所有子类的所有列都在单个表中定义。不使用某些列的类将其值存储为NULL。类的类型通常存储在附加列中。

使用MTI,所有超类列都存储在单个父表中,而每个子类的单独表保存其唯一字段。子类表上的外键链接回父记录。

具体表继承更进一步,并且每个子类都需要一个完全独立的表。

有很多文章推广各种方法 - STI通常最容易实现,而MTI / CTI可能会避免STI固有的某些问题(需要可空字段是常见字段)。