powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Сортировка в иерархических структурах
8 сообщений из 8, страница 1 из 1
Сортировка в иерархических структурах
    #32879588
Dayroon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток, Глубокоуважаемые.
Если не сложно, направьте на путь.
Забавы и самообучения ради делаю очередной складик(Delphi + FireBird).
Решил сделать древовидный справочник материалов, например так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
CREATE TABLE MATERIALS (
    ID    INTEGER NOT NULL,
    NAME  VARCHAR( 40 ) CHARACTER SET WIN1251 NOT NULL

);

ALTER TABLE MATERIALS ADD CONSTRAINT PK_MATERIALS PRIMARY KEY (ID);

CREATE TABLE RELATIONS (
    ID        INTEGER NOT NULL,
    MATID     INTEGER NOT NULL,
    PARENTID  INTEGER NOT NULL
);

ALTER TABLE RELATIONS ADD CONSTRAINT UNQ_RELATIONS UNIQUE (MATID, PARENTID);

ALTER TABLE RELATIONS ADD CONSTRAINT PK_RELATIONS PRIMARY KEY (ID);

ALTER TABLE RELATIONS ADD CONSTRAINT FK_RELATIONS1 FOREIGN KEY (MATID) REFERENCES MATERIALS (ID);
ALTER TABLE RELATIONS ADD CONSTRAINT FK_RELATIONS2 FOREIGN KEY (PARENTID) REFERENCES MATERIALS (ID);
 
Решил - сделал. Две таблицы - чтоб можно было Not Null на первую таблицу.

И тут(собственно проблема) озадачился целью выводить в формочках списки этих материалов по их расположению в дереве материалов. (В алфавитном порядке, выше в дереве - выше в форме, отчете, т.д.). С налету не решил, оставил на потом, удовлетворился половинчатым решение, написал ХП, которая "склеивает" первые буквы всех пунктов ветви. И цепляюсь к этой процедурке.
Но душа не спокойна - хочет идеала. Имеется общее но некрасивое решение - добавить поле "по порядку" с большими промежутками между соседними, по исчерпанию промежутков пересчитывать значение поля для всей таблицы, но некрасиво есть...
Направьте или личным примером, или идей, или указанием места где подобное давно решено(если можно не поиск).
...
Рейтинг: 0 / 0
Сортировка в иерархических структурах
    #32879961
Фотография Dogen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DayroonДоброго времени суток, Глубокоуважаемые.
Если не сложно, направьте на путь.
Забавы и самообучения ради делаю очередной складик(Delphi + FireBird).
Решил сделать древовидный справочник материалов, например так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
CREATE TABLE MATERIALS (
    ID    INTEGER NOT NULL,
    NAME  VARCHAR( 40 ) CHARACTER SET WIN1251 NOT NULL

);

ALTER TABLE MATERIALS ADD CONSTRAINT PK_MATERIALS PRIMARY KEY (ID);

CREATE TABLE RELATIONS (
    ID        INTEGER NOT NULL,
    MATID     INTEGER NOT NULL,
    PARENTID  INTEGER NOT NULL
);

ALTER TABLE RELATIONS ADD CONSTRAINT UNQ_RELATIONS UNIQUE (MATID, PARENTID);

ALTER TABLE RELATIONS ADD CONSTRAINT PK_RELATIONS PRIMARY KEY (ID);

ALTER TABLE RELATIONS ADD CONSTRAINT FK_RELATIONS1 FOREIGN KEY (MATID) REFERENCES MATERIALS (ID);
ALTER TABLE RELATIONS ADD CONSTRAINT FK_RELATIONS2 FOREIGN KEY (PARENTID) REFERENCES MATERIALS (ID);
 
Решил - сделал. Две таблицы - чтоб можно было Not Null на первую таблицу.

И тут(собственно проблема) озадачился целью выводить в формочках списки этих материалов по их расположению в дереве материалов. (В алфавитном порядке, выше в дереве - выше в форме, отчете, т.д.). С налету не решил, оставил на потом, удовлетворился половинчатым решение, написал ХП, которая "склеивает" первые буквы всех пунктов ветви. И цепляюсь к этой процедурке.
Но душа не спокойна - хочет идеала. Имеется общее но некрасивое решение - добавить поле "по порядку" с большими промежутками между соседними, по исчерпанию промежутков пересчитывать значение поля для всей таблицы, но некрасиво есть...
Направьте или личным примером, или идей, или указанием места где подобное давно решено(если можно не поиск).
Parent ID можно держать в той же таблице, зачем ты это вот изобретаешь?
Но зачем такой справочник вообще нужен???
Или это уже сборочные единицы и детали, а не материалы?
...
Рейтинг: 0 / 0
Сортировка в иерархических структурах
    #32880045
Dayroon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Parent_Id можно, но тогда на него нот нулл не наложишь и Uniq, но я же сказал балуюсь, пока ничего серьезного, так для себя.. потренироваться.
Зачем оно надо - теоретически это попытка создать справочник материалов по пероизводителям, разделам, т.д., прикрутить (потом, если не надоест) единицы измерения, тару,дубли, способы построения дерева(по назначению\производителю).

Нечто вида:

Электроустановочные изделия
--Легранд
----Мозаик
------....
...
Рейтинг: 0 / 0
Сортировка в иерархических структурах
    #32880082
Фотография Dogen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DayroonParent_Id можно, но тогда на него нот нулл не наложишь и Uniq, но я же сказал балуюсь, пока ничего серьезного, так для себя.. потренироваться.
Зачем оно надо - теоретически это попытка создать справочник материалов по пероизводителям, разделам, т.д., прикрутить (потом, если не надоест) единицы измерения, тару,дубли, способы построения дерева(по назначению\производителю).

Нечто вида:

Электроустановочные изделия
--Легранд
----Мозаик
------....
Ну не то это дерево чтобы в одной таблице хранить.
Это разноплановые сущности.
Вам с такого дерева никакого понту - ну разве что очень хочется написать какой-нибудь "GUI для всех деревьев что только бывают на свете", и подсовывать ему данные.
С такой постановкой задачи надо заводить таблицы производителей и т.п., и строить дерево только тогда когда понадобится представить данные в виде дерева.
...
Рейтинг: 0 / 0
Сортировка в иерархических структурах
    #32880142
Dayroon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я согласен, что разные.
Я нарушаю осознанно. Строю иерархию наименований. которую в реляционную теорию не загонишь(Имхо имхо!!!). Иерархия должна совпадать с правилами ведения каталогов у производителей, а у Легран и Очаковского ЖБИ они разные. Отношусь к пунктам только как к пути для поиска, и частям составного названия. Конечно, действующие пункты только в самом низу иерархии.
Вероятно я не прав в своем подходе, ну дык для этого и тренируюсь, посмотрим на затыки здесь, попробуем другие варианты. Скучно сидеть эникейщиком. На проект всей БД сразу, целиком и правильно у меня опыта и широты мысли не хватает. вот я потихоньку и наращиваю и пробую...
...
Рейтинг: 0 / 0
Сортировка в иерархических структурах
    #32880184
Dayroon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я даже знаю где я напорюсь. Это случится, когда я попытаюсь скрестить каталоги производителей и продавцов ;). И скрестить тару с единицами измерений (интересно, это одно и то же или нет) 5*100гр = пол кг = бутылка = пол литра ;) .
...
Рейтинг: 0 / 0
Сортировка в иерархических структурах
    #32880192
Фотография Dogen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DayroonЯ даже знаю где я напорюсь. Это случится, когда я попытаюсь скрестить каталоги производителей и продавцов ;). И скрестить тару с единицами измерений (интересно, это одно и то же или нет) 5*100гр = пол кг = бутылка = пол литра ;) .
Ну это все многократно обсуждалось на данном форуме, даже мысли дельные высказывались.
...
Рейтинг: 0 / 0
Сортировка в иерархических структурах
    #32880239
Dayroon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А можно на ветки, где, по вашему мнению(отнесусь с уважением), дельные мысли были, потыкать. И еще ответить на первоначальный вопрос, или ткнуть в обсуждение, или сказать куда думать...
Будем считать, что ответ на него имеет для меня академическую ценность.
С Уважением, СИО сисадмина,СИО DBадмиина Александр.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Сортировка в иерархических структурах
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]