powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / много детей и много родителей
19 сообщений из 19, страница 1 из 1
много детей и много родителей
    #38465246
sydenis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как можно в таблице (одной или паре) описать ситуацию, похожую на дерево, но когда есть много детей и много родителей?

Например:
Завод выпускает грузовики, автобусы и трактора.
У всех стоит одинаковый движок и рама. Остальное разное.
При этом движок и рама тоже состоят из своих комплектующих, с которыми тоже может быть такая же фигня...

Нужно описать в таблице, что, напр, у движка есть куча чайлдов, но и куча парентов.
И так по всем узлам и деталям...
...
Рейтинг: 0 / 0
много детей и много родителей
    #38465259
Фотография arni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sydenis,

не хочу вас расстраивать, но таблиц понадобится больше, чем одна.
а вся эта хрень зовется "многие-ко-многим"
...
Рейтинг: 0 / 0
много детей и много родителей
    #38465267
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sydenis,

Ну а на бумажке нарисовать?

Грузовик
- Движек
-- гайка 10
-- болт 20
- Рама
-- гайка 20
-- болт 10

Т.е. родителей у тебя все-таки ровно один ;)
...
Рейтинг: 0 / 0
много детей и много родителей
    #38465272
sydenis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arni,
Да я не против, чтобы много. Эспериментирую тут с 3-мя: ITEMS, PARENTS, CHILDS. Но не уверен насчёт возможных граблей.

DarkMaster,
у движка и рамы помимо грузовика, в родителях - автобус и трактор...
...
Рейтинг: 0 / 0
много детей и много родителей
    #38465280
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Иерархия деталей
table Details
DetailID // PK
ParentDetailID // FK => table Details, 0 для базовых деталей

Список видов транспорта
table Vehicles
VehicleID // PK

Состав видов транспорта (из каких базовых деталей сделаны)
table VehicleDetails
VehicleID // FK => table Vehicles
DetailID // FK => table Details
...
Рейтинг: 0 / 0
много детей и много родителей
    #38465303
sydenis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutal,
Идея здравая, но в жизни всё сложнее.
Ты предлагаешь выделить конечную продукцию в отдельную таблицу. Но в реальности для завода конечной продукцией может быть и что-то из комплектующих, например, движки и колёса. А также конечным продуктом может стать канеткой-нть ракетопароход, состоящий автобуса, скрещенного с трактором.
То есть тут не понятия конечного продукта - всё может быть как узлом, там и запчастью.
...
Рейтинг: 0 / 0
много детей и много родителей
    #38465366
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sydenisDarkMaster,
у движка и рамы помимо грузовика, в родителях - автобус и трактор...

Не-а... У тебя 3 разных изделия могут состоять из одних и тех же деталей. Т.е. фактически тебе нужно соотношение:
изделие <--> состоит из ..
Изделие у тебя всегда одно (родитель), составляющих много (дети). То, что изделие может быть составной частью чего-то еще - просто очередной уровень иерархии. Т.е. для изделия "ракетоплан" у тебя детьми будут "автобус" и "трактор", которые являются сами родителями "рам" и "движков", которые в свою очередь .... Идея ясна?
...
Рейтинг: 0 / 0
много детей и много родителей
    #38465499
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sydenisFr0sT-Brutal,
Идея здравая, но в жизни всё сложнее.
Ты предлагаешь выделить конечную продукцию в отдельную таблицу. Но в реальности для завода конечной продукцией может быть и что-то из комплектующих, например, движки и колёса. А также конечным продуктом может стать канеткой-нть ракетопароход, состоящий автобуса, скрещенного с трактором.
То есть тут не понятия конечного продукта - всё может быть как узлом, там и запчастью.
Я нигде и не говорил о понятии "конечная продукция". У меня есть только "деталь" и "вид транспорта". Что из этого завод продает - уже доп. задание, изначально не озвученное
...
Рейтинг: 0 / 0
много детей и много родителей
    #38465539
sydenis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutal,
Дело не в "неозвученном", а просто я не понял по какому принципу ты трансп.средства вывел в отдельную таблицу. Почему их, а не что-нибудь другое, с учётом того, что все там равны.
...
Рейтинг: 0 / 0
много детей и много родителей
    #38465541
sydenis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster,
То есть предлагаешь две таблицы
1. Детали (id, name)
2. Связи (parent_id, child_id)

типа:
автобус движок
автобус рама
трактор движок
трактор рама

так?
...
Рейтинг: 0 / 0
много детей и много родителей
    #38465572
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sydenis,

Примерно.
Таблица связей (Links):
ID
ParentID -> FK на ID
Доп. информация (наименование к примеру)

Таблица составляющих (Details) (справочник):
ID
Все, что может описывать составляющую часть

Тогда у тебя получится примерно такое (это собственно информация, что из чего состоит):
LINKS:
ID=1, PARENTID=0, NAME=Автобус, DETAIL_INFO_ID=10001
ID=2, PARENTID=1, NAME=Рама, DETAIL_INFO_ID=10002
ID=3, PARENTID=1, NAME=Движек, DETAIL_INFO_ID=21234

DETAILS:
ID=10001, NAME=Автобус обыкновенный
ID=10002, NAME=Рама марки 1234
ID=21234, NAME=Движек класса ДО-1

Т.е. при выборе в дереве "Автобус" ты сразу видишь, что он состоит из Рама и Движек и обратившись к DETAILS ты получишь инфу по составляющим.
...
Рейтинг: 0 / 0
много детей и много родителей
    #38465593
sydenis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster,
Ну вроде я тоже самое и написал, только ты у себя в Links ещё добавил ID (видимо в кач-ве ПК).
В этом есть скрытый смысл? Вроде PARENTID и DETAIL_INFO_ID будут давать уникальное сочетание..
...
Рейтинг: 0 / 0
много детей и много родителей
    #38465600
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sydenisпросто я не понял по какому принципу ты трансп.средства вывел в отдельную таблицу. Почему их, а не что-нибудь другое, с учётом того, что все там равны.
Как задал вопрос - на то и отвечаю
Завод выпускает грузовики, автобусы и трактора.
Если выделение транспорта не нужно - тогда одна таблица с перечнем всего и одна со связями
...
Рейтинг: 0 / 0
много детей и много родителей
    #38465604
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DETAILS:
ID=101, NAME=Автобус
ID=102, NAME=Рама
ID=103, NAME=Колесо
ID=104, NAME=Трактор
ID=105, NAME=Болт

LINKS:
PARENTID=101, DETAIL_ID=102 // рама исп-ся в автобусе
PARENTID=101, DETAIL_ID=103 // колесо исп-ся в автобусе
PARENTID=104, DETAIL_ID=102 // рама исп-ся в тракторе
PARENTID=102, DETAIL_ID=105 // болт исп-ся в раме
...
Рейтинг: 0 / 0
много детей и много родителей
    #38465613
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
соответственно для выборки составляющих первого уровня
select from LINKS where PARENTID=:id

Пустой НД запроса select from LINKS where DETAIL_ID=:id означает конечный продукт (транспорт).

А для списка продукции можно завести отдельную табличку
PRODUCTS:
Detail_ID => DETAILS.ID
...
Рейтинг: 0 / 0
много детей и много родителей
    #38465627
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutal,

Мы говорим об одном и том же ;)
...
Рейтинг: 0 / 0
много детей и много родителей
    #38465664
sydenis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Bruta,
В принципе хорошая идея - сделать отдельную таблицу для конечной продукции. Иначе из links никак не выдрать верхушки пищевой цепочки
DarkMaster,
Так что говорит опыт по поводу нужности / ненужности ID для links?
...
Рейтинг: 0 / 0
много детей и много родителей
    #38465708
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sydenis,

Ну я всегда обходился 2-мя ID + ParentID (который ссылается как FK на ID в этой же таблице). Зачем больше-то? Все остальное - вторично и зависит уже от конкретных потребностей (т.е. все эти ссылки на справочники, имена и прочее, и прочее).

P.S. На ibase.ru лежит несколько статей по дереьям - там примеры реализации есть. И вроде (если склероз не подводит) - что-то похожее было на rsdn.ru.

Кстати, ты б начал что-то делать на практике, а то мы сферического слона в вакууме обсуждаем.
...
Рейтинг: 0 / 0
много детей и много родителей
    #38475437
Andrey Plotnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sydenisFr0sT-Bruta,
В принципе хорошая идея - сделать отдельную таблицу для конечной продукции. Иначе из links никак не выдрать верхушки пищевой цепочки
DarkMaster,
Так что говорит опыт по поводу нужности / ненужности ID для links?
Нет необходимости. Можно пару родитель/потомок использовать в качестве ключа.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / много детей и много родителей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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