Как структурировать иерархические данные в Oracle - PullRequest
0 голосов
/ 30 августа 2018

Мне нужно хранить иерархические данные с использованием реляционной базы данных (в частности, оракула). Пока единственной реализацией, которую я использовал, был список Смежности. Однако на этот раз у меня есть некоторые требования, которые запрещают использование этой структуры.

Требования заключаются в том, чтобы (1) каждый узел мог использоваться в разных иерархиях и (2) ребро, соединяющее узел с другой иерархией, может иметь различный вес.

Пример 2 иерархий приведен здесь:

enter image description here

Поэтому мне нужен совет о том, как решить эту проблему или указать очевидное решение, если оно у вас есть.

1 Ответ

0 голосов
/ 30 августа 2018

Создайте таблицу ассоциации следующим образом:

CREATE TABLE ASSOC (
   PARENT_ID      NUMBER,
   CHILD_ID       NUMBER,
   WEIGHT         NUMBER,
   HIERARCHY_ID   VARCHAR2(100));  -- necessary do distinguish, which hierarchy connection belongs to

и данные

PARENT_ID   CHILD_ID  WEIGHT  HIERARCHY_ID
----------+---------+-------+-------------
1         | 2       | 50    | A 
1         | 5       | 50    | A 
2         | 3       | 70    | A 
2         | 4       | 30    | A 
10        | 2       | 65    | B
10        | 5       | 35    | B
...
...