我有一个场景,我们想要构建一个库存描述系统,我正在尝试设计架构,但需要一些指导以确保我不会偏离轨道。基本前提是:三个位置(销售位置、运输位置和目的地位置)与要发送的项目的组合,用于确定应如何包装和发送某物。将其分解为多个级别会变得更加复杂(级别 1:将项目放入盒子中。级别 2:磁带盒等......)但仍然易于管理。
当我们到达 Packing 级别时,我们将所有字段拖入以使用五个字段制作 PK 以制作唯一记录。
我的问题是,关键字段长度是否有合理的限制。为每个组提供一个代理键然后就这样继续下去是否有意义?
因此,UniqueLocationLookup 将有一个字段用作 ItemLookup 表中的标识符。
UniqueLocationID 和 Item 的组合将成为 LevelLookup 等使用的另一个唯一键......
堆叠键方法(我的名字),你在你的表中携带键的组合,往往会很快堆积起来并且变得笨拙。我认为您已经开始通过问题中的示例看到这一点。
因此,如果您不想为所有关系拖动每个键,那么代理键问题的答案是“是”。
但是,有一个警告。您希望确保在每个查找表中,您对查找表项的组合强制执行唯一性(在 SQL Server 中,使用 UNIQUE KEY)。例如,从下面的示例图中:
位置查找表:
项目查找表:
级别查找表:
看看当你这样做时,生活变得多么简单!
注意:当使用代理键时,我认为每个表也至少有一个唯一键约束总是一个好主意。