Como estruturar um modelo para representar de maneira adequada e eficiente dados do tipo árvore em bancos de dados relacionais?

13

Com base na Análise de dados semelhantes a árvores em um banco de dados relacional usando a questão SQL , eu gostaria de saber como a maneira usada regularmente para descrever dados semelhantes a árvores em bancos de dados relacionais, considerando implicações físicas?

Estou assumindo que o RDBMS não possui recursos especiais para lidar com outros recursos que não sejam SQL ANSI regulares ou recursos disponíveis comuns.

Na dúvida, eu estou sempre interessado no MySQL e PostgreSQL e, eventualmente, SQLite.

Maniero
fonte

Respostas:

8

Eu acredito que ele está procurando algo como uma árvore binária. Eu incluiria apenas três chaves vinculadas ao ID exclusivo da mesma tabela, uma para a esquerda, uma para a criança certa e uma para os pais.

ie- (muito pseudocódigo)

TABLE tree
int         id                  autoinc
varchar(16) data_you_care_about
int         parent_id
int         left_child_id
int         right_child_id

FOREIGN KEY parent_id = tree.id
FOREIGN KEY left_child_id = tree.id
FOREIGN KEY right_child_id = tree.id
Patrick
fonte
Uma consideração para um item duplamente vinculado é que qualquer alteração na posição da árvore nesse esquema resultaria em não menos de três atualizações em vez de uma. Como você afirma, isso também é uma grande suposição de que uma árvore binária direta / reversa é o que foi solicitado.
REW
É verdade que, em minhas experiências, prefiro o imposto de atualização de uma lista duplamente vinculada a uma lista vinculada única, pois geralmente tenho que percorrer uma árvore. mas em muitos casos isso não seria necessário
Patrick
Definitivamente, depende do modelo subjacente. Eu acho que a resposta dada por Patrick é suficiente se esse for o modelo certo.
jcolebrand
6

Se cada nó for realmente a mesma entidade de dados, o paradigma ainda significaria uma tabela por entidade e uma coluna de vinculação para o percurso da árvore em que cada nó é vinculado apenas uma vez.

Para entidades vinculadas em vários pontos da árvore, seria usada uma tabela de vinculação separada ou uma coluna com vários valores distintos.

REW
fonte