Как хранить произвольно широкое дерево заданной глубины - PullRequest
0 голосов
/ 24 июня 2010

Мне нужно хранить данные, которые выглядят так:

<root>
    <child-one>
        value 1
        value 2
        ...
        value n
    </child-one>
    ...
</root>

Под этим я подразумеваю очень мелкое дерево с переменным количеством листьев.

Мне бы хотелось сохранить эти данные в реляционной базе данных, но я не могу найти способ сделать это без:

Использование множества таблиц "соединения"

Например:

(Object (root, child-one, child-two, ...))

(Join1 (child-one, value 1), (child-one, value 2), ... (child-one, value n) )

(Join2 (child-two, value 1), (child-two, value 2), ... (child-two, value n) )

etc. 

Использование типа данных "массив" (из Postgresql)

(Object (root, child-one[], child-two[] ...))

Какой из этих двух будет лучшимвыбор, если я не разрешил использовать хранилище XML или хранилище документов?Есть ли другая стратегия, которую я пропускаю?

Спасибо.

1 Ответ

1 голос
/ 24 июня 2010

Не могли бы вы использовать следующую схему?

Root

id | rootName
---|---------
 0 | root1

Child

id | childName | fk_root
---|-----------|--------
 0 | child-one |    0
 1 | child-two |    0

Значения

id | valueData | fk_child
---|-----------|--------
 0 |   value1  |    0
 1 |   value2  |    0
 2 |   value3  |    1

Это приведет к/ от:

<?xml ?>
    <root1>
        <child-one>
            <value1 />
            <value2 />
        </child-one>
        <child-two>
            <value3 />
        </child-two>
     </root1>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...