【问题标题】:Table structure for web shop网上商店的表结构
【发布时间】:2015-05-15 01:58:46
【问题描述】:

请考虑这种情况:

一家网店销售 IT 产品。如果我们看看电脑和打印机, 这两种产品都需要一些过滤器:ID、名称、价格、 教育署一些过滤器只针对一种产品:操作系统、墨盒 输入。

储存这些产品的最佳方式是什么?

  1. 我正在考虑这个问题。

创建一个包含所有可能过滤器的产品表。如果一个产品 没有特定的过滤器,只需将其保留为空即可。这种方法是 实施简单,但如果有 许多不同的特定过滤器。

  1. 这是 WordPress 的做法。

创建仅包含常规过滤器的产品表。创建一个单独的表,其中包含以下列的元数据(特定过滤器):filter_id、product_id、filter_name、filter_value。每个特定的过滤器都有自己的行。这种方法不会浪费任何空间,但是如果每个产品都有大约 10 个不同的特定过滤器,那么表格会变得非常大,并且可能会导致比第一种方法更多的性能问题。

有人可以告诉我哪种方法是首选方法,或者可以提供替代方法。

谢谢

【问题讨论】:

    标签: database-design


    【解决方案1】:

    您正在寻找的是 m:n 关系(即一个过滤器可能适用于多个产品,并且一个产品可能有多个过滤器),我在此描述:Best way to design a table with m:n relation

    您对可能的值感兴趣。我会推荐 4 张桌子:

    • 表 1 列出了所有产品(ProductId、ProductName、Price 等) 可能的产品
    • 表 2 包含过滤器(FilterId、FilterName 等) 列出所有可能的过滤器(但不是它们可能的值)
    • 表 3 中的关系 (ProductId, FilterId) 表明该过滤器是 适合该产品。对产品和过滤器进行 FK
    • 表 4 包含过滤器值:(FilterId, FilterValue) FK 到过滤器列表 给定过滤器的每个可能值。

    【讨论】:

    • 您所做的与 WordPress 所做的类似。这似乎是最好的做法,但为什么要将过滤器的值放在单独的表中,而不是在表 2 中作为中间有逗号的 tinytext?
    • 数据库系统非常擅长有效地连接表,而不是有效地解析字符串逗号分隔值。基本上通过拆分它,你预先解析了一次这些 csv,然后重用关系
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    • 2012-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多