2009-04-09 239 views
2

该应用程序处理用户和对象,用户对具有3个特征(每个特征一个费率)的对象进行评级。评级系统的数据库设计

编辑:最后一句不清楚:通过功能,我的意思是所有的对象

如何有效地设计这样的系统中的数据库共享审核规定? 什么是设计数据库处理评级系统的最佳做法?

我在想什么的:

表:

  • 用户
  • 对象
  • feat1rates
  • feat2rates
  • feat3rates

和关系: 对象具有许多

  • feat1rates
  • feat2rates
  • feat3rates

用户具有许多

  • feat1rates
  • feat2rates
  • feat3rates

回答

8

假设你是不会增加或减少的等级特征的数量来评价,我会做收视率的一个表格,将跟踪用户,产品,和三列(每功能)

因此,您可以将用户表,对象表和用户标识和对象ID作为组合主键的评分表一起使用,这样您可以对每个用户标准的每个对象执行一个评级。

4

非常奇怪的设计,我必须说。试想一下:

Object: ID, ... 

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

User: ID, ... 

UserObjectFeatureRating: UserID, ObjectFeatureID, Rating 
+0

它不清楚,但功能是由所有的对象共享,我刚刚更新了这个问题,谢谢你的完整答案 – 2009-04-09 13:45:40

7

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

我将创建下列表格:

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

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

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

ObjectFeature - 用于对象和特征的链接表。包含每个表的主键,从而在两者之间建立多对多关系。

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

从关系的角度来看,这是组织数据的一种比您提供的更好的方式。通过它的设计,它明确了每一组数据如何连接并实现可扩展性(例如添加额外的特征来评级,让不同的对象具有不同的特征来评级)更清晰。

+0

谢谢你的答案,但功能是相同的所有对象,我只是更新了问题 – 2009-04-09 13:44:51