保持对原始表的引用

时间:2018-02-14 15:15:06

标签: sql sql-server database database-design

我正在设计一个数据库来存储来自不同资金来源的原始数据。然后,数据库触发器将用于清理原始数据并将其插入“规范化”数据表中。维护从干净数据到各种数据表之间关系的最佳方法是什么?

到目前为止我提出的是{cleanID,rawTable,rawTableID}的单独表。 rawTable列将标记要查看的表,rawTableID将标记该表中的哪一行。我不喜欢这个,因为你不能真正保持任何参照完整性。

或者,我可以在原始表中有一个引用clean表的列。但是,为了找到干净表中特定行的来源,我必须在所有原始表上进行联合。

原始表基本上都包含相同的信息,但格式不同。为了保持记录目的,它们需要保持原始状态。为了使我的应用程序更容易,我想制作一个包含所有原始数据的表,但是规范化以便于解释,查询等。从干净处维护链接(以任何形式)的最佳方法是什么,将数据标准化为它来自的原始数据行,请记住原始数据行可能是一堆表中的一行?这是出于审计目的。

还有其他选择吗?

1 个答案:

答案 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。