【问题标题】:Database design: product sizes数据库设计:产品尺寸
【发布时间】:2014-02-12 17:54:39
【问题描述】:

对于 B2B 商店,我正在寻找最佳的数据库设计。产品存储在数据库中,每个产品都有一个尺寸栏。该尺码栏有未知数量的产品可用尺寸。因此,此时,我们知道产品,并且知道产品可用的尺寸。在此之后,应该可以为产品添加未知数量的颜色,最后,对于每种颜色/尺寸组合,应存储库存量。

下面,我已经为它设计了数据库,但我认为这不是最好的解决方案。底线是会有输入的订单。几乎每个订单都有多种产品和几乎所有的颜色/尺寸组合。有人可以帮助它设计最好的数据库吗?

表结构:

sizebar
--------
id, title

sizebar_sizes
--------
id, sizebar_id, size

products
--------
id, sizebar_id, title

products_colors
--------
id, product_id, color

products_sizes
--------
id, color_id, sizebar_sizes_id, quantity

【问题讨论】:

    标签: mysql database-design


    【解决方案1】:

    我认为你想要多对多的关系...... 产品和尺寸应该有一个可透视的 products_sizes。 product 和 color 应该有一个可透视的 products_colors

    另一个表可能包含库存商品,例如:in_stock 表,其中包含 productID、colorID 和 sizeID 的外键

    【讨论】:

    • 好吧,这是可能的,但是订单呢?我可以创建一个名为 orders 的表,为每个唯一的 productID、colorID 和 sizeId 创建一个带有订单数量的新行。但是,该表中的行数会快速增长,那么也许有更好的解决方案?
    • 是的,它可以变得非常大,但这就是数据库的用途吗?大量数据...您可以添加一种包含所有最新订单的缓存表,这样您就可以快速访问它们。或者,也许您可​​以将旧订单转储到文件中,以使您的表保持相当小...通过索引您的订单表,您需要大量订单才能变慢,我认为缓存最新的“已使用”订单是您的最佳选择打赌是否真的需要
    【解决方案2】:

    我无法真正理解“sizebar”是什么,但如果像你说的每个产品只有一个 sizebar,那么任何 sizebar 数据都可以是 products 表的一部分。

    那么你就有了尺寸:

    sizes
    --------
    id, size
    

    和颜色:

    colors
    --------
    id,  color
    

    产品仍然是一个通用的高级概念:

    products
    --------
    id, title, sizebar_name
    

    所以我们需要知道有哪些特定的变体可用,对吧?我称它为“items”,但它可以是“available_products”或“variations”或其他:

    items
    --------
    id, item_id, color_id, size_id
    

    我们还需要跟踪订购的商品,因此我们需要订单:

    orders
    --------
    id, client_id, order_date, shipping_type, etc etc
    

    order_items
    ----------
    id, order_id, item_id, quantity
    

    【讨论】:

    • 尺寸栏是多种尺寸的集合。所以只有几个侧边栏,如:1. s、m、l 2. m、l、XL 3. l、xl、xxl 等。因此,在生产产品后,它适合其中一个可用的侧边栏。您的表结构通常与我的相同。主要问题是:是否有可能减少 order_items 的数量,因为有一个 sizebar 存储所有可用尺寸?
    • 所以 sizebar 可以是它自己的表,但我认为它不应该如此依附于其余部分。你可以用它来生成可用的物品,但是一旦一件衬衫是“XL blue SportsTeamXJersey”,它来自什么尺码就不再重要了,对吧?
    • 现在我想起来了,您可能还需要一个 inventory_items 表来跟踪您拥有的每件商品的数量,并确保可以订购。
    • 刚刚在上面的评论中看到了您的问题:不,您需要跟踪商品并单独订购商品,例如库存水平和订购数量,因此尝试在这里节省空间对您没有帮助。此外,您还需要列举哪些尺寸有哪些颜色可供选择,从而否定任何好处。
    • 没错,还有一个存货表,里面有实际存货。但是,像这样开发数据库,​​对于一个有 20 种产品的订单,假设每个产品有 10 种颜色,每种颜色有 5 种尺寸,那么只有一个订单会向数据库中添加 1.000 行。这很多,不是吗?应该有更好的解决方案吧?