【发布时间】:2018-07-17 15:39:04
【问题描述】:
我有一个场景要建立一个仓库来记录租赁活动。基本上,我有 3 个表,分别是rental_orders、rental_events 和rental_charges。表的架构如下,
Rental_orders:-
create table rental_orders
( order_id varchar(256),
order_item_id varchar(256),
rental_credit_amount numeric(28,4),
rental_credit_unit numeric(28,4),
customer_id varchar(512),
country_code varchar(56),
shipping_cost numeric(28,4),
return_cost numeric(28,4)
)
Create table rental_events(
order_item_id varchar(256),
event_id varchar(256),
event_type varchar(512),
charge_id varchar(1024),
event_start_date timestamp,
event_end_date timestamp,
extension_type varchar(256),
credit_amount decimal(28,4),
due_date_original timestamp,
due_date_extended timestamp
)
Create table rental_charges(
charge_id varchar(1024),
customer_id varchar(512),
charge_type varchar(1024),
amount decimal(28,4),
response varchar(1024)
)
以上架构遵循以下规则
-
rental_orders表中的order_item_id可以有多个事件,这些事件是在rental_events表中预设的。 - rental_events 中的每个事件都可以有多个费用,这些费用存储在
rental_charges表中。
因此,要使用上述模式设计非规范化事实表,我曾考虑使用累积快照事实表,但在我的场景中,rental_order_item_id 可能会发生 35 个不同的事件,而我的企业想要记录数据和时间戳对于每一个事件。所以在我的情况下,一个事件可以有自己的extension_type、credit_amount、due_date_original 和due_date_extended,创建累积快照将有 35*4 = 140 列,这些列太多需要维护。
任何人都可以建议一种更好的方法来为上述表模式设计事实表。
【问题讨论】:
标签: database oracle database-design amazon-redshift data-modeling