চাহিদা পূর্বাভাস পৃথককরণের জন্য সাধারণ স্কিমা ডিজাইন করা


9

আমি একটি প্রশিক্ষণ অনুশীলন হিসাবে একটি সাধারণ ডাটাবেস ডিজাইনের কাজটি করছি যেখানে নিম্নলিখিত মামলার জন্য আমাকে একটি বেসিক স্কিমা নকশা নিয়ে আসতে হবে:

আমার কাছে পণ্যগুলির একটি পিতামাতার সন্তানের শ্রেণিবদ্ধতা রয়েছে (উদাহরণস্বরূপ, কাঁচামাল> প্রগতিতে কাজ> শেষ পণ্য)।

  • প্রতিটি স্তরে অর্ডার দেওয়া হয়।
  • অর্ডার সংখ্যা পরবর্তী 6 মাসের জন্য সাপ্তাহিক বালতিতে দেখা যাবে।
  • চাহিদা পূর্বাভাস প্রতিটি পণ্য স্তরের জন্য করা যেতে পারে।
  • আগামী 6 মাসের মধ্যে যে কোনও সপ্তাহের জন্য চাহিদা পূর্বাভাস আজ করা যেতে পারে।
  • ডিমান্ড পূর্বাভাস পরবর্তী 6 মাসের জন্য সাপ্তাহিক বালতিগুলির জন্য করা হয়।

চাহিদা পূর্বাভাস সাধারণত স্তরক্রমের উচ্চ স্তরে করা হয় (কাঁচামাল বা অগ্রগতি স্তরে কাজ) এটি একটি নিম্ন স্তরের (শেষ পণ্য) এ পৃথক করা উচিত।

এমন দুটি উপায় রয়েছে যার মাধ্যমে চাহিদা পূর্বাভাস উচ্চতর স্তর থেকে নিম্ন স্তরে পৃথক করা যায়:

  1. ব্যবহারকারী শেষ পণ্যের জন্য শতাংশ বিতরণ নির্দিষ্ট করে। বলুন, ওয়ার্ক ইন অগ্রগতির জন্য 1000 এর পূর্বাভাস রয়েছে .. এবং ব্যবহারকারী বলেছেন আমি শেষ পণ্য 1 এর 40% এবং শেষ পণ্য 2 বালতি 10 এ 60% চাই Then শেষের জন্য পণ্য 1 হবে 400 এবং শেষ পণ্য 2 এর 600 হবে।
  2. ব্যবহারকারী বলেছেন, বালতি ৫-এ শেষ পণ্যগুলির বিরুদ্ধে অর্ডারগুলি অনুসারে পৃথক করুন এবং শেষ পণ্য 1 এবং 2 এর জন্য বালতি 5 এ অর্ডার যথাক্রমে 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

অর্ডারস টেবিলটি দেখতে এমন হতে পারে :

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);

তবে এটি দিন নির্বিশেষে আজ থেকে শুরু করে সাপ্তাহিক বালতি দেবে। ওরাকলে আমি কীভাবে তাদের রবিবার থেকে শনিবার সপ্তাহে রূপান্তর করতে পারি?

এই ডাটাবেস কাঠামো ডিজাইন করতে সাহায্য করুন।

(ওরাকল 11 জি ব্যবহার করা হবে)


1
মনে হচ্ছে আপনি কোনও ডেটা গুদাম তৈরি করছেন। অর্ডার ফ্যাক্ট টেবিল হবে। পণ্য এবং তারিখ টেবিল তারিখ। আপনি একটি জমা হওয়া ফ্যাক্ট টেবিলটি ব্যবহার করতে চাইতে পারেন, যেমন আপনি এমন একটি প্রক্রিয়া দেখছেন যার কয়েকটি ধাপ রয়েছে।
নীল ম্যাকগুইগান

উত্তর:


1

ঠিক আছে, তাই আমি এখানে এসেছি ডেটা মডেল।

পণ্য - পণ্য সম্পর্কিত তথ্য সংরক্ষণ এবং পিতামাতার-শিশু ক্রিয়াকলাপ বজায় রাখতে

id  NUMBER  "Primary Key Not Null"                  
level_code  VARCHAR2    Not Null                    
name    VARCHAR2    Not Null                    
description VARCHAR2                        
parent_id   NUMBER  Foreign Key references PRODUCT(id)                  

অর্ডার - পণ্য ক্রয়ের জন্য

id  NUMBER  "Primary Key Not Null"                  
prod_id     NUMBER  "Foreign Key references PRODUCT(id) Not Null"                   
order_type  VARCHAR2    "Not Null Default 'Default'"
order_qty   NUMBER  Not Null
order_date  NUMBER  Foreign Key references DATE_INFO(date_key)
delivery_date   NUMBER  "Foreign Key references DATE_INFO(date_key)
Check delivery_date >= order_date"

ফরেক্সট - পণ্যগুলির জন্য পূর্বাভাসের মান সংরক্ষণ করতে (উচ্চ স্তরের জন্য স্টোর মান, পিতামাতার কাছ থেকে পৃথকীকরণের পরে নিম্ন স্তরের জন্য স্টোর মান)

id  NUMBER  "Primary Key Not Null"
product_id  NUMBER  "Foreign Key references PRODUCT(id) Not Null"
forecast_value  NUMBER  Not Null
week    NUMBER  "Foreign Key references DATE_INFO(date_key) Not Null"                   

DISAGGREGATION_RULES - একটি উচ্চ স্তর থেকে নিম্ন স্তরে কোনও মানকে আলাদা করার জন্য কোন পদ্ধতিটি ব্যবহার করা হয়েছিল এবং কত শতাংশ নিম্ন স্তরে বিতরণ হয়েছিল

id  NUMBER  "Primary Key Not Null"
parent_product_id   NUMBER  "Foreign Key id references PRODUCT(id) Not Null"
child_product_id    NUMBER  "Foreign Key id references PRODUCT(id) Not Null"
method  VARCHAR2    Not Null                    
from_week   NUMBER  "Foreign Key references DATE_INFO(date_key) Not Null"
to_week NUMBER  "Foreign Key references DATE_INFO(date_key) Not Null Check end_week >= start_week"
percent_distribution    NUMBER  Not Null                    

DATE_INFO - তারিখের মাত্রা, শুরুর তারিখ (শনিবার হতে হবে) এবং সপ্তাহের সাথে সম্পর্কিত নির্দিষ্ট তারিখ সম্পর্কিত কোনও নির্দিষ্ট তারিখের তথ্য রয়েছে

date_key    NUMBER  "Primary Key
Not Null"                   
full_date   DATE    Not Null                    
week_begin_date DATE    Not Null                    
week_end_date   DATE    Not Null

বালতি নম্বর হিসাবে .. আমি নিম্নলিখিত ফাংশন সহ সপ্তাহের শুরু তারিখ (শনিবার তারিখ, আমার ক্ষেত্রে) গণনা করছি

CREATE OR REPLACE FUNCTION get_week_start_date(v_bucket_num IN NUMBER)
  RETURN DATE
IS
  week_start_date DATE;
BEGIN
  SELECT (TRUNC(SYSDATE+2, 'IW')-2) + ((v_bucket_num-1) * 7)
  INTO week_start_date FROM dual;
  RETURN week_start_date;
END;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.