评级系统的数据库设计

时间:2009-04-09 13:10:45

标签: sql database-design rating-system

应用程序处理用户和对象,用户对具有3个功能的对象进行评级(每个功能一个速率)。

编辑:最后一句不清楚:功能我的意思是所有对象共享的标准

如何有效地为这样的系统设计数据库? 设计处理评级系统的数据库的最佳做法是什么?

我在想什么:

表:

  • 用户
  • 物体
  • feat1rates
  • feat2rates
  • feat3rates

和关系: 一个对象有很多

  • feat1rates
  • feat2rates
  • feat3rates

用户有很多

  • feat1rates
  • feat2rates
  • feat3rates

3 个答案:

答案 0 :(得分:8)

假设您不打算增加或减少评级功能的数量,我会制作一个评级表来跟踪用户,产品和三列(每个功能一个)

因此,您拥有Users表,Objects表和您的Ratings表,其中UserID和ObjectID作为组合主键,这样您就可以按照每个用户标准对每个对象强制执行一次评级。

答案 1 :(得分:7)

您希望以这样一种方式封装数据,即每个表只包含与其需要处理的内容直接相关的信息。创建链接表以提供不同数据集(在本例中为用户和对象)之间的关系。

我会创建以下表格:

用户 - 用户的基本信息:登录名,密码,用户ID,无论您需要什么。

对象 - 要评分的对象:其名称/ ID和属性。

功能 - 描述功能类型的表格,其中包含某种功能名称/ ID。这可能从您的三种主要类型开始,但您可以随时扩展/修改它。您还可以自定义每个对象可用于评级的功能。

ObjectFeature - 对象和功能的链接表。包含每个表的主键,在两者之间创建多对多关系。

UserRating - ObjectFeature和User之间的另一个排序链接表。包含这两个表的主键以及指定的分级。

从关系角度来看,这是一种比您提供的更好的数据组织方式。通过它的设计,它可以清楚地表明每组数据是如何连接起来的,并且可以扩展(例如,添加额外的功能以进行评级,使不同的对象具有不同的特征以进行评级)更加清晰。

答案 2 :(得分:4)

非常奇怪的设计,我必须说。考虑:

Object: ID, ...

// Provided features cannot be shared between objects
ObjectFeature: ID, ObjectID, ... 

User: ID, ...

UserObjectFeatureRating: UserID, ObjectFeatureID, Rating
相关问题