在我的数据仓库案例中计算维数 table(s)
Figuring out number of dimension table(s) in my case of data warehouse
我是数据仓库的新手,所以请放轻松。
我试图计算出这种情况下的维数。
在我的交易数据库中:
我有一个 table 存储位置代码。列为 location_code int not null primary key, short_description varchar(10) not null, long_description varchar(100) not null
。
我有一个 table 存储区域代码。列为 region_code int not null primary key, short_description varchar(10) not null, long_description varchar(100) not null
。
我有一个 table 关联位置和区域。列为 assoc_id int not null primary key, location_code int not null, region_code int not null
。 1 个位置仅属于 1 个区域。
在我的数据仓库数据库中,用户可能希望按位置或区域查找数据。
现在我希望在这种情况下创建维度 table(s)。
想知道我是否应该通过这种方式创建二维 tables(1 个用于位置,1 个用于区域)?
为 Location 创建 1 个维度 table,其中还包含具有以下列的 Region:location_code int not null primary key, location_short_description varchar(10) not null, location_long_description varchar(100) not null, region_code int not null, region_short_description varchar(10) not null, region_long_description varchar(100) not null
为区域创建 1 个维度 table,该区域还具有以下列的位置:region_code int not null primary key, region_short_description varchar(10) not null, region_long_description varchar(100) not null, location_code int not null, location_short_description varchar(10) not null, location_long_description varchar(100) not null
或者我应该以这种方式创建 4 个维度 tables(1 个用于位置,1 个用于区域,1 个用于位置区域关联,1 个用于区域位置关联)?
使用以下列为位置创建 1 个维度 table:location_code int not null primary key, short_description varchar(10) not null, long_description varchar(100) not null
使用以下列为区域创建 1 个维度 table:region_code int not null primary key, short_description varchar(10) not null, long_description varchar(100) not null
为位置区域关联创建 1 个维度 table 与这些列:location_code int not null, region_code int not null
为区域位置关联创建 1 个维度 table 与这些列:region_code int not null, location_code int not null
或者还有其他更有意义的方法吗?如果是,请告诉
在数据仓库世界中,这称为什么类型的关系,处理它的标准方法是什么?
谢谢
我会在同一维度(根据业务用途命名,例如 D_Location 或 D_Geography)对位置和区域建模。
小时数将在事实 table 和事实 table F_Hour 和 D_Location 将与代理键(Oracle 中的序列或标识在 Sql 服务器中)。
Region 和 Location 的所有描述性列都可以在 D_Location 中愉快地共存(当然 Region 不会被规范化,但这是通常的做法)。
我认为您不需要在维度 table 中跟踪位置和区域的关联。该关联可以是事实 table。
我会创建 2 个维度 tables D_Location & D_Region 和 1 个事实tableF_Hour。
D_Location:
location_code int not null primary key, short_description varchar(10) not null, long_description varchar(100) not null
D_Region:
region_code int not null primary key, short_description varchar(10) not null, long_description varchar(100) not null
F_Hour:
hour_id int not null primary key, location_code int not null, region_code int not null, hours decimal(10,2) not null
F_Hour 将有 1 个 FK 到 D_Location 和 1 个 FK 到 D_Region。
获取特定 location_code 的小时数 (@location_code):
select h.location_code, l.short_description, l.long_description, sum(h.hours)
from F_Hour h inner join D_Location l on h.location_code = l.location_code
where h.location_code = @location_code
group by h.location_code, l.short_description, l.long_description
order by h.location_code
获取特定 region_code (@region_code) 的小时数:
select h.region_code, r.short_description, r.long_description, sum(h.hours)
from F_Hour h inner join D_Region r on h.region_code = r.region_code
where h.region_code = @region_code
group by h.region_code, r.short_description, r.long_description
order by h.region_code
有道理吗?
我是数据仓库的新手,所以请放轻松。
我试图计算出这种情况下的维数。
在我的交易数据库中:
我有一个 table 存储位置代码。列为
location_code int not null primary key, short_description varchar(10) not null, long_description varchar(100) not null
。我有一个 table 存储区域代码。列为
region_code int not null primary key, short_description varchar(10) not null, long_description varchar(100) not null
。我有一个 table 关联位置和区域。列为
assoc_id int not null primary key, location_code int not null, region_code int not null
。 1 个位置仅属于 1 个区域。
在我的数据仓库数据库中,用户可能希望按位置或区域查找数据。
现在我希望在这种情况下创建维度 table(s)。
想知道我是否应该通过这种方式创建二维 tables(1 个用于位置,1 个用于区域)?
为 Location 创建 1 个维度 table,其中还包含具有以下列的 Region:
location_code int not null primary key, location_short_description varchar(10) not null, location_long_description varchar(100) not null, region_code int not null, region_short_description varchar(10) not null, region_long_description varchar(100) not null
为区域创建 1 个维度 table,该区域还具有以下列的位置:
region_code int not null primary key, region_short_description varchar(10) not null, region_long_description varchar(100) not null, location_code int not null, location_short_description varchar(10) not null, location_long_description varchar(100) not null
或者我应该以这种方式创建 4 个维度 tables(1 个用于位置,1 个用于区域,1 个用于位置区域关联,1 个用于区域位置关联)?
使用以下列为位置创建 1 个维度 table:
location_code int not null primary key, short_description varchar(10) not null, long_description varchar(100) not null
使用以下列为区域创建 1 个维度 table:
region_code int not null primary key, short_description varchar(10) not null, long_description varchar(100) not null
为位置区域关联创建 1 个维度 table 与这些列:
location_code int not null, region_code int not null
为区域位置关联创建 1 个维度 table 与这些列:
region_code int not null, location_code int not null
或者还有其他更有意义的方法吗?如果是,请告诉
在数据仓库世界中,这称为什么类型的关系,处理它的标准方法是什么?
谢谢
我会在同一维度(根据业务用途命名,例如 D_Location 或 D_Geography)对位置和区域建模。
小时数将在事实 table 和事实 table F_Hour 和 D_Location 将与代理键(Oracle 中的序列或标识在 Sql 服务器中)。
Region 和 Location 的所有描述性列都可以在 D_Location 中愉快地共存(当然 Region 不会被规范化,但这是通常的做法)。
我认为您不需要在维度 table 中跟踪位置和区域的关联。该关联可以是事实 table。
我会创建 2 个维度 tables D_Location & D_Region 和 1 个事实tableF_Hour。
D_Location:
location_code int not null primary key, short_description varchar(10) not null, long_description varchar(100) not null
D_Region:
region_code int not null primary key, short_description varchar(10) not null, long_description varchar(100) not null
F_Hour:
hour_id int not null primary key, location_code int not null, region_code int not null, hours decimal(10,2) not null
F_Hour 将有 1 个 FK 到 D_Location 和 1 个 FK 到 D_Region。
获取特定 location_code 的小时数 (@location_code):
select h.location_code, l.short_description, l.long_description, sum(h.hours)
from F_Hour h inner join D_Location l on h.location_code = l.location_code
where h.location_code = @location_code
group by h.location_code, l.short_description, l.long_description
order by h.location_code
获取特定 region_code (@region_code) 的小时数:
select h.region_code, r.short_description, r.long_description, sum(h.hours)
from F_Hour h inner join D_Region r on h.region_code = r.region_code
where h.region_code = @region_code
group by h.region_code, r.short_description, r.long_description
order by h.region_code
有道理吗?