Je fais une tâche de conception de base de données simple comme un exercice de formation où je dois proposer une conception de schéma de base pour le cas suivant:
J'ai une hiérarchie parent-enfant de produits (par exemple, Matière première> Travail en cours> Produit final).
- Les commandes sont passées à chaque niveau.
- Le nombre de commandes sera visible dans des seaux hebdomadaires pour les 6 prochains mois.
- La prévision de la demande peut être effectuée pour chaque niveau de produit.
- La prévision de la demande pour n'importe quelle semaine dans les 6 prochains mois peut être faite aujourd'hui.
- La prévision de la demande se fait pour les seaux hebdomadaires, pour les 6 prochains mois.
La prévision de la demande est généralement effectuée au niveau supérieur de la hiérarchie (niveau des matières premières ou des travaux en cours). Elle doit être ventilée à un niveau inférieur (produit final).
Il existe deux façons de désagréger la prévision de la demande d'un niveau supérieur à un niveau inférieur:
- L'utilisateur spécifie la distribution en pourcentage du produit final. Disons, il y a une prévision de 1000 pour le travail en cours .. et l'utilisateur dit que je veux 40% pour le produit final 1 et 60% pour le produit final 2 dans le compartiment 10 .. Ensuite, pour la 10e semaine (du dimanche au samedi) à partir de maintenant, la valeur de prévision pour le produit final 1 serait 400 et, pour le produit final 2 serait 600.
- L'utilisateur dit, juste désagréger selon les commandes passées contre les produits finaux dans le compartiment 5, et les commandes dans le compartiment 5 pour le produit final 1 et 2 sont respectivement de 200 et 800, alors la valeur prévue pour EP1 serait ((200/1000) * 100)% et pour EP2 serait ((800/1000) * 100)% des prévisions pour les «travaux en cours».
Les prévisions doivent être consultables par tranches hebdomadaires pour les 6 prochains mois et le format idéal doit être:
product name | bucket number | week start date | week end date | forecast value | created_on
La table PRODUCT_HIERARCHY pourrait ressembler à ceci:
id | name | parent_id
__________________________________________
1 | raw material | (null)
2 | work in progress | 1
3 | end product 1 | 2
4 | end product 2 | 2
La table ORDERS pourrait ressembler à ceci:
id | prod_id | order_date | delivery_date | delivered_date
où,
prod_id
est une clé étrangère qui fait référence à la id
table PRODUCT_HIERARCHY,
Comment stocker les prévisions? Quel serait un bon schéma de base pour une telle exigence?
Mon idée pour sélectionner les commandes de 26 seaux hebdomadaires est la suivante:
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);
Mais cela donnera des seaux hebdomadaires à partir d'aujourd'hui, quel que soit le jour. Comment puis-je les convertir en semaines du dimanche au samedi dans Oracle?
Aidez-nous à concevoir cette structure de base de données.
(utilisera Oracle 11g)