Вопрос изрядно холиварный.
То как сделали вы - имеет право на существование, но лично я бы по умолчанию сделал вместо "товар в магазине" и "товар на складе" одну таблицу вида:
- тип где (магазин, склад)
- код где
- код товара
Не забыть повесить на эти 3 поля уникальный индекс, а лучше даже сделать составной primary из 3х полей, без отдельного поля.
Из очевидных преимуществ:
- проще расширять (завтра у вас еще какой-нибудь "транзитный склад" появится)
- проще строить отчеты всякие по остаткам
PS Меня больше смущает таблица "зона поставок" - что это такое, почему она связывает и магазин и склад и товар?