1

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

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

消息(基类)

  • 长身份证
  • 创建日期日期
  • 字符串文本

EmailMessage(扩展消息)

  • 字符串收件人列表

PhoneMessage(扩展消息)

  • 字符串电话号码

我倾向于为每个类创建一个单独的表,其中每个表email_messagephone_message只包含它们的私有字段。它的美妙之处在于它反映了对象模型并保持了清晰的关注点分离。坏事是数据必须加载两次:一次用于确定混凝土类型,另一次从混凝土表加载剩余数据。

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

皮特

4

1 回答 1

1

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

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

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

Concrete Table Inheritance 更进一步,需要为每个子类创建一个完全独立的表。

有许多文章宣传了各种方法 - STI 通常最容易实现,而 MTI/CTI 可以避免 STI 固有的某些问题(必需的可空字段是常见问题)。

于 2013-02-11T22:36:30.017 回答