【问题标题】:Database design for a product aggregator产品聚合器的数据库设计
【发布时间】:2011-07-30 23:14:40
【问题描述】:

我正在尝试为产品聚合器设计一个数据库。每个产品都有关于它来自哪里、它的成本、它是什么类型、价格、颜色等的信息。用户需要能够根据任何这些产品类别搜索和过滤结果。我也希望有大量的用户。我最初的想法是有一个大表,其中包含每个产品,每条信息都有一个列,并且我需要能够搜索的任何内容都有一个索引,但我认为这可能效率低下,因为很多用户都在使用这个桌子。我的另一个想法是组织数据库以促进表格的树状导航,但是因为您可以搜索任何内容,所以我不确定如何组织表格。

对一些好的做法有什么想法吗?

【问题讨论】:

    标签: database database-design web-applications


    【解决方案1】:

    一张产品表 - 数据库旨在让大量用户在表上敲打。

    (来自cmets)

    您需要对数据进行建模。这来自查看您拥有的所有数据,确定什么与什么相关(表称为关系,因为一行中的所有属性都与候选键相关)。您还没有真正提供足够的信息来说明您在这些产品上拥有哪些数据(非结构化?)以及它是如何变化的。你是否会因为鞋子有品牌、型号、尺码和颜色,而书桌只有品牌、型号和饰面而感到困难?所有这些都将通知您的数据模型。通常你有一个产品表,其他东西链接到它。

    其中一些属性将是查找表的外键,其他属性(价格)将是简单的标量。适当的索引,你会没事的。对于高级分析,请考虑按维度建模的星型模式,但可能不适用于您的实时交易系统 - 取决于您的数据流/工作流/交易是什么。或者在您的事务数据库中考虑其原则的一些好处。 Ralph Kimball 是有关维度建模的良好信息的来源。

    【讨论】:

    • 这是我最初的想法,我的合作伙伴不同意我的看法。还有其他提示吗?
    • @JPC:您的合作伙伴是否为他们的立场提出了令人信服的理由?
    • @JPC:哦?他们有什么更好的建议吗?
    • 不是很吸引人。其他建议是建立一个树状的表结构
    • @JPC 然后是一张桌子。我们在谈论多少种产品? 1k、100k、1m、100m?其中一些属性将是查找表的外键,其他(价格)将是简单的标量。适当的索引,你会没事的。对于高级分析,请考虑按维度建模的星型模式,但可能不适用于您的实时交易系统 - 取决于您的数据流/工作流/交易是什么。或者在您的事务数据库中考虑其原则的一些好处。 Ralph Kimball 是有关维度建模的良好信息的来源。
    【解决方案2】:

    一个表用于产品,另一个表用于产品类别层次结构(您没有具体说您有这个,但“表格的树状导航”让我认为您可能会这样做)。

    如果您打算索引几乎每一列,我知道您可能会担心过度索引会导致问题。在这种情况下,最好在您认为用户可能搜索的前 5 或 10 列上建立索引,除非用户可以搜索任何列。在这种情况下,您可能需要考虑构建数据仓库。也许您会想研究数据立方体,看看它们是否有帮助...?


    对于分层数据,您需要一个如下所示的PRODUCT_CATEGORY 表:

    ID
    PARENT_ID
    NAME
    

    一些样本数据:

    ID PARENT_ID NAME 1根 2 1 袜子 3 1 直升机零件 4 2 亚皆老街

    某些 SQL 引擎(例如 Oracle)允许您编写递归查询以在单个查询中遍历层次结构。在这个例子中,树的根有一个PARENT_ID NULL,但是如果你不希望这个列可以为空,我也看到-1 用于相同的目的。

    【讨论】:

    • 您能详细解释一下产品类别层次结构表的外观吗?
    • 我不确定数据仓库或数据多维数据集是什么(或者您所说的它们是什么意思),但我一定会调查一下,谢谢!
    • 这假设一个人在该层次结构顺序中导航对吧?例如,假设 argyle 是一种颜色,我也可以按 argyle 搜索,然后得到袜子和毛衣等。所以这可能行不通?
    • @JPC:在这种情况下,您要么为每个可能的搜索维度构建多个层次结构,要么进入数据立方体,这可能会做同样的事情(我承认我已经工作很长时间了有这种事情,所以可能有更好的方法来处理这个我忘记了)。
    【解决方案3】:

    对于基于文本的搜索,以及易于启动和设计,我强烈推荐 Apache SOLR。 SOLR API 易于使用(尤其是 JSON)。数据库的文本搜索性能很差,我建议您确保它们正确响应主键/唯一键查询,而这些是您应该索引的字段。

    【讨论】:

    • 确保你在刻面部分上花费大量时间,这是一种自动创建浏览系统的东西。
    【解决方案4】:

    我认为这里不需要树结构。您可以使用单个表。

    如果您坚持使用层次结构的树形结构,这里是 example 帮助您入门。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-27
      • 2014-02-12
      • 1970-01-01
      • 2018-08-27
      • 1970-01-01
      • 1970-01-01
      • 2020-04-29
      • 1970-01-01
      相关资源
      最近更新 更多