编辑:[详细信息]我正在做一个简单的数据库设计任务作为培训练习,我必须为以下情况提出一个基本的模式设计:
我有一个产品的父子层次结构(原材料>正在进行的工作>最终产品)。
订单在每个级别下。
在接下来的 6 个月中,应在每周存储桶中查看订单数量。
可以对每个产品级别进行需求预测。
对未来 6 个月的每周桶进行需求预测。
它通常在层次结构的更高级别(原材料或正在进行的工作)中完成
它必须分解到较低的级别(最终产品)
有两种方法可以将需求预测从较高层次分解到较低层次:
用户指定最终产品的百分比分布。说,有 1000 的预测工作正在进行中.. 用户说我想要 40% 的最终产品 1 和 60% 的最终产品 2 在桶 10.. 然后从现在开始的第 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
这种要求的基本理想模式是什么?
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
这是存储订单的好方法吗?
订单
id | prod_id | order_date | delivery_date | delivered_date
在哪里,
prod_id
是引用id
product_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 11g)