【发布时间】:2019-03-25 19:50:28
【问题描述】:
我们的一个数据源每天发送一个包含汇总数据的提要。定期快照。例如:
shop, day, sales
bobs socks, 2019-01-01, 45,
bobs socks, 2019-01-02, 50,
bobs socks, 2019-01-03, 10,
janes coats,2019-01-01, 500,
janes coats,2019-01-02, 55,
janes coats,2019-01-03, 100
我知道在数据库原始库中对此建模的两种方法:
多活动卫星
在这里,我们允许每个卫星的每个集线器键具有多行。
create table dbo.HubShop (
ShopName nvarchar(50) not null,
primary key pk_HubShop (ShopName)
)
create table dbo.SatDailyShopSales (
ShopName nvarchar(50) not null,
SalesDate date not null,
SalesAmount money not null,
LoadTimestamp datetime2(7) not null,
primary key pk_SatDailyShopSales (ShopName, SalesDate, LoadTimestamp)
)
这很容易实现,但我们现在为卫星添加了一个双时间元素。
快照中心
create table dbo.HubShop (
ShopName nvarchar(50) not null,
primary key pk_HubShop (ShopName)
)
create table dbo.HubSnapshot (
SalesDate date not null,
primary key pk_HubSnapshot (SalesDate)
)
create table dbo.LinkDailyShopSnapshot (
LinkDailyShopSnapshotHash binary(32) not null,
ShopName nvarchar(50) not null,
SalesDate date not null,
primary key pk_LinkDailyShopSnapshot (LinkDailyShopSnapshotHash)
)
create table dbo.SatDailyShopSales (
LinkDailyShopSnapshotHash binary(32) not null,
SalesAmount money not null,
LoadTimestamp datetime2(7) not null,
primary key pk_SatDailyShopSales (LinkDailyShopSnapshotHash, LoadTimestamp)
)
第二个解决方案添加了一个额外的中心,它只存储日期列表和日期和商店之间的交集链接。
第二种解决方案感觉更干净,但需要更多连接。
哪个是正确的型号?有没有更好的解决方案?
【问题讨论】:
-
不是第二种解决方案。 Data Vault 是关于业务密钥的,Snapshot 不是其中之一,它只是如何捕获集线器之间的关系。
标签: data-vault