项目的数据库表具有相同的关系

时间:2013-09-20 17:22:12

标签: php mysql sql database database-design

我应该如何为汽车零件设计数据库。

问题是像散热器这样的汽车部件可以容纳几辆汽车。我该如何解决这个问题? 假设我有一张如下表所示的表格:

SKU#Part Make Model Year Quantity
H111散热器BMW E46 1998-2002 5
H222散热器Toyota Corolla 2002-2004 2

带SKU#H111的散热器可以容纳两辆车。其中一个显示在上面的表“BMW E46 1998-2002”中,另一个是“BMW E39 2003-2004”。

如果我在数据库表中添加两个相同的部分,我将遇到问题,因为如果我卖掉该部分,我将不得不手动删除另一部分。 我想设计数据库,因此部件SKU#H111与两个项目有关联。当我卖掉它们时,两个项目的数量都会减少。

3 个答案:

答案 0 :(得分:2)

三张桌子:

  • Car:columns ID,Make,Model,Start_Year,End_Year
  • 部分:列ID,SKU#,名称,数量
  • Car_Part:列Car_ID,Part_ID

这称为规范化。要确定哪些部件与哪些车辆匹配,请进行3向连接。

SELECT sku, name, make, model, year, CONCAT(Start_Year, '-', End_Year) Years, Quantity
FROM Car c
JOIN Car_Part cp ON cp.Car_ID = c.ID
JOIN Part p ON p.ID = cp.Part_ID

如果您经常需要此查询,可以将其放在视图中。

答案 1 :(得分:1)

希望这有助于指导您the right direction

答案 2 :(得分:1)

您可以使用附加表来设置零件与使用这些零件的汽车之间的关系: 例如:

Table: sku_id_car_model
SKU#    #Id Car Model
H111    BMW E46 1998-2002
H111    BMW E39 2003-2004

因此,当您使用零件时,请按SKU#和#Id Car Model

进行数量搜索更新
update car_parts 
set quantity = quantity - 1 
where sku_part = 'H111'
and concat(make, model, year) in (  select id_car_model 
                                    from sku_id_car_model 
                                    where sku = 'H111' );

这是一个选项,