Tôi đang thực hiện một nhiệm vụ thiết kế cơ sở dữ liệu đơn giản như một bài tập huấn luyện mà tôi phải đưa ra một thiết kế lược đồ cơ bản cho trường hợp sau:
Tôi có hệ thống phân cấp sản phẩm giữa cha và con (ví dụ: Nguyên liệu thô> Công việc đang tiến hành> Sản phẩm cuối).
- Đơn đặt hàng được đặt ở mỗi cấp.
- Số lượng đơn đặt hàng sẽ có thể xem được trong các thùng hàng tuần trong 6 tháng tới.
- Dự báo nhu cầu có thể được thực hiện cho từng cấp độ sản phẩm.
- Dự báo nhu cầu cho bất kỳ tuần nào trong vòng 6 tháng tới có thể được thực hiện ngày hôm nay.
- Dự báo nhu cầu được thực hiện cho các thùng hàng tuần, trong 6 tháng tới.
Dự báo nhu cầu thường được thực hiện ở cấp cao hơn trong phân cấp (Nguyên liệu thô hoặc Công việc ở cấp tiến độ) Nó phải được phân chia thành cấp thấp hơn (Sản phẩm cuối).
Có 2 cách để dự báo nhu cầu có thể được phân tách từ cấp cao hơn xuống cấp thấp hơn:
- Người dùng chỉ định phân phối tỷ lệ phần trăm cho sản phẩm cuối cùng. Giả sử, có dự báo 1000 cho Công việc đang tiến hành .. và người dùng nói rằng tôi muốn 40% cho Sản phẩm cuối 1 và 60% cho Sản phẩm cuối 2 trong nhóm 10 .. Sau đó, từ tuần thứ 10 (Chủ nhật đến Thứ bảy) từ bây giờ, giá trị dự báo cho Sản phẩm cuối 1 sẽ là 400 và đối với Sản phẩm cuối 2 sẽ là 600.
- Người dùng cho biết, chỉ phân chia theo đơn đặt hàng so với sản phẩm cuối trong Nhóm 5 và đơn hàng trong nhóm 5 cho Sản phẩm cuối 1 và 2 lần lượt là 200 và 800, sau đó giá trị dự báo cho EP1 sẽ là ((200/1000) * 100)% và đối với EP2 sẽ là ((800/1000) * 100)% dự báo cho 'Công việc đang tiến triển'.
Dự báo sẽ có thể xem được trong các thùng hàng tuần trong 6 tháng tới và định dạng lý tưởng phải là:
product name | bucket number | week start date | week end date | forecast value | created_on
Bảng PRODUCT_HIERARCHY có thể trông như thế này:
id | name | parent_id
__________________________________________
1 | raw material | (null)
2 | work in progress | 1
3 | end product 1 | 2
4 | end product 2 | 2
Bảng ORDERS có thể trông như thế này:
id | prod_id | order_date | delivery_date | delivered_date
Ở đâu,
prod_id
là khóa ngoại tham chiếu id
của bảng PRODUCT_HIERARCHY,
Làm thế nào để lưu trữ dự báo? Điều gì sẽ là một lược đồ cơ bản tốt cho một yêu cầu như vậy?
Ý tưởng của tôi để chọn đơn hàng cho 26 thùng hàng tuần là:
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);
Nhưng điều này sẽ cung cấp cho các thùng hàng tuần bắt đầu từ hôm nay bất kể ngày nào. Làm cách nào tôi có thể chuyển đổi chúng sang Chủ nhật sang tuần thứ bảy trong Oracle?
Xin hãy giúp thiết kế cấu trúc cơ sở dữ liệu này.
(sẽ sử dụng Oracle 11g)