“常见概念”的数据库设计

时间:2011-11-26 16:32:03

标签: sql database-design relational-database database-schema

在我正在开发的项目中,我有几个“常见对象”跨越并关联其他几个表。

例如,想一想对象“评论”。它应该适用于许多不同的对象:照片,动作,事件......它总是具有相同的结构(作者,文本,插入时间......)

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

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

有这样的设计是否有任何缺点?

2 个答案:

答案 0 :(得分:0)

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

但是,如果您想要找到注释所属的实体,那么一对多的表会变得很痛苦,因为您必须查看所有链接表以查找注释所属的内容。当然,您可以在注释表中添加另一列以指示它所属的实体类型,然后您知道要转到哪个链接表。根据事物的声音,您的评论不属于多个实体,从而消除了这种复杂情况。

我会选择单个评论表(可能会将作者移到自己的表格中,这样您就可以轻松查看哪些评论属于一位作者,而不会在每条记录中复制作者信息)

答案 1 :(得分:0)

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

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

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