我想设计一个表格来帮助跟踪一段时间内水箱的内容。油箱通常一次装满,并将应用一个批次名称,然后将其清空。如果这是唯一的方案,那么我会这么做。
表: dye_tank
dye_id (PK)
dye_lot
dye_color表:画图
paint_id (PK)
paint_lot
paint_color表: dye_transfer
dye_transfer_id(PK)
dye_id (FK)
paint_id (FK)
dye_transfer_note这将允许我将多批染料转移到一箱涂料中,并在多批涂料之间使用一箱染料。
如果我也希望能够将大量的油漆转移到另一个大量的油漆中,那该怎么办?例如,我可以将黄色染料添加到油漆槽中,以生成大量黄色油漆,然后将其泵入现有的一批蓝色油漆中,以生成新的一批绿色油漆。对于批次转移,您是否建议使用单独的表格,如:
Table:paint_transfer
paint_transfer_id (PK)
paint_id (FK)
paint_id (FK)还是有更好的解决方案。我可以扩展染料转移表,并使其:
表:传输
transfer_id (PK)
source_id
source_type
paint_id (FK)
transfer_note有了这个,我可以将源类型设置为'paint‘或'dye’,并将source_id设置为源成分的适当PK。这样做的一个缺点是,我必须使用一些更复杂的触发器,而不是依赖内置的外键级联来维护引用完整性。
第一个解决方案看起来更简单,但第二个方案似乎可以提供更多的灵活性。
第三种解决方案是忽略涂料罐到罐转移发生的事实,只将“绿色”罐的创建记录为来自黄色罐的所有批次和来自绿色罐的所有批次的转移。
任何人都能看到这两种解决方案的具体优点或缺点,或者对类似的问题使用不同的东西吗?
发布于 2015-09-12 05:03:36
另一种看待它的方式是将其视为材料清单。每个水箱都有许多不同类型的材料的混合物。所以就像这样:
Table: tank
tank_id (PK)
Table: material
material_id (PK)
material_class (paint, dye, anything else...)
material_color
Table: material_lot
lot_id (PK)
material_id
Table tank_contents
tank_id (PK)
lot_id (PK)
transfer_note
Table tank_contents_history
date_emptied (PK)
tank_id (PK)
lot_id (PK)
transfer_note在装满油箱时,您可以将批次添加到tank_contents。当它是空的时,你删除地块并将它们添加到tank_contents_history。要找到水箱的颜色,您必须运行一个查询来计算水箱中材料的颜色组合会产生什么。
你的地皮上没有数量...因此,这可能会使计算颜色变得困难。但也许这个模型试图比你的现实更接近于类比。
https://stackoverflow.com/questions/32531472
复制相似问题