【问题标题】:Database design issue - multiple scores in different categories数据库设计问题 - 不同类别的多个分数
【发布时间】:2010-10-09 05:12:41
【问题描述】:

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

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

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

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

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

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

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

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

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

如果这有什么不同的话,我正在使用 MySQL...

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

【问题讨论】:

  • 为什么不要中间表?

标签: mysql database-design rdbms


【解决方案1】:

编辑:我不认为有一个类别 表和一个连接表 product_id、category_id 和分数 会很好用。你要么 必须命名每个分数列(例如 婚礼分数等)在加入中 别名,或获取多个分数列 返回(每个类别一个)。

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 那么连接表必须有 3 个列:product_id、category_id、score?还是我错过了什么?
    • @rmbarnes:是的,还有得分。并为PK添加另一个ID......组合PK很麻烦
    • 我在麻烦上有所不同;除非您使用的框架需要开销。
    • 我真的没有双 PKS 的问题,我知道有些人这样做,可能是因为框架讨厌它。
    • 我认为您的说法不会那么好,很难确定哪个分数是哪个类别的(就列名而言,您只有多个分数列。 ...)
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-07-20
      • 2015-05-18
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 2014-11-12
      • 2013-05-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多