我正在做一个简单的数据库设计任务,作为一个培训练习,在这种情况下,我必须针对以下情况提出基本的架构设计:
我具有产品的父子层次结构(例如,“原材料”>“在制品”>“最终产品”)。
- 在每个级别下订单。
 - 在接下来的6个月内,应在每周的存储桶中查看订单数量。
 - 可以针对每个产品级别进行需求预测。
 - 未来6个月内任何一周的需求预测都可以在今天完成。
 - 未来6个月将对每周的水桶进行需求预测。
 
需求预测通常在层次结构的较高级别(原始物料或在制品级别)进行,必须将其分解为较低级别(最终产品)。
有两种方法可以将需求预测从较高级别分解为较低级别:
- 用户指定最终产品的百分比分布。假设有一个正在进行的工作的1000的预测..用户说我要在存储区10中为最终产品1分配40%,为最终产品2分配60%。然后从现在开始第10周(星期日至星期六),预测值最终产品1的价格为400,最终产品2的价格为600。
 - 用户说,只需根据针对第5个桶中的最终产品下达的订单进行分解,而第5个桶中第1个产品和第2个产品的订单分别为200和800,则EP1的预测值为((200/1000)* 100)%对于EP2,将是“进行中的工作”预测的((800/1000)* 100)%。
 
在接下来的6个月中,应可以按周的时段查看预测,理想的格式应为:
product name | bucket number | week start date | week end date | forecast value | created_on
PRODUCT_HIERARCHY表可能如下所示:
id  |   name                |   parent_id
__________________________________________
1   |   raw material        |   (null)
2   |   work in progress    |   1
3   |   end product 1       |   2
4   |   end product 2       |   2
ORDERS表可能如下所示:
id | prod_id | order_date | delivery_date | delivered_date
哪里,
prod_id是引用idPRODUCT_HIERARCHY表的外键,
如何存储预测? 对于这样的要求,什么是好的基础架构?
我选择每周26个桶的订单的想法是:
SELECT
    COUNT(*) TOTAL_ORDERS,
    WIDTH_BUCKET(
        delivery_date,
        SYSDATE,
        ADD_MONTHS(sysdate, 6), 
        TO_NUMBER( TO_CHAR(SYSDATE,'DD-MON-YYYY') - TO_CHAR(ADD_MONTHS(sysdate, 6),'DD-MON-YYYY') ) / 7
    ) BUCKET_NO
FROM
    orders_table
WHERE
    delivery_date BETWEEN SYSDATE AND ADD_MONTHS(sysdate, 6);
但这将使从今天开始的每周时段,与一天无关。如何在Oracle中将它们转换为星期日至星期六?
请帮助设计此数据库结构。
(将使用Oracle 11g)
                
                1
              
                  听起来就像您正在建立数据仓库。顺序将是事实表。产品和标注表的日期。在查看包含多个步骤的流程时,您可能需要使用累积事实表。
                
                
                  
                    —
                    尼尔·麦圭根