Power Pivot数据建模基础:数据表间的4种基本关系类型

2021-08-30 09:52:44 浏览数 (2)

小勤:在前面《表间关系一线牵,何须大量公式拼数据》的文章里提到,如果产品表的产品名称重复的话,是不能建立表间关系的,这具体是什么情况?

大海:在数据处理的时候,我们经常需要对2张相关的表格建立表间关系,比如订单表和订单明细表,订单明细表里的产品和产品表……那么2张表之间总是要能够找到明确的逻辑关系,才能建立表间关系,比如订单表里的订单编号和订单明细表里的订单编号是对应的。

小勤:那一般2个表之间都有哪些类型的关系呢?好像很复杂的样子啊。

大海:其实2个表之间的关系类型也很简单,莫非就4种。

小勤:4种?

大海:嗯。我们接下来通过数据的方式来看各种关系具体是什么样子的。

1. 首先,最最常见的关系,一对多,比如订单表和订单明细表,即订单表里的1条数据,对应订单明细表里的n条数据。

2. 其次,就是多对多关系,比如你的订单明细表里因为只有产品名称,而产品表里的产品名称不是唯一的,两个表间通过产品名称来看的话,订单明细表里一条数据,可能在产品表里找到多条数据,而在产品表里的一条数据,也可能在订单明细表里找到多条数据。如下图所示:

这种情况下,两个表之间的数据关系其实是不清晰的,因为比如我要找订单明细表里的“小米”的供应商,我就不知道应该是“宏仁”的,还是“德昌”的。

另外,多对多关系还有一种情况,数据表之间的关系其实是明确的,但要靠多个字段共同来确定,比如上面的订单明细表和产品表,如果订单明细表里增加一列“供应商”的内容,那么这两个表之间,就可以通过产品名称和供应商2列一起确定两表之间的明确关系,如下图所示:

可惜,无论是哪一种多对多关系,Power Pivot里是不支持的。

3. 第三种关系是一对一关系,就是2个表中都有一列,他们之间的关系完全是一一对应,都没有多的重复的内容。比如下面2个产品表:

4. 最后,也是最简单的,但可能是最麻烦的,就是两个表间的关系是没有关系。比如订单表和产品表之间,就完全找不到关系。

小勤:知道了。那像多对多关系的情况下,Power Pivot里要怎么处理呢?

大海:一般来说,应该在订单明细表里使用产品ID,这样的话,就能明确订单明细表里的“小米”到底应该是产品表里的第9条还是第12条数据。或者,在实际就是转化为前面说的一对多关系。如果是订单明细表里有供应商字段的话,那么可以将产品名称和供应商连起来,构造一个新的字段,最终还是转换为一对多的关系。

小勤:啊,这有点像在Excel里用vlookup的时候,如果要通过多项内容联合查找的话,也要先连接起来一样。

大海:对的。

小勤:对了,为什么会有一对一这种关系呢?感觉好无聊啊,为什么不都放在一个表里搞定?不是没事找事吗?

大海:一般日常看到的数据通常数据量不大,都可以放到一个表里,那样数据也好处理,但是,随着数据量越来越大,有很多时候一张表可能很复杂,可能有几百上千列,如果都放在一张表里的话,可能会极大地影响数据的计算效率,所以,就会考虑将这些表进行拆分,比如将一些日常很少用的内容(字段)放到一张表,而一些需要经常更改调用的内容放到另一张表。

小勤:啊,原来这样。另外,对于没有关系的情况,实际上,订单表和订单明细表有关系,而订单明细表和产品表之间有关系,那他们算不算有间接关系呢?

大海:你真会牵线。也可以这么理解吧,所以在Power Pivot里你只要对订单表和订单明细表、订单明细表和产品表分别建立表间关系,那么就可以在订单表里通过一定的方法得到产品表的相关信息,或在产品表里通过一定方法获得订单表里的信息,不过这方面的内容比较复杂一些,在后续的数据建模中咱们再一起看。

小勤:好的。

0 人点赞