数据库设计解决方案建议

时间:2010-06-29 13:02:30

标签: database-design

我是数据库设计的新手,我想得到你的意见:-)。 我需要为CMS设计一个简单的数据库,CMS将为我的网站管理文章和博客帖子。 我的问题:

A) 由于DB for Articles和Blog Posts中的字段相同(例如:标题,主要内容)期望“类型”(帖子或完整文章),我认为这将是一个很好的设计解决方案,有一个表“页面”和关联“类型”的查找表。

  • 这是一个很好的设计解决方案吗?
  • 何处放置聚集索引以提高性能?

B) 文章和博客文章可能具有“顶级文章”或“编辑选择”等属性。 我想管理这个属性,在“IsTop Article”和“IsEditorChoice”之类的“Pages”表中添加一个Field。

  • 这是一个很好的设计解决方案吗?
  • 可以使用单独的表并将这些字段的FK关联起来吗?

2 个答案:

答案 0 :(得分:1)

如果你必须改变任何一种类型(帖子或文章),你最终会得到很多空字段。

通常,如果一个实体独立存在,它应该拥有自己的数据库表。

对于聚集索引 - 通常会将其放在id字段上。开始考虑在selectwhere子句中使用的字段上添加非聚簇索引,但不要过分,因为索引太多会影响插入性能。

至于“热门文章”和“编辑选择”字段 - 这取决于您使用它们的方式以及它们与帖子和文章的关系。

答案 1 :(得分:1)

在设计数据库时,确定您的数据元素(文章,帖子)以及数据元素的属性(类型,顶级文章,编辑器选择)是什么。

始终存在的属性(如“type”)可以在数据元素表中拥有自己的列,因为它们将始终填充。如果数据元素可以有多个“类型”,那么您需要将“类型”分离为一个单独的表(一对多关系)。

顶级文章和编辑器选择等属性与每个数据元素都没有关联,因此它们应该位于单独的表中。将它们视为类别。通过将它们放在单独的表中而不是列中,您可以轻松添加“类别”而无需修改表结构。

我建议这样一个基本结构:

content
content_categories (relation between content and categories)
categories
content_type (relation between content and type)
types