具有评级主题的架构设计

时间:2014-06-21 02:06:14

标签: scala database-design database-schema

我正在开发一个用户评价文章的新项目。我有一个主题/标签列表,根据博客帖子与该主题的相关程度,评分为0-3。

0表示该主题与文章无关,3表示该主题与文章有很大关系。唯一的问题是每篇文章都必须与所有主题有一些关系,无论该主题是否与文章有关。

这是我提出的(实际上有20个主题)

/**
 * Option 1
 *
 * for every article created, a tag will be
 * created for each topic all containing a reference
 * to the article
 */
trait Topic
object Topics {
  topic1 extends Topic
  topic2 extends Topic
  topic3 extends Topic
}

case class Article(id:Int, title:String, content:String)
case class Tag(id:Int, articleId:Int, topic:Topic)

/**
 * Option 2
 *
 * remember each topic has a rating 0-3
 * and there are actually about 20 total topics
 */
case class Article(id:Int, 
title:String, 
content:String, 
topic1:Int,
topic2:Int,
topic3:Int)

/**
 * Option 3
 *
 * topics with either a rating of 2 or 3
 * will be created with a reference to the article
 * and topics with a 0 with be created but inside a
 * "has_nothing_to_do_with_the_article" table
 * all the other topics will be not be created and will
 * just default to 1.
 */

拜托,对于任何建议,我都非常感激。这样的事情有哪些最佳实践(如模式和数据库建模)?

1 个答案:

答案 0 :(得分:0)

这取决于您选择的数据库。

  1. 20个主题的20个字段是可能的,但实际上很难看,并且可能会达到Scala的元组或案例类中22字段的限制。

  2. 如果您使用的是像mongodb这样的NoSQL,可以将一个Map或Array放入Article类来表示关系。

  3. 如果您使用的是传统的RDBMS,另一种可能的方法是使用另一个评级表来建模从文章到主题的评分。

  4. 通常,最佳选择是针对您的特定方案优化和限制一般解决方案。如上所述,如果评级值是0-3之间的整数,且主题最多为20.您可以将这些值编码为长整数,并在模型类中提供辅助方法,以达到两全其美的效果。