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

标签 database postgresql business-intelligence

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

这是我的表格:

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

谢谢

页面 用户身份 session ID 访客 ID session 国家/地区 ID 页 网站类型 访客类型 资历 页码 结束日期

session 用户身份 session ID 访客 ID 访问国家/地区 ID 操作系统ID days_since_first_session session 开始日期 session 结束日期 正在返回

session_user 用户身份 注册日期 帐户用户 ID 购买日期

国家 国家ID 国家/地区名称

session_user 用户身份 注册日期 帐户用户 ID 购买日期

每日汇总表 日期 访客数量 用户数 session 数 平均页数 先进的 定价

最佳答案

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

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

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);    

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

关于database - 如何在 PostgreSQL 中以星型模式结构排列我的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40972120/

相关文章:

php - 在第 3 个表中插入数据,并在其他 2 个表中插入值

mysql - SQL:获取包含 1 或另一个的列

user-interface - Google Analytics(分析)风格的自定义报告构建器用户界面

postgresql - 计算几个卖家之间的最佳销售

c# - ASP.NET MVC 3 如何将 ViewModel 数据保存到多个关联表

python - sqlalchemy:为什么我不能更新到 func.now(),但可以使用 'now()'?

java - 如何使用 JDBC 在 PostgreSQL 中传递一组复合类型 (UDT)

ssis - 获取维度键时在 SSIS 中加载事实表并不容易

postgresql - postgresql中多列上的多个索引与单个索引

java - 如何使用 JPA 和 Hibernate 复制 INSERT/UPDATE/DELETE 语句