Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.01.2015, 01:13   #1
delphi159
Подтвердите свой е-майл
 
Регистрация: 27.01.2015
Сообщений: 28
По умолчанию Как связывать предприятия,филиалы,склады,стеллажи ,ящики в иерархической структуре

Пищу программу складского учета(не лаб). Поставщики, покупатели и "мой фирмы" в таблице "контрагенты" вместе("мой фирмы" от поставщиков и покупателей различаю по реквизиту "MyFirm").
см. диаграмму:
[Часть Диаграммы](http://fastpic.ru/view/63/2015/0125/...e1870.png.html)
Хочу создать иерархическую структуру типа:
Код:
. Фирма №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) Если иерархию построю по другому( т.н. "структура с потабличным хранением уровней"-т.е. цепь связанных таблиц: фирмы-филиалы-подразделения-склады-стеллажи-ящики и т.д.) тогда какую иерархию построить- у одних фирм не будет стеллажи и таблица будет пустая, у других ящики,а третьи захотят добавить что-то другое и для них придётся создать дополнт.таблицу.Как запихнуть для них в этой предопределенно созданной цепи справочников новый справочник, то есть новую таблицу?


Как? Что-то сильно запутался. прошу помочь/поправить/дать предложения. Заранее спасибо.
delphi159 вне форума Ответить с цитированием
Старый 27.01.2015, 06:37   #2
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Можно к складу/стеллажу/ящику и т.д. добавить поле с id фирмы/филиала/подразделения и т.д. Тогда будет связь между двумя иерархическими структурами.
Streletz вне форума Ответить с цитированием
Старый 27.01.2015, 07:37   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Тогда будет связь между двумя иерархическими структурами.
А если у него там еще планируется таблицы? Например матответственные?
Так то ты прав, но ИМХО тут надо хорошенько продумать структуру. А возможно для этой задачи я бы даже взял не реляционную СУБД (раз это не учебка) а иерархическую.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.01.2015, 09:28   #4
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Если фирма небольшая и запросов к базе не много, можно ограничиться файлом в формате XML. В отличии от базы, включение новых узлов в него, процедура достаточно простая и не требует реорганизации всей базы. По мере того, как файл будет разрастаться, проявится и его структура. На этапе разработки, это самый оптимальный подход. Всё равно на начальной стадии, Вы не сможете предусмотреть всех требований, которые будут выдвигать конечные пользователи.
После того, как структура будет отлажена и количество запросов к файлу возрастёт, можно будет подумать, как это запихнуть в БД.
Вопрос на засыпку. А чем Acess не угодил? В нём такие вещи, на ура можно сделать.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 27.01.2015 в 09:30.
Smitt&Wesson вне форума Ответить с цитированием
Старый 27.01.2015, 09:53   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
В нём такие вещи, на ура можно сделать.
Он реляционный а не иерархический )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.01.2015, 10:16   #6
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Он реляционный а не иерархический )
С какой радости? XML это строковый формат иерархической БД.
Пример:
Код:
<?xml version="1.0" encoding="windows-1251"?>
<recipes host="www.biz-for.ru">
  <group name="Основные блюда">
    <subgroup name="Из морепродуктов">
    </subgroup>
    <subgroup name="Из мяса и субпродуктов">
      <recipe name="Свиные зразы с солеными огурцами" kitchen="Общие">
        <description url="/osnovnye/Svinye_zrazy_s_solenymi_ogurcami/index.php">Зразы</description>
        <ingredient amount="600" unit="грамм">Фарш</ingredient>
        <ingredient amount="150" unit="грамм">Яйца куриные</ingredient>
        <ingredient amount="150" unit="грамм">Батон белый</ingredient>
        <ingredient amount="100" unit="грамм">Молоко</ingredient>
        <ingredient amount="50" unit="грамм">Лук репчатый</ingredient>
        <ingredient amount="300" unit="грамм">Огурцы</ingredient>
        <ingredient amount="50" unit="грамм">Петрушка</ingredient>
        <ingredient amount="100" unit="грамм">Сухари панировочные</ingredient>
        <ingredient amount="200" unit="грамм">Масло подсолнечное</ingredient>
      </recipe>
    </subgroup>
    <subgroup name="Из овощей">
    </subgroup>
  </group>
  <group name="Супы">
    <subgroup name="Сладкие">
      <recipe name="Английский супчик" kitchen="Итальянская">
        <description url="/supy/sladkiy-english-supchik/index.php">Супчик</description>
        <ingredient amount="150" unit="грамм">Бисквит</ingredient>
        <ingredient amount="30" unit="грамм">Сахар</ingredient>
        <ingredient amount="1" unit="шт">Яйца куриные</ingredient>
        <ingredient amount="250" unit="грамм">Молоко</ingredient>
        <ingredient amount="15" unit="грамм">Крахмал</ingredient>
        <ingredient amount="20" unit="грамм">Клубника красная</ingredient>
        <ingredient amount="5" unit="грамм">Какао порошёк</ingredient>
        <ingredient amount="100" unit="грамм">Апельсин</ingredient>
      </recipe>
    </subgroup>
    <subgroup name="Молочные">
    </subgroup>		
  </group>
</recipes>
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 27.01.2015 в 10:35.
Smitt&Wesson вне форума Ответить с цитированием
Старый 27.01.2015, 11:27   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
С какой радости? XML это строковый формат иерархической БД.
Это реплика на фразу
Цитата:
А чем Acess не угодил?
Я про XML не говорил ничего.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.01.2015, 12:09   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

По мне удобней цепь связных таблиц. С иерархией серьезно тяжелей с запросами будет. Ну а в тех, у которых нет стелажей, но есть ящики можно так
Изображения
Тип файла: jpg Безымянный.JPG (40.5 Кб, 122 просмотров)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 27.01.2015, 14:26   #9
bidzina
Подтвердите свой е-майл
 
Регистрация: 10.01.2013
Сообщений: 16
По умолчанию

Никакой Ассеss, ,база рабочая, уже 10 лет работаю на Interbase 2009 и сейчас перехожу на Firebird 2.5 и доработаю и бд и интерфейс. Древовидные структуры в моей бд конечно есть и не один, но все они основаны на одной таблице, такой случай пока некогда не был.
Цитата:
Streletz: "Можно к складу/стеллажу/ящику и т.д. добавить поле с id фирмы/филиала/подразделения и т.д. Тогда будет связь между двумя иерархическими структурами. "
Связь конечно будет, но иерархия из 2 таблиц как построится с помощью ParentID из другой таблицы? Сомневаюсь,но поэкспериментирую и результат сообщу.

Последний раз редактировалось bidzina; 27.01.2015 в 14:29.
bidzina вне форума Ответить с цитированием
Старый 27.01.2015, 14:50   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
сейчас перехожу на Firebird 2.5
А, т.е. СУБД менять нельзя... Тогда сложнее... Сразу так и не скажешь как лучше поступить. XML походу тоже отпадает.
Получается что в каждой таблице тогда нужно делать отдельное поле, где будет храниться ParentID. Сколько таблиц столько и полей. Другое пока в голову не идет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как разработать ИС предприятия? SrgKord Общие вопросы по программированию, компьютерный форум 5 07.02.2014 10:44
Delphi7 - как связывать таблицы hunter08923 Помощь студентам 0 22.05.2012 12:05
ящики не желают падать серг Общие вопросы C/C++ 1 06.12.2010 22:34