Как связывать предприятия, филиалы, склады, стеллажи, ящики в иерархической структуре?
Пишу программу складского учета (не лаб). Поставщики, покупатели и "мой фирмы" в таблице "контрагенты" вместе ("мой фирмы" от поставщиков и покупателей различаю по реквизиту "MyFirm").
Часть диаграммы:
Хочу создать иерархическую структуру типа:
* Фирма №1
* филиал(магазин)№1
* склад №1(основной, для товара)
* стеллаж №1
* стеллаж №2
* ящик №1(часто используется,напр, в аптеках)
* ящик №2
* склад №2(для материалов)
* склад №3(для списанного товара,пока налоговая не разрешить уничтожить)
* филиал(магазин)№2
* склад №1
* Фирма №2
и т.д.
То есть сначала, когда клиент создаст свою фирму, в таблице MyFirms его фирма не вставляется, она будет в контрагентах и MyFirms таблица связывается с таблицей "контрагенты" через ID.
Мой вопросы:
1) Как создать такую древовидную структуру?
Если в таблице склады добавлю поле ParentID, тогда смогу создать записи стеллажей и ящиков и построить иерархию склада типа:
* Склад №1
* стеллаж №1
* ящик №1
* ящик №2
* стеллаж №2
* ящик №3
* ящик №4
* Склад №2
* стеллаж №3
* ящик №5
* ящик №6
и т.д.
Если в таблице Контрагенты добавлю поле ParentID, тогда смогу вставить в таблице записи филиалов и подразделении и построить иерархию типа:
* Фирма №1
* филиал(магазин)№1
* подразделение №1
* подразделение №2
* филиал(магазин)№2
* подразделение №3
* подразделение №4
* Фирма №2
* филиал(магазин)№3
* подразделение №5
* подразделение №6
и т.д.
Но это не та иерархия - получу 2 отдельные иерархии без связи между ними. А мне нужен другая иерархия (см. вверх).
2) Если иерархию построю по-другому (т.н. "структура с потабличным хранением уровней", т.е. цепь связанных таблиц: фирмы-филиалы-подразделения-склады-стеллажи-ящики и т.д.), тогда какую иерархию построить - у одних фирм не будет стеллажи и таблица будет пустая, у других ящики, а третьи захотят добавить что-то другое, и для них придётся создать дополнит. таблицу. Как запихнуть для них в этой предопределенно созданной цепи справочников новый справочник, то есть новую таблицу?
Как? Что-то сильно запутался, прошу помочь/поправить/дать предложения. Заранее спасибо.