我正在设计一个数据库来存储来自不同资金来源的原始数据。然后,数据库触发器将用于清理原始数据并将其插入“规范化”数据表中。维护从干净数据到各种数据表之间关系的最佳方法是什么?
到目前为止我提出的是{cleanID,rawTable,rawTableID}的单独表。 rawTable列将标记要查看的表,rawTableID将标记该表中的哪一行。我不喜欢这个,因为你不能真正保持任何参照完整性。
或者,我可以在原始表中有一个引用clean表的列。但是,为了找到干净表中特定行的来源,我必须在所有原始表上进行联合。
原始表基本上都包含相同的信息,但格式不同。为了保持记录目的,它们需要保持原始状态。为了使我的应用程序更容易,我想制作一个包含所有原始数据的表,但是规范化以便于解释,查询等。从干净处维护链接(以任何形式)的最佳方法是什么,将数据标准化为它来自的原始数据行,请记住原始数据行可能是一堆表中的一行?这是出于审计目的。
还有其他选择吗?
答案 0 :(得分:0)
这是我用于各种数据源和类似数据的方法。听起来你想要能够拉动线程'验证财务数据。
创建' Raw' schema,将数据原样转储到此模式中,为每个源设置源表。
我建议采用这种方法,因为我不想编辑原始数据,我希望能够追踪给我的内容。
创建一个' Staging'架构,将您想要的任何转换从原始数据转移到此表中,在这里您将要保留以前的PK(recordid& sourceid)。
最后一个' Prod'架构,您将共同定位来自不同来源的数据。
单独的表|相同的表|
来源1
Raw - >阶段 - > |生产|
来源2
Raw - >阶段 - > |生产|
RecordID和SourceID流一直通过这些表,这是一个复合键,这是你的PK。
对于跟踪,您还需要为sourceid设置一些暗淡/查找表。如果您想根据SQL Server的版本获得创意,可以考虑在各种源表中使用sequenceID。
dim / lookup表通常是支持其他表的元数据表。
在这个例子中,我将创建一个类似于此的表:
ID | Source
1 | Bob's Crazy Bike Town
2 | Wild Williez Fun store
3 | Swimmers Lane
源1的原始表
RawTableID | SourceID
1 | 1
2 | 1
3 | 1
源2的原始表
RawTableID | SourceID
1 | 2
2 | 2
3 | 2
查找表将允许您存储有关sourceid的数据,显然可以存储Raw表中的FK。