Pour la structure de la base, je verrais bien une structure en trois tables :
- Classe
- Nom
- Description
- Code interne
...
- Sous-classe
- Nom
- Description
- Code interne
- Code interne de la classe
...
- Opération
- Code interne
- Code interne de la sous-classe
- Description
- Date
- Différentiel du nombre de produits
...
Lorsque l'opération consiste à ajouter des produits à ton stock, le différentiel du nombre de produits est positif, sinon, il est négatif. Pour avoir l'état du stock à une date, tu fais la somme des différentiels de toutes les opérations avant la date.
Pour éviter les redondances sur les opérations, tu pourrais ajouter une table Type d'opération dont tu renseignerais la clé unique des enregistrements dans ceux de la table Opération.