1

我目前有一个表,其中一个字段的大部分(如 99%)数据依赖于单个字段,但其他 1% 依赖于其他字段。

例如,我有以下价格表

product PK
color PK
cost

以下是该表中的一些条目

product|color|cost
pen|red|$1.00
pen|blue|$1.00
pen|green|$1.00
etc....
pen|black|$0.90
pen|white|$0.85
pencil|red|$0.50
pencil|blue|$0.50
pencil|green|$0.50
etc...
pencil|black|$0.35
pencil|gray|$0.40

我在使用此表时遇到的问题是,每当我必须添加单个产品或颜色时,我都必须在此表中添加数百个类似的条目。

我目前正在考虑以下列方式存储数据

pen|all_other_colors|$1.00
pen|black|$0.90
pen|white|$0.85
pencil|all_other_colors|$0.50
pencil|black|$0.35
pencil|gray|$0.40

我是在正确的轨道上还是有更好的数据库设计来处理这个问题?任何帮助或链接将不胜感激。对于这个问题,我无法向谷歌找到正确的措辞。

4

3 回答 3

1

您需要规范化数据库表

将其分为以下三个表:

产品

id | product

颜色

id | color

产品成本

id |  Product_id | color_id | Cost
于 2012-07-15T13:36:09.987 回答
0

您可以将颜色组合在一起,然后插入整个组的价格:

在此处输入图像描述

您的示例可以类似地表示...

PRICE:

    PRODUCT_ID  GROUP_ID    PRICE
    pen         1           $1.00
    pen         2           $0.90
    pen         3           $0.85    
    pencil      1           $0.50
    pencil      2           $0.35
    pencil      4           $0.40

GROUP:

    GROUP_ID
    1
    2
    3
    4

COLOR_GROUP:

    GROUP_ID    COLOR_ID
    1           red
    1           blue
    1           green
    2           black
    3           white
    4           gray

COLOR:

    COLOR_ID
    red
    blue
    green
    black
    white
    gray

增加的复杂性是否值得取决于您...

于 2012-07-15T16:58:01.677 回答
0
  • BaseProduct有所有产品名称及其价格
  • Product拥有所有可用的有效产品颜色组合
  • ColorPrice是与基本价格的差额(抵消)。
  • ColorCharge只有带有异常定价的行(没有 ColorPrice = 0 的行)

在此处输入图像描述

获取特定基础产品的信息 ( specific_prodict_id)

select
      b.ProductName
    , c.ColorName
    , b.ProductPrice + coalesce(x.ColorPrice, 0.0) as ProductPrice
from      Product     as p
join      BaseProduct as b on b.BaseProductID = p.BaseProductID
join      Color       as c on c.ColorId       = p.ColorId
left join ColorCharge as x on x.BaseProductID = p.BaseProductID and x.ColorID = p.ColorID
where p.BaseProductID = specific_prodict_id;
于 2012-07-15T18:13:20.970 回答