繁体   English   中英

根据另一个表的 ID 扩展 ID

[英]Extension of an ID based off the ID of another table

在此处输入图像描述 我有两张桌子。 订单和托盘。 每个订单可以有多个托盘。 我想弄清楚是否可以使 PalletID 成为 OrderID 的扩展。 例如,OrderID 为 8000。当将托盘添加到订单时,托盘 ID 变为 8000-1,当将下一个托盘添加到订单时,托盘 ID 变为 8000-2,依此类推。

这可能吗?

是的,这是可能的。

根据第一范式原理,您不应该使用复合属性(例如“8000-1”,没有任何RDBMS可以与之建立关系)而是使用两个属性(例如“8000”和“1”)一起执行此操作制作复合主键

Pallet
-------------------------
PK orderID int NOT NULL 
PK palletNR int NOT NULL 

在这种情况下, palletNR只需要在同一个OrderID中是唯一的。

在 ER 行话中, Pallet将是一个弱实体

这是可取的吗?

关于复合主键是好还是坏,或者使用代理键与自然键(复合与否),经常存在争论。 但最终的问题是它是否符合您的目的。

易于阅读每个托盘的顺序和序号对于人类阅读者来说可能是一个优势。 但在使用条形码或 rfid 跟踪托盘的时代,它真的不再是决定性的信息。

此外,如果您在复合主键中使用orderID ,则您无法在没有第一个订单的情况下注册货盘。 您不能只重复使用传入的托盘来交付传出订单; 您无法提前准备托盘以进行批量交付; 如果您在仓库之间使用托盘进行库存移动,那么您也会被搞砸。

这就是为什么我的个人建议是避免它:代理自主PalletID是处理它的最灵活的方式。 如果客户真的坚持 label 上的订单号和序列号,您可以轻松地将它们作为可选的托盘数据并为即将发出的托盘计算它们 - 不是关键,而只是为了礼貌地将它们打印在标签上;-)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM