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.

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

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.