应用程序处理用户和对象,用户对具有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