[英]Extension of an ID based off the ID of another table
根据第一范式原理,您不应该使用复合属性(例如“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.