Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Опять дерево... / 8 сообщений из 8, страница 1 из 1
26.11.2002, 14:17:51
    #32072516
Sergey Grigoriev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять дерево...
Доброе время суток!

Интересная штучка получается, все что я смог найти по древовидным стуктурам в SQL описывают структуру в которых дочка имеет единственного родителя.
А вот в задачке о составе изделия, бывает так, что узел может входить в конечное изделие как в составе другого узла, так и самостоятельно. Причем узел может использоваться в разных изделиях и узлах.
Единственный способ, который пригоден (на мой взгляд, может кто другой вариант предложит?) для хранения состава изделия: {родитель; дочка; кол-во} (для листочки дерева: дочка - NULL, кол-во - NULL)

А может я все таки неправ?
...
Рейтинг: 0 / 0
26.11.2002, 14:49:13
    #32072541
sergwsk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять дерево...
Это уже не дерево - а сеть :-)). И ничто не мешает Вам хранить информацию о рёбрах(вершинах) графа в двух таблицах: исходящие дуги и заходящие дуги.
...
Рейтинг: 0 / 0
26.11.2002, 15:01:27
    #32072548
Chicago
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять дерево...
Имхо, для описания BOM дерево подходит больше, чем сеть. Просто нагляднее. Но мне кажется, что не следует идентифицировать узлы дерева с компонентами изделия. Из узлов дерева можно просто ссылаться (foreign key) на возможные компоненты изделия идентифицируемые в другой таблице. При этом разные узлы дерева могут ссылаться на одну и ту же запись в таблице компонентов.
...
Рейтинг: 0 / 0
26.11.2002, 15:08:21
    #32072550
бредущий
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять дерево...
А так?

create table Items(ii integer) -- детали

create table Units(id integer) --готовые изделия,
-- могут дублировать Items

create table UnitItems(
parent int references Units,
child int references Items)
...
Рейтинг: 0 / 0
26.11.2002, 15:54:55
    #32072586
Sergey Grigoriev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять дерево...
2 Sergwsk
не совсем понятно чем будут отличатся эти таблицы. Может я чего не понимаю, но для меня исходящие дуги равнозначны входящим (возможно, причина в базовом образовании - физика), ну отличается знаком и все.

2 Chicago
ну а если сам компонент (узел, в смысле агрегат) сам состоит из нескольких компонентов и т.д.?
...
Рейтинг: 0 / 0
26.11.2002, 16:40:11
    #32072622
sergwsk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять дерево...
2Sergey Grigoriev: Граф ориентированный, со стрелками. Например, когда в узле считаются параметры круга заходами будет диаметр и число пи, а исходами, например, длина окружности и площадь круга.
В Вашем случае, ИМХО, есть смысловая разница между деталью, входящей в комплект, и отдельно стоящей деталью. Конечно, если Вы не боитесь потерять "семантику" изделия - этой разницей можно пренебречь.
...
Рейтинг: 0 / 0
27.11.2002, 07:50:53
    #32072788
Chicago
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять дерево...
ну а если сам компонент (узел, в смысле агрегат) сам состоит из нескольких компонентов и т.д.?

А в чем проблема? Запись соответствующая агрегату/сборке тоже должна присутствовать в таблице компонентов изделия. Вот и все. При этом нужно различать в таблице компонентов неделимые компоненты и агрегаты\сборки (возможна более сложная классификация). В таблице состава изделия разворачивать составляющие агрегатов не нужно. У вас получится набор деревьев высоты 1. Полную детализацию состава изделия проводите только тогда, когда это действительно нужно.

Кстати о птичках. Я все это написал и понял: сеть получилась. Узлы сети - записи в таблице компонентов. Отношение компонент А входит в компонент (в данном случае сборку) Б описывается дугой, исходящей из А и входящей в Б. Если из таблицы состава изделия выбрать все записи, у которых parent_id = Б, то мы получаем список всех дуг, заходящих в Б. Таким образом вся таблица состава изделий - это просто набор списков входящих дуг. Имеем набор узлов со списками входящих дуг. А это один из способов задания сети
...
Рейтинг: 0 / 0
27.11.2002, 08:59:40
    #32072806
sparrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять дерево...
Согласен с бредущим, однако таблица деталей не нужна лучше типизировать

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
create table Units                 -- изделия и детали
 
(id integer PRIMARY KEY,     
   type int,                       -- тип изделия (может детали)
 
   atribut1 int,
   atribut2 char, 
 -- ...
 
   atributN datetime
)
 
create table UnitItems            -- состав (вхождения)
 
( 
Id1 int NOT NULL references Units, 
Id2 int NOT NULL references Units
)

ALTER TABLE UnitItems ADD 
PRIMARY KEY  CLUSTERED 
(
  Id1,
  Id2
)


С такой структурой детали могут входить в изделия и наоборот изделия в детали. Сеть ...
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Опять дерево... / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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