...
- 星型模型:所有维表都直接连接到事实表上,整个视图就像星星一样。
星型模型强调的是对维度进行预处理,将多个维度集合到一个事实表,形成一个宽表。
- 雪花模型:一个或多个维表没有直接连接到事实表上,而是通过其他维度表连接到事实表,视图就像多个雪花连接在一起。
雪花模型是对星型模型的扩展,它对星型模型的维表进一步层次化,原有的各维表可能被扩展为小的事实表,形成一些局部的 "层次 " 区域,这些被分解的表都连接到主维度表而不是事实表。如将产品维表分解为产品类别维表。
...
模型设计过程中,模型表的关系也是很重要的一项内容。
关系的确立需要通过匹配键列中的数据(通常是两表中同名的列)。在大多数情况下,该关系会将一个表中的主键(它为每行提供了唯一标识)与另一个表的外部键中的某项相匹配。例如,通过创建 orderdetails表中的 orderid(主键)与orders 表中的 orderid 列(外部键)之间的关系,则销售量就与订单相关联了。
一对多(多对一)关系
一对多关系是最普通的一种关系。在这种关系中,A 表中的一行可以匹配 B 表中的多行,但是 B 表中的一行只能匹配 A 表中的一行。例如,publishers
和 titles
表之间具有一对多关系:每个出版社出版很多书,但是每本书名只能出自一个出版社。
...
关系的确立需要通过匹配键列中的数据(通常是两表中同名的列)。在大多数情况下,该关系会将一个表中的主键(它为每行提供了唯一标识)与另一个表的外部键中的某项相匹配。例如,通过创建 orderdetails表中的 orderid(主键)与orders 表中的 orderid 列(外部键)之间的关系,则销售量就与订单相关联了。
一对多(多对一)关系
一对多和多对一是相对关系,如下列的课程表与老师表:
站在课程表的角度看是:多对一;站在老师表的角度看是:一对多。
在一对多或多对一的关系中,我们习惯把一的一方称为主表,把多的一方称为从表。
在数据库中建立一对多的关系,需要使用数据库的外键约束:
Course表中的T_id字段建立外键约束,指向Teacher表中的T_id。
一对一关系
在一对一关系中,A 表中的一行最多只能匹配于 B
...
表中的一行,反之亦然。比如,一个人只能有一个身份证号,一个身份证号只能属于一个人。
如果相关列都是主键或都具有唯一约束,则可以创建一对一关系。
这种关系并不常见,因为一般来说,按照这种方式相关的信息都在一个表中。可以利用一对一关系来:
- 分割具有多列的表。
- 由于安全原因而隔离表的一部分。
- 保存临时的数据,并且可以毫不费力地通过删除该表而删除这些数据。
- 保存只适用于主表的子集的信息。
多对多关系
在多对多关系中,A 表中的一行可以匹配 B 表中的多行,反之亦然。要创建这种关系,需要定义第三个表,称为结合表,它的主键由 A 表和 B 表的外部键组成。例如,authors
和 titles
表具有多对多关系,这是由于这些表都与 titleauthors
表具有一对多关系。titleauthors
表的主键是 au_id
列(authors
表的主键)和 title_id
列(titles
表的主键)的组合。多对多的关系,可以看成是两个多对一的关系,如下的课程表和学生表:
站在课程表的角度,一门课可以被多个学生选择,是多对一的关系;站在学生表的角度,一个学生可以选择多门课程,是多对一的关系。
这两个表的多对多关系,通过一张关联表来建立关联:
101课程被学号1、学号2的学生选择;学号1的学生同时选择了101、202、303的课程。
目前Smarbi数据模型构建仅支持一对多(多对一)和一对一关系。
...