2011-11-26 104 views
1

在我正在开发的项目中,我有几个“常见对象”跨越并关联了其他几个表。“通用概念”的数据库设计

例如,在对象“Comment”处考虑。它应该适用于许多不同的对象:照片,动作,事件...并且它始终具有相同的结构(作者,文本,插入时间,...)

我采用的第一个解决方案是对每种评论都有单独的表格:PhotoComments,EventComments,并将这些表格与相关对象关联(例如)一个photo_id列与一对多关系。

第二个(和当前的)包含一个单独的评论表(每个都有自己的ID)并且具有所需的“多对一”支持表以将这些评论与他们的照片。

有这样的设计有什么缺点吗?

+0

你的问题针对哪个设计? – Oded

+0

到第二个 – Onip

回答

0

如果您加载评论所属的数据,然后查找分配给它的评论,那么单个评论,一对多评论会很好。

如果您想要查找评论所属的实体,则一对多表格会变得非常痛苦,因为您必须查看所有链接表以查找评论所属的内容。当然,你可以在你的评论表中添加另一列来表明它属于哪个实体类型,然后你就知道要去哪个链接表。从事物的声音中,您的评论不属于多个实体,这消除了复杂性。

我会跟单comments表去(也许移动笔者为它自己的表,所以你可以很容易地看到哪些意见属于作者之一,而不要重复每个记录中作者信息)

+0

由于这将是产品的演示,我认为我会坚持已经实施的“通用表”设计。 – Onip

0

我能想到的一个缺点来自桌面锁定。

说有查询的照片评论。根据您的设置,表格可能会锁定以检索此照片评论。然后再说一个动作评论的另一个查询。如果该表被锁定为照片评论,则此新查询必须等待它完成。

根据表的大小以及对其中的数据进行查询的频率,此表可能会成为架构中的性能瓶颈。如果你不认为这会成为一个问题,那么做单个表格可以更容易维护。但是,如果评论会有很多争议,那么拆分表格会帮助你。