3

该应用程序处理用户和对象,用户对具有 3 个特征的对象进行评分(每个特征一个评分)。

编辑:最后一句话不清楚:我所说的特征是指所有对象共享的标准

为这样的系统设计数据库的效率如何?设计处理评级系统的数据库的最佳实践是什么?

我在想什么:

表:

  • 用户
  • 对象
  • 成绩单
  • 成绩单
  • 费率

和关系:一个对象有很多

  • 成绩单
  • 成绩单
  • 费率

一个用户有很多

  • 成绩单
  • 成绩单
  • 费率
4

3 回答 3

8

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

所以你有你的用户表、一个对象表和你的评级表,它有用户 ID 和对象 ID 作为组合的主键,这样你就可以根据用户标准对每个对象执行一个评级。

于 2009-04-09T13:21:36.510 回答
7

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

我将创建以下表格:

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

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

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

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

UserRating - ObjectFeature 和用户之间的另一个链接表。包含这两个表的主键,以及分配的等级。

From a relational standpoint, this is a better way of organizing the data than what you presented. Through its design it makes clear how each set of data is connected and makes expandability (e.g. adding additional features to rate, having different objects have different features to rate) much cleaner.

于 2009-04-09T13:24:49.450 回答
4

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

Object: ID, ...

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

User: ID, ...

UserObjectFeatureRating: UserID, ObjectFeatureID, Rating
于 2009-04-09T13:14:49.287 回答