【发布时间】:2014-07-12 00:30:03
【问题描述】:
我从获取的数据中获得了一个复合自然键。使用 composite_key=ID-PRODUCT_ID-CLIENT_ID-OFFICE_ID ,我想将此键转换为一个代理键。
例子:
composite_key = 55-001-234-01 到 surrogate_key = 123;这是 正常情况,有时办公室代码可以更改,但我想 将记录标识为相同 例如:composite_key = 55-001-234-02 to surrogate_key = 123.
- 如何实现这一点来创建数据仓库?
- 如何比较一次提取与另一次提取的复合键 并了解是否可以考虑更改字段 有效吗?
【问题讨论】:
-
您将拥有一个将自然键映射到代理键的表。不过,通常情况下,您只会在数据表中拥有带有唯一约束的自然键以及代理键。
-
好的,但是我如何理解复合键的变化,例如办公室会导致相同的代理键。在这种情况下,如果我认为这些记录是相同的,因为只有办公室发生了变化并且从业务角度来看是可以的。
-
您必须编写一些规则,用户定义的函数似乎是一个不错的方法。
-
如果办公室 ID 可以更改而不意味着它应该映射到不同的代理键,那么我不认为它真的是您的目标结构的自然键的一部分。无论该“自然键”的哪个标记可以更改但不意味着它应该映射到的目标记录中的更改,都将它们剥离。例如,如果 ID、PRODUCT_ID 或 CLIENT_ID 中的任何一个更改应该意味着不同的记录,但 OFFICE_ID 无关紧要,那么您的“真实”自然键将变为 ID-PRODUCT_ID-CLIENT_ID。将其用作比较的基础,您的预期匹配就会发生。
-
我讨厌对你说“所有哲学”,但如果复合键是可变的,它真的是一个标识符吗?在某种程度上,代理键不仅应标识表中的一行,而且还应标识主题中的实体或关系的实例。复合自然键几乎总是识别关系。如果其中一个组件键发生变化,那么它就不再是关系的同一个实例了。
标签: sql-server database-design primary-key business-intelligence composite-key