¿Cómo estructurar un modelo para representar de manera adecuada y eficiente los datos en forma de árbol en bases de datos relacionales?


13

Basado en el recorrido de datos similares a árboles en una base de datos relacional usando una pregunta SQL , me gustaría saber cómo se usa regularmente para describir datos similares a árboles en bases de datos relacionales considerando implicaciones físicas.

Supongo que el RDBMS no tiene características especiales para el manejo que no sean SQL ANSI regular o características comunes disponibles.

En caso de duda, siempre estoy interesado en MySQL y PostgreSQL y, finalmente, en SQLite.

Respuestas:


8

Creo que va por algo como un árbol binario. Solo incluiría tres claves que están vinculadas a la identificación única de la misma tabla, una para la izquierda, una para el niño derecho y otra para el padre.

es decir (mucho 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

Una consideración para un elemento doblemente vinculado es que cualquier cambio en la posición del árbol bajo este esquema resultaría en no menos de 3 actualizaciones en lugar de una. Como usted dice, esto también es una gran suposición de que se solicitó un árbol binario directo / inverso.
REW

muy cierto, en mi experiencia, prefiero el impuesto de actualización de una lista doblemente enlazada a una lista de un solo enlace, ya que a menudo tengo que atravesar un árbol. pero en muchos casos esto no sería necesario
Patrick

Definitivamente depende del modelo subyacente. Creo que la respuesta dada por Patrick es suficiente si ese es el modelo correcto.
jcolebrand

6

Si cada nodo es realmente la misma entidad de datos, entonces el paradigma aún significaría una tabla por entidad, y una columna de enlace para el recorrido del árbol donde cada nodo solo está vinculado una vez.

Para las entidades que están vinculadas en varios puntos del árbol, se usaría una tabla de vinculación separada o una columna de valores distintos.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.