我们公司生产鞋子,因此我承担了制作FE&BE的任务。我决定暂时在MS Access中制作FE(一旦我熟悉和熟悉它,极有可能在1-2年内切换到Django Web应用程序),BE现在在MySQL中。
基本上,我们的客户可以订购一些产品,例如在单独的盒子中(每个对都有一个盒子)订购“ shoeA” x 1080,并在纸箱中订购24个这样的盒子。因此,物料清单(或装配体……此处不确定术语)的结构如下所示:
Order1
- Carton (size 24) x 45
- Box (1 pair) x 24 -- (45 * 24 = 1080)
- Packing paper x 1
- shoeA x 1
...
但是,如果我们看一下shoeA的组成成分,那就是更多的副产品和原材料。此外,每件物品可以来自不同的地方(例如仓库),并且可以通过不同的组装方式进行组装(例如,鞋类A与包装时不会通过同一组装方式进行组装)。问题是,多个装配件执行相同类型的工作(例如,多个包装装配件),因此我们不知道在订购时哪个装配件会执行什么操作(例如,订单可以提前6个月到达,我们将知道哪个程序集将提前2个月执行操作)。
更复杂的是,即使两个``类型''的组件(例如包装组件)产生相同的结果,也可能需要不同的材料。例如,我们在土耳其的组装只需要我们提供的shoeA,他们将自己提供其余的材料/副产品(例如盒子/包装纸等)。当然,这将反映在价格中,但这不是现在的问题。关键是这两个组件最终都将生产相同的产品(例如,其中装有鞋子和纸的盒子)。
在后端RDBMS中如何体现这一点?目前我有:
请忽略属性本身(而不是PK / FK),因为它们只是占位符,直到我完成事情为止。
最佳答案
我认为您会遇到的最大问题是子装配的可能性。即您可能将三个零件组装成一个组件,而该组装件再加上另外两个零件就制成了鞋子。
我通常看到的处理方式是这样的:
CREATE TABLE part (
id int autoincrement,
is_assembly tinyint,
...
);
CREATE TABLE component (
assembly_id int references part(id),
component_id int references part(id),
qty numeric, -- number used to make assembly
equivalent_to int references part(id)
);
请注意,这种结构允许您无限嵌套装配件。
然后可以通过添加equal_to部分来解决等价问题,该部分允许您处理。
请注意,您需要分别跟踪每个零件和子零件的进出,因为不再需要在零件输入和零件装配之间进行1:1映射。