1

假设我有一个服装产品数据库。除了许多其他字段外,数据库还需要存储每个产品的不同类别的评分(满分 10 分)。

例如,一个类别可以是“场合”。场合可能如下:

穿去办公室 穿去参加婚礼 穿去约会... 穿去参加葬礼

每个产品都需要为每个产品分配 10 分。因此,一种产品可能具有:

办公室:5 婚礼:7 日期:10 葬礼:0

这表明该项目是令人愉快的,不是太低调,也不是太正式。

有许多这样的类别,这些类别将用作搜索算法的一部分,因此速度可能是一个问题。我也不希望我的产品表变得很大。这意味着我对将其存储在产品表中感到不安,因为每个响应都有自己的列。

可能以这种方式存储,除非在具有连接的不同表中?只是在寻找一个相当灵活和优雅的解决方案。

如果我不清楚,请告诉我。

PS我正在使用MySQL,如果这有所作为......

编辑:我不认为有一个类别表和一个带有 product_id、category_id 和 score 的连接表会很好用。您要么必须将连接中的每个分数列(例如,wedding_score 等)命名为别名,要么返回多个分数列(每个类别一个)。

4

3 回答 3

1

你在正确的轨道上。有一个“类别”表,中间表有两列,一个是产品的PK,另一个是产品的PK;加上三分之一的分数。很标准的图案。然后通常中间表将有一个复合 PK(例如 productid + categoryid)和 categoryid 上的另一个非唯一索引。

于 2009-02-22T21:28:40.130 回答
1

编辑:我不认为有一个类别表和一个带有 product_id、category_id 和 score 的连接表会很好用。您要么必须将连接中的每个分数列(例如,wedding_score 等)命名为别名,要么返回多个分数列(每个类别一个)。

我认为这是要走的路,因为它可以让您以相同的方式对待不同的分数。当分数类型被添加、重命名、删除等时,您的大部分代码都不需要调整。

如果您担心用于聚合此信息的复杂连接,也许一两个视图会有所帮助。

于 2009-02-22T23:52:08.663 回答
0

好吧,关系数据库针对存储关系进行了优化,因此一个用于存储项目描述的表、另一个用于评分类别(包括分数描述)和一个连接表(项目到评分)似乎是完美的答案。

有什么缺点?那么,每个项目都会有几个分数记录,这是真的。在查询浏览器中也不会那么可读。但是使用正确的键和索引,它会足够快地使用你需要的方式。

于 2009-02-22T23:39:57.177 回答