数据库设计问题:多种类型的产品

Database design issue: product of multiple types

我遇到了一个问题,我应该为一家制造公司制作一个数据库。基本上问题如下:

该公司生产多种不同产品名称的鞋子(产品)。

例如,"shoe design"(即它看起来如何,无论使用 materials)代码可以是“1048”,该特定设计的最简单产品是“1048 P07”到处都使用相同的 material (P07)。但是,你可以做一些非常高级的鞋子,就是很多不同的material拼接在一起,所以最终的代码可能是“1048 P07 T44L T22 L18”。

我不确定我应该如何设置 table 和关系。

问题是特定的 material 可以用在鞋的不同部分(即需要不同的 areas/work 放置在那里)所以这不是简单添加的问题数字上升。

例如鞋子“1048 P07 T44”比“1048 T44 P07”稍微贵一些,因为material T44 更贵,而且在第二种鞋型中使用面积更大。

此外,每个 "shoe design",这意味着例如在设计“995”中,最多只使用了 3 个不同的 material(分为大约 3 个同样大的部分),但在“ 548" 最多可以有 8 个(分成 2 个大的等份和 ​​6 个其他较小的部分)。

这意味着如果我用 "Products" 制作 table,它们都非常不同,我认为相同的 table(即一个有 3 个部分需要缝合,另外 8 个,有些甚至可以有 15 个)。我如何轻松归因于需要对不同产品执行哪些操作并将这些产品放在同一 table?

如果能帮助您理解我的问题,我很乐意提供任何进一步的信息。

这是我推荐的 MySql 版本。希望有所帮助:

create table design_list (
    did int primary key,
    dname varchar(30) not null
);
create table part_list (
    pid int primary key,
    pname varchar(30) not null,
    price decimal(10,3)
);
create table material_list (
    mid int primary key,
    mname varchar(30) not null
);
create table design_part_material (
    did int references desing_list (did),
    pid int references part_list (pid),
    mid int references material_list (mid),
    constraint primary key (did , pid , mid)
);

insert into design_list values (1,'Panic Sneaks');
insert into design_list values (2,'Rubber Sole');

insert into part_list values (1,'Toe cap',1.2);
insert into part_list values (2,'Heel1',2);
insert into part_list values (3,'Heel2',.6);
insert into part_list values (4,'Heel cap',1.1);

insert into material_list values (1,'Egg Yolk');
insert into material_list values (2,'Asfalt');

insert into design_part_material values (1,1,1);
insert into design_part_material values (1,2,1);
insert into design_part_material values (1,4,2);
insert into design_part_material values (2,1,1);
insert into design_part_material values (2,3,2);

你可以这样查询:

select 
    dl.dname,
    group_concat(concat(pl.pname, '(', ml.mname, ')')
        order by pl.price desc) parts, sum(pl.price) price
from
    design_part_material dpm
        join
    design_list dl USING (did)
        join
    part_list pl USING (pid)
        join
    material_list ml USING (mid)
group by dl.dname
;