SSIS Design4: 处理外键

假设一种场景:有一个ETL系统,通过记录数据最后更新的时间,对数据进行增量更新。如果Data Warehouse中存在有外键关系的两个表,Group(GroupID,StudentID,GroupData) 和 Student(StudentID,StudentAlternateID,StudentData),Group表引用Student表中的StudentID字段。在导入Group数据时,如果Group中存在一个数据行R1,其StudentAlternateID不存在于Student表,如何处理?

分析:如果不导入这行数据,那么Group有丢失数据的可能。因为,Student表的数据被补齐后,除非数据行R1被再次更新,否则,R1的数据不会被导入到DW中。

结论:必须将R1导入DW。由于StudentAlternateID是Student表的业务主键,当Student表数据补齐后,能够通过业务主键匹配。

Step1,将StudentAlternateID导入到Student表,StudentData 设置为null(或其他缺失值),生成一个StudentID(Student表的代理键)。

Step2,将生成的StudentID更新到Student表中,尽管Group引用的Student数据是未知的。

Step3,后续Student表有更新时,如果存在StudentAlternateID,那么可以将StudentData更新为有效值。

为了区分这种数据,可以在Student表中增加一个Column:IsLateArrival bit,如果IsLateArrival=1,表示是该数据行在插入时,只能确定业务键(Alternate Key),而其他数据未知,后续,需要通过业务键来将其他数据更新为真正有效的数据。

时间: 2024-10-05 04:19:16

SSIS Design4: 处理外键的相关文章

SQL中创建外键约束

alter table 表名 add constraint 外键约束名 foreign key(列名) references 引用外键表(列名)

django ORM的外键操作

外键约束示例 #models操作如下 class HostInfo(models.Model): servername = models.CharField(max_length=32) serverip = models.CharField(max_length=32) serverpassword = models.CharField(max_length=64) server_group = models.ForeignKey("GroupInfo",to_field="

Chapter 1. 数据库概述、主键、外键

数据库 database: 存储数据的仓库,用表来分类数据 特点:海量存储:查找速度快:并发性问题的控制:安全性:数据完整性(保存在数据库中的数据是正确的真实的) 数据库软件:DBSM   database management system 常见数据库软件:MySQL  MSSQL server  Oracle  Access SQL:Structured Query Language 结构化查询语言   特点:语言简洁.易学易用. SQL Server:是一种基于网络的大型数据库软件.主要用

[解决方法]Hibernate查询部分字段(含外键)出错,报空指针异常

假设当前表结构如下: food表字段有foodid,name,外键businessid,外键type business表字段有,name,外键type type表字段有id,name,foodid Hibernate生成的对应POJO分别是Food,Business,Type 需要查询food表部分字段,如name和外键businessid 则可在Food类中添加只有相应成员变量的构造方法,Food(String name,Business business) 使用hql语句 select ne

新建表和增加外键

当我们创建好了一个数据库后,第一件事要做的就是给这个数据库增加表. Create Table tblPerson ( Id INT NOT NULL PRIMARY KEY, Name NVARCHAR(50) NOT NULL, Email NVARCHAR(50) NOT NULL, GenderId INT ) Create Table tblGender ( Id INT NOT NULL PRIMARY KEY, Gender NVARCHAR(20) ) 上面的代码创建了tblPer

MySQL的外键约束:Cascade/Restrict/No action/SET NULL

转自:http://blog.csdn.net/cnjsnt_s/article/details/5548280 具体使用时需要参考:http://blog.csdn.net/codeforme/article/details/5539454 (注:没看很明白,囧.) MySQL有两种常用的引擎类型:MyISAM和InnoDB.目前只有InnoDB引擎类型支持外键约束.InnoDB中外键约束定义的语法如下: [CONSTRAINT [symbol]] FOREIGN KEY [index_nam

数据库中创建表(包括创建主键,外键,非空列,唯一)

创建表(包括创建主键,外键,非空列,唯一) - PROS - 博客园 http://www.cnblogs.com/CodingArt/articles/1621921.html **************** 创建主键(三种方法) **************** 创建学生表: 第一种: create table student (sno char(5) primary key,/*学号*/ /*可以直接指定主键*/ sname char(20) not null,/*姓名*/ ssex c

mysql外键(FOREIGNKEY)介绍及使用注意事项

一.基本概念 1.MySQL中"键"和"索引"的定义相同,所以外键和主键一样也是索引的一种.不同的是MySQL会自动为所有表的主键进行索引,但是外键字段必须由用户进行明确的索引.用于外键关系的字段必须在所有的参照表中进行明确地索引,InnoDB不能自动地创建索引. 2.外键可以是一对一的,一个表的记录只能与另一个表的一条记录连接,或者是一对多的,一个表的记录与另一个表的多条记录连接. 3.如果需要更好的性能,并且不需要完整性检查,可以选择使用MyISAM表类型,如果

数据库主外键

主键Primary key,唯一标示一个实体.是保证数据库的实体完整性,保证数据中数据的正确性和合理性,取值非空唯一. 外键Foreign,是用来使表与表之间联系.用来保证数据库的参照完整性,外键的取值必须来自参照表参照列的值,可以为空也可不为空. 外键的作用: 保持数据一致性,完整性,主要目的是控制存储在外键表中的数据. 使两张表形成关联,外键只能引用外表中的列的值! 主外键的关系结构: 1,一对一,不用引用主外键,把它们放一个表中即可 例如:一个学生只能有一个卡号,那么学生跟卡号放在一个表中