Я бы сделал так:
- Таблица Приход (ДатаВремя, FK Приходная накладная, FK Номенклатура, Кол-во, Цена);
- Таблица Расход (ДатаВремя, FK Расходная накладная, FK Номенклатура, Кол-во, FK Цена);
- Таблица Списание (ДатаВремя, FK Акт списания, FK Номенклатура, Кол-во, Причина);
- Таблица Остатки (ДатаВремя, FK Номенклатура, Кол-во). Таблица будет хранить всю хронологию изменения остатков (можно будет посмотреть остатки на любой момент времени в прошлом);
Чтобы данные в таблицах были согласованы, необходимо писать в них транзакциями. Например, если на склад поступило 10 карандашей, то внутри транзакции будет сделана запись в таблицы Приход и Остатки. Теоретически можно обойтись и без таблицы Остатки, так как как остатки на любой момент времени могут быть вычислены из других таблиц, но с точки зрения снижения нагрузки на сервер, я бы её оставил.