我有一个具有抽象基类和5-6类的对象模型,继承自该基类。我想设计一个适当的关系数据模型来存储它们。设计数据模型的最佳方法是什么?
下面是一个想要跟踪发送的消息的虚构应用程序的快速示例:
消息(基类)
EmailMessage (扩展消息)
PhoneMessage (扩展消息)
我倾向于为每个类创建一个单独的表,其中每个表email_message和phone_message只包含它们的私有字段。它的美妙之处在于它反映了对象模型,并保持了清晰的关注点分离。不好的是,数据必须加载两次:一次用于确定具体类型,另一次用于从具体表加载剩余数据。
我发现这是一个很常见的问题,我还没有找到一个令人满意的答案。我将感谢你的任何建议。你的经历是什么?谢谢。
皮特
发布于 2013-02-11 22:36:30
有多种方法可以做到这一点,而选择取决于你。常见的解决方案是单表继承(STI)、多表继承(MTI),也称为类表继承(CTI),以及具体的表继承。
使用STI,父类的所有子类的所有列都定义在一个表中。不使用某些列的类将其值存储为NULL。类的类型通常存储在另一列中。
使用MTI,所有超类列都存储在一个父表中,而每个子类的单独表则保存它们的唯一字段。子类表上的外键链接回父记录。
具体表继承更进一步,需要为每个子类提供一个完全独立的表。
有许多文章介绍了各种方法-- STI通常是最简单的实现方法,而MTI/CTI可能避免STI固有的某些问题(所需的可空字段是常见的)。
https://stackoverflow.com/questions/14821752
复制相似问题