📜  QlikView-星型模式(1)

📅  最后修改于: 2023-12-03 14:46:50.257000             🧑  作者: Mango

QlikView 星型模式

QlikView 星型模式是数据建模中常用的一种方式,它基于事实表和若干个维度表的关系,形成一张星型的关系图,被广泛应用于数据仓库和商业智能领域。

背景

在传统数据管理中,数据往往被存储在各种数据库表中,不同数据之间的关系也被记录在表之间的外键关系中。而在应用程序中,需要将不同的数据关联起来,进行查询和分析等操作。这个过程中,常常需要使用到多张表之间的关联查询,这会导致查询性能下降,同时也会增加维护的成本。

为了解决这个问题,数据建模领域提出了星型模式。在星型模式中,数据被划分成两类:事实表和维度表。其中,事实表包含一系列业务数据,例如销售额、客户数量等。而维度表则用来描述事实表中的数据,例如产品、时间、地点等。通过在事实表和维度表之间建立关联关系,形成一张星型关系图。这样,应用程序就可以通过查询事实表和关联的维度表,来实现更快的查询与分析。

构成
  • 事实表:指存储与业务相关的数据表,通常以时间为粒度进行记录,并且每个度量只存在一张事实表中。可以理解为“客观事实的存储地”。
  • 维度表:用来记录事实表中的度量数据的各种属性信息,可以理解为对“客观事实”进行维度划分的表,常常包括时间、地点、人员等维度信息。
  • 连接:用来描述事实表和维度表之间的关联关系的模型,通常以星型模式表示。
优点
  • 易于理解:通过星型模式,将数据仓库中的数据特征进行可视化,可以轻松让用户了解数据仓库中的主要数据。
  • 易于维护:星型模式简化了表之间的关系,使用者可以通过简单的 SQL 查询进行数据分析。
  • 明确的数据结构:分离事实表和维度表,使得数据表间的依赖关系更明确和简单,使得整体数据架构更清晰。
缺点
  • 数据冗余:在维度表中会存储事实表的关键字,导致数据冗余,并且每次对于维度表的修改都会影响到事实表的记录。
  • 性能问题:数据的冗余和关联查询等因素,可能导致查询性能降低。
  • 建模复杂:如果不好地把握事实表和维度表的关系,很容易导致建模复杂。
使用
-- 事实表
CREATE TABLE sales (
    id INT PRIMARY KEY,
    date DATE,
    product_id INT,
    price DECIMAL,
    quantity INT
);

-- 维度表
CREATE TABLE products (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    category_id INT
);

CREATE TABLE categories (
    id INT PRIMARY KEY,
    name VARCHAR(50)
);

-- 建立连接
SELECT *
FROM sales
JOIN products ON sales.product_id = products.id
JOIN categories ON products.category_id = categories.id;

上述 SQL 语句创建了两个维度表、一个事实表,并且建立了三个表之间的连接。通过这种方式,可以进行类似以下 SQL 查询的操作:

SELECT category_name, date, AVG(price*quantity) AS revenue
FROM sales
JOIN products ON sales.product_id = products.id
JOIN categories ON products.category_id = categories.id
GROUP BY category_name, date;

该查询分组计算每个类别中每天的平均销售额,其中规范化的销售金额通过事实表和维度表之间的连接来计算。

总结

星型模式作为一种嵌入式数据建模方式,在数据仓库和商业智能领域中得到了广泛的应用。虽然它存在着一些缺点,但总体上来说,星型模式的优点还是比较明显的,能够帮助企业更快速地进行数据分析和业务决策。