Jam*_*mes 3 data-warehouse sql-server sql-server-2016
我们正在扩展我们的数据仓库以包含一个新的源系统。在新系统中,我们希望主键只有一列,但在旧系统中,它是两列。
例如:
create table #new_case (case_id varchar(255))
create table #old_case (patient_id int, care_event_counter int)
insert into #old_case (patient_id, Care_event_counter)
values
(55, 1),
(55, 2),
(55, 3),
(56, 1),
(57, 1),
(57, 2)
insert into #new_case (case_id)
select cast(patient_id as varchar(55)) + '_' + cast(care_event_counter as varchar(55))
from #old_case
select * from #new_case
Run Code Online (Sandbox Code Playgroud)
问题:这在大规模上必须非常慢,我更喜欢全面使用 int 。
问题:如何智能合并两个整数列?有没有数学技巧可以用来推导出更快的值?
在数据仓库模式设计中,为每个表分配一个新的整数单列键并保留源系统键(有时称为“业务键”)是很常见的。
金博尔 说:
操作源系统创建的自然键受制于 DW/BI 系统控制之外的业务规则。例如,如果员工辞职然后被重新雇用,则可能会更改员工编号(自然键)。当数据仓库想要为该员工使用单个密钥时,必须创建一个新的持久密钥,该密钥在这种情况下是持久的且不会更改。这把钥匙有时被称为持久的超自然钥匙。最好的持久键具有独立于原始业务流程的格式,因此应该是从 1 开始按顺序分配的简单整数。虽然随着时间的推移,随着员工的个人资料发生变化,多个代理键可能与员工相关联,但持久键永远不会改变。
所以像:
create table new_case
(
case_id int identity primary key,
patient_id int not null,
care_event_counter int not null,
constraint uk_case unique(patient_id,care_event_counter),
...
)
Run Code Online (Sandbox Code Playgroud)
您需要保留另一个键并将其编入索引,因为新数据随业务键一起传入,您需要将其与新仓库 ID 相关联。
归档时间: |
|
查看次数: |
905 次 |
最近记录: |