如何在 PostgreSQL 中以星型模式结构排列我的数据

Posted

技术标签:

【中文标题】如何在 PostgreSQL 中以星型模式结构排列我的数据【英文标题】:how to arrange my data in a star schema structure in PostgreSQL 【发布时间】:2016-12-05 10:31:56 【问题描述】:

我不确定使用 Postgres 以星型模式结构排列数据的最佳方式是什么。

这是我的桌子:

1) pages - 保存所有页面访问的数据(访问者在访问网站期间点击的每个页面) 2) sessions - 保存有关会话的数据(例如,每次访问者访问网站时) 3) 国家 - 县列表 4) session_users - 用户和属性列表 5) 每日汇总表格基于以上表格

谢谢

页面 用户身份 session_id 访客 ID session_country_id 页 网站类型 访客类型 资历 页数 结束日期

会话 用户身份 session_id 访客 ID visit_country_id 操作系统ID days_since_first_session session_start_date session_end_date is_returning

session_user 用户身份 注册日期 account_user_id 购买日期

国家 country_id 国名

session_user 用户身份 注册日期 account_user_id 购买日期

每日汇总表 日期 访客人数 num_of_users 会话数 avg_num_of_pages 先进的 定价

【问题讨论】:

【参考方案1】:

最好的方法取决于许多我们不知道的事情,但您希望知道(或应该知道!)包括数据量、更新频率、哪些系统或人员与数据库交互、您如何并且您的用户将使用您的任何解决方案,尤其是您试图通过数据仓库实现的目标。

这里有几个地方可以开始研究:

http://www.kimballgroup.com/data-warehouse-business-intelligence-resources/kimball-techniques/dimensional-modeling-techniques/star-schema-olap-cube/

https://en.wikipedia.org/wiki/Star_schema

非常简单地说,星型模式包含一个或多个包含大量记录的事实表,以及包含较少记录的多个维度表。事实表包含您正在测量或计数的内容,维度包含您要用于汇总数据的特征。每个维度表中的主键都与事实表中的一个键相关——事实表中的每个维度键组合都是唯一的。

那么,首先,您要衡量的事实是什么?收入?命中?要不然是啥?那么,你的维度是什么,每个维度有什么特点?获得答案的一个好地方是考虑您正在解决的业务问题。一旦你有了这些答案,表格设计就会随之而来。值得阅读几本关于数据仓库设计的书籍以获得一些提示,例如建模日期和时间维度。

就 Postgresql 而言,您的表创建查询可能如下所示:

create table dimension1 (
     dimension1_key serial primary key,
     attribute1 text not null default 'unknown',
     attribute2 text  not null default 'unknown');

create table dimension2 (
     dimension2_key serial primary key,
     attribute1 text not null default 'unknown',
     attribute2 text  not null default 'unknown');



create table fact1 (
    dimension1_key integer references dimension1,
    dimension2_key integer references dimension2,
    fact integer,
    constraint pk primary key (dimension1_key,dimension2_key)
    )

您通常会在要汇总的列上放置索引:

create index dimension2_attribute1 on dimension2(attribute1);    

我认为给你一个比这更完整的答案是不可能的,甚至是不可取的。我认为您自己了解仓库设计很重要,您必须为此做一些阅读。

【讨论】:

以上是关于如何在 PostgreSQL 中以星型模式结构排列我的数据的主要内容,如果未能解决你的问题,请参考以下文章

将非星型模式数据库转换为星型模式数据库

数据仓库星型模式的维度表和事实表中的数据如何?

星型模式设计帮助

星型模式 - 外部标识符事实或维度?

如何设计星型模式

插入星型模式