Saya melakukan tugas desain database sederhana sebagai latihan pelatihan di mana saya harus datang dengan desain skema dasar untuk kasus berikut:
Saya memiliki hierarki produk induk-anak (misalnya, Bahan Baku> Pekerjaan sedang Berlangsung> Produk Akhir).
- Pesanan ditempatkan di setiap level.
- Jumlah pesanan dapat dilihat dalam ember mingguan selama 6 bulan ke depan.
- Perkiraan permintaan dapat dilakukan untuk setiap tingkat produk.
- Perkiraan permintaan untuk setiap minggu dalam 6 bulan ke depan dapat dilakukan hari ini.
- Prakiraan permintaan dilakukan untuk ember mingguan, selama 6 bulan ke depan.
Demand Forecast biasanya dilakukan di tingkat yang lebih tinggi dalam hierarki (Bahan Baku atau Pekerjaan dalam tingkat Kemajuan) Itu harus dipilah ke tingkat yang lebih rendah (Produk Akhir).
Ada 2 cara di mana perkiraan permintaan dapat dipilah dari tingkat yang lebih tinggi ke tingkat yang lebih rendah:
- Pengguna menentukan distribusi persentase untuk produk akhir. Katakanlah, ada perkiraan 1000 untuk Work In Progress .. dan pengguna berkata saya ingin 40% untuk Produk Akhir 1 dan 60% untuk Produk Akhir 2 di ember 10 .. Kemudian untuk minggu ke 10 (Minggu hingga Sabtu) dari sekarang, nilai perkiraan untuk Produk Akhir 1 akan menjadi 400 dan, untuk Produk Akhir 2 akan menjadi 600.
- Kata pengguna, pisahkan menurut pesanan yang ditempatkan terhadap produk akhir dalam Bucket 5, dan pesanan dalam bucket 5 untuk Produk Akhir 1 dan 2 masing-masing adalah 200 dan 800, maka nilai perkiraan untuk EP1 adalah ((200/1000) * 100)% dan untuk EP2 akan menjadi ((800/1000) * 100)% dari perkiraan untuk 'Work in Progress'.
Prakiraan akan dapat dilihat dalam ember mingguan selama 6 bulan ke depan dan format yang ideal adalah:
product name | bucket number | week start date | week end date | forecast value | created_on
Tabel PRODUCT_HIERARCHY dapat terlihat seperti ini:
id | name | parent_id
__________________________________________
1 | raw material | (null)
2 | work in progress | 1
3 | end product 1 | 2
4 | end product 2 | 2
Tabel ORDERS mungkin terlihat seperti ini:
id | prod_id | order_date | delivery_date | delivered_date
dimana,
prod_id
adalah kunci asing yang merujuk id
pada tabel PRODUCT_HIERARCHY,
Bagaimana cara menyimpan ramalan? Apa yang akan menjadi skema dasar yang baik untuk persyaratan seperti itu?
Ide saya untuk memilih pesanan untuk 26 ember mingguan adalah:
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);
Tapi ini akan memberikan ember mingguan mulai dari hari ini terlepas dari hari itu. Bagaimana saya bisa mengubahnya menjadi Minggu hingga Sabtu minggu di Oracle?
Tolong bantu merancang struktur database ini.
(akan menggunakan Oracle 11g)
sumber
Jawaban:
Oke, jadi inilah model data yang saya buat.
PRODUCT - untuk menyimpan informasi produk dan mempertahankan hierarki orang tua-anak
PESANAN - untuk menyimpan pesanan untuk produk
PERKIRAAN - untuk menyimpan nilai perkiraan produk (nilai toko untuk tingkat yang lebih tinggi, nilai toko untuk tingkat yang lebih rendah setelah pemisahan dari induk)
DISAGGREGATION_RULES - untuk menyimpan metode mana yang digunakan untuk memisahkan nilai dari level yang lebih tinggi ke level yang lebih rendah dan berapa banyak persentase yang didistribusikan ke level yang lebih rendah
DATE_INFO - dimensi tanggal, memiliki informasi tentang tanggal mulai (harus Sabtu) dan tanggal akhir yang sesuai dengan minggu saat tanggal tertentu jatuh
Adapun nomor ember .. Saya menghitung tanggal mulai minggu (tanggal pada hari Sabtu, dalam kasus saya) dengan fungsi berikut
sumber