我正在开发一个用户评价文章的新项目。我有一个主题/标签列表,根据博客帖子与该主题的相关程度,评分为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.
*/
拜托,对于任何建议,我都非常感激。这样的事情有哪些最佳实践(如模式和数据库建模)?
答案 0 :(得分:0)
这取决于您选择的数据库。
20个主题的20个字段是可能的,但实际上很难看,并且可能会达到Scala的元组或案例类中22字段的限制。
如果您使用的是像mongodb这样的NoSQL,可以将一个Map或Array放入Article类来表示关系。
如果您使用的是传统的RDBMS,另一种可能的方法是使用另一个评级表来建模从文章到主题的评分。
通常,最佳选择是针对您的特定方案优化和限制一般解决方案。如上所述,如果评级值是0-3之间的整数,且主题最多为20.您可以将这些值编码为长整数,并在模型类中提供辅助方法,以达到两全其美的效果。