-1

我有一个在普通数据库中可能无法解决的问题,而无需水平扩展。

我有一个商店,该商店包含一个Product. 例如服装店。您可以在Color和之间选择尽可能多的商店Size。我现在叫这些Types

表格将如下所示:

Product

  • Product name

ProductTypes

  • ProductId
  • TypeId1
  • TypeId2
  • Price
  • Weight
  • Stock
  • Etc...

Types

  • TypeId
  • Type name

没有真正规范化,因为TypeId1并且TypeId2仍然在同一张表中。也许客户希望将 10 种类型分配给一个产品,从而有效地创建一个 10D 矩阵,其中包含类型之间的所有相关性,但是我必须TypeIdProductTypes表格中再创建 8 个。

这是否可以正确归一化而无需水平缩放?

例如,我有以下类型:ColorSize和.GenderShape

我需要能够说Blue XL Male Turtleneck主要产品shirt的没有库存,并且价格发生了变化。但我需要能够为产品动态添加更多类型。

基本上我在问,如何将 5d 数组查找存储在合理的数据库中。

4

2 回答 2

3

你很近。

您的表格应如下所示。

Product
-------
Product ID
Product Name
Weight
Stock Number
...

产品 ID 是一个自动递增的整数,定义为主(集群)键。根据您的设计,我假设重量和库存编号属于产品。属于项目和类型的任何属性都可以移动到稍后描述的 ItemType 表中。

Type
----
Type ID
Type Name
Type Value
...

类型 ID 是一个递增的整数。类型 ID 和类型值组合成为主(集群)键。

换句话说,(0,Size,S),(0,Size,M)等。如果需要,您可以将其分成两个单独的表以进一步规范化。使用这个单一表格更容易直观地验证您的类型行。

Item
----
Item ID
Product ID
SKU
Quantity On Hand
Price
...

项目 ID 是一个自动递增的整数,定义为主(集群)键。Product ID 是 Product 表的外键。清单中的每种类型组合(每个唯一项目)都在此表中定义。例如,项目 ID 16 是男士正装衬衫(产品),蓝色(类型),XL(类型),SKU MD-14850639。这些类型属性汇集在 ItemType 表中。

ItemType
--------
Item ID
Type ID
...

项目 ID 和类型 ID 组合成为主(集群)键。您可以拥有任意数量的项目类型。

于 2013-11-03T01:26:17.760 回答
1

您的问题不清楚 aProduct是什么和 a ProductType。听起来 aProduct是叶类商品,如“Levi's 501 Jeans”,Type是轴,如“Inseam Length”、“Waist”或“Color”,ProductType是一个特定的 SKU,可让您跟踪“34Wx36L Blue”与“30Wx36L 黑色”相比。

您只需要创建一个TypesToProductTypes包含一ProductTypeId列、一TypeId列和一Value列的新表。然后,您可以为每个产品拥有任意数量的 TypeId。

假设我们想用“34Wx36L Blue”和“30Wx36L Black”来表示“Levi's 501 Original”:

产品

产品 ID 名称
--------- --------
        1 李维斯 501 原版

类型

类型 ID 名称
------ -------------
     1 种颜色
     2 腰围
     3 内缝长度

产品类别

ProductTypeId ProductId 名称 SKU#
------------- --------- ---------------- ----- ---------
            1 1 李维斯 501 原装 34Wx36L 蓝色 005011627
            2 1 李维斯 501 原装 30Wx36L 黑色 005011660

TypesToProductTypes

ProductTypeId TypeId 值
------------- ------ ----------
            1 1 蓝色
            1 2 34
            1 3 36
            2 1 黑色
            2 2 30
            2 3 36

我使用您给定的表名称使示例更易于理解,但您所说的Product我将调用CatalogItem, what you callProductType I would callSKU , and what you callType I would callAttribute`。

于 2013-11-03T01:16:47.370 回答