在数据库中建模抽象基类和子类

Dan*_* T. 5 database-design abstract-class linq-to-sql

我有4个亚类:Video,Image,Note,和Form.每个包含不同类型的数据.例如,Image该类包含磁盘和图像属性上的图像文件的路径,Form该类包含表单字段值.但是,每个项目之间的共同元素是GPS坐标和标题,因此我有以下抽象基类:

public abstract class Content
{
    public float? Latitude { get; set; }
    public float? Longitude { get; set; }
    public float? Heading { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

但是,我朦胧的地方是如何在数据库中建模.目前,我有一个名为表Events(例如起见,假设一个事件是党的生日)和4个表(Videos,Images,Notes,和Forms).每个表都有一个链接回Events"主键"的外键.

使用LINQ-to-SQL,我为每个表获得5个类.例如Event.Images,如果我只想要一种类型的数据,这很好,但我想要做的是计算'内容'的总数Event并得到GPS坐标.我可以通过使用来轻松计算计数Event.Images.Count() + Event.Videos.Count() + ...,但我不能对GPS坐标做同样的事情.有没有什么方法可以建模数据库,以便我可以为每个项目使用基类,并且当我需要查看其数据时仍然能够获得单独的强类型项目?

Sin*_*hot 9

Martin Fowler的企业应用程序架构模式中记录了三种不同的模式,每种模式都有不同的权衡: