Pregunta

Estoy tratando de modelar una relación de árbol en una tabla. Por ejemplo, hay & Quot; Categorías & Quot; y las categorías pueden estar dentro de una categoría principal.

Mi esquema es:

id int PRIMARY KEY,
parent_id int,
name

Mi pregunta es, ¿debería etiquetar la columna parent_id como una clave externa? Foreign implica & Quot; fuera de & Quot; y no autorreferenciada. ¿Existe un tipo diferente de clave para este propósito?

Mi pregunta es similar a: Restricción de autorreferencia en MS SQL , pero estoy haciendo una pregunta diferente , la conexión en cascada no es un problema.

¿Fue útil?

Solución

Las claves externas autorreferenciadas suceden todo el tiempo. P.ej. un empleado puede tener otro " empleado " como su gerente, por lo que manager_id será una clave foránea para el campo employee_id en la misma tabla.

Las claves externas son el candidato natural para representar el nodo padre en datos jerárquicos, aunque no se usan exclusivamente para eso :)

Otros consejos

Si tiene niveles muy profundos de anidamiento, puede que no sea fácil seleccionar con precisión todos los descendientes de un nodo en particular, ya que la mayoría de los DB no manejan muy bien la recursividad. Otro enfoque es usar lo que se llama & Quot; Modelo de conjunto anidado & Quot; para representar las relaciones. Un gran artículo está disponible aquí:

http://www.intelligententerprise.com/001020/celko.jhtml

Una clave foránea entre dos columnas en la misma tabla a menudo se usa al mapear estructuras de árbol a bases de datos relacionales. Sin embargo, no es el único enfoque disponible.

Vea este artículo para repeticiones alternativas: Almacenamiento de datos jerárquicos en una base de datos

No creo que haya otro tipo de clave ... una clave externa estaría bien en este escenario ... impondría la restricción contra parent_id para garantizar que haga referencia a una identificación válida

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top