Cómo prevenir las consultas recursivas profundos con entidades que constan de entidades del mismo tipo? [Ejemplo en el interior Cool]

StackOverflow https://stackoverflow.com/questions/3516784

Pregunta

No se preocupe! Se parece más compleja de lo que realmente es! Sólo bajar a las bebidas!

TLDR-version :? Cómo eficiente consulta y entidades que tienen relaciones con otras entidades actualización

Este es un escenario interesante modelado de datos con dos tablas que me ha sido desconcertantes:

Entities { ID, Name, ScalarValue }

ComponentEntities { AggregateEntityID, ComponentEntityID, quantity }

AggregateEntityID y ComponentEntityID son claves ajenas a la mesa Entities.

Dame el ejemplo sangrienta ya

Drinks { ID, Name, Alcohol% }

DrinkIngredients { CocktailID, IngredientID, amount }

Drinks { 1, "Vodka", 40% }
Drinks { 2, "Tomato juice", 0% }
Drinks { 3, "Tabasco", 0% }
Drinks { 4, "Bloody mary", - }

DrinkIngredients { 4, 1, 0.2 } // Bloody mary has 0.2*Vodka
DrinkIngredients { 4, 2, 0.7 } // Bloody mary has 0.7*Tomato juice
DrinkIngredients { 4, 3, 0.1 } // Bloody mary has 0.1*Tabasco

Si quisiéramos obtener el contenido de alcohol de Bloody Mary, nos SELECT * FROM DrinkIngredients WHERE CocktailID == 4.

bastante estándar; nada raro allí. Lisa le gusta para que sea un poco más dulce añadiendo un poco de pasión a ella:

Drinks { 6, "Passion", 13% }
Drinks { 7, "Bloody Mary Pink", - }

DrinkIngredients { 7, 4, 0.8 }  // Bloody Mary Pink has 0.8*Bloody Mary
DrinkIngredients { 7, 6, 0.2 }  // Bloody Mary Pink has 0.2*Passion

La madre de Lisa ha estado probando estos durante tanto tiempo que ella cree que ha encontrado la combinación definitiva entre los dos:

Drinks { 8, "Bloody Milf", - }
DrinkIngredients { 8, 4, 0.45 } // Bloody Milf has 0.45*Bloody Mary
DrinkIngredients { 8, 7, 0.55 } // Bloody Milf has 0.55*Bloody Mary Pink

Añadir par más de estos consta de los niveles y tenemos un profundo recursividad relacional. La única restricción es que la entidad no puede consistir en sí mismo.

Esto parece formar un dirigido acíclico gráfico .

RDBMS: Una forma de "caché" los datos sería calcular los datos pertinentes y almacenarlo en la propia Entidad (o tal vez en otra tabla). En el ejemplo anterior, el contenido de alcohol de Maria sangrienta sería calculada una vez cuando se crea y se almacena en su campo de alcohol%. En este caso, las actualizaciones de llegar a ser costoso ya que hay que actualizar cada bebida (junto con toda la jerarquía de dependencias) que consiste en el actualizado.

Preguntas

RDBMS:? ¿Hay una mejor manera de llegar a los valores de la hoja (bebidas que no consistan en otras) que conseguir la bebida "padre" hasta que se alcance una bebida hoja

Tanto, RDBMS y NoSQL, tienen un problema con esto:. Un modo u otro

La línea de fondo:? ¿Ésta es práctico y factible

Lo que necesito es un contra-inicio

text alt

¿Fue útil?

Solución

"RDBMS: ¿Hay una mejor manera de llegar a los valores de la hoja (bebidas que no consistan en otras) que conseguir la ''? Bebida hasta que se alcanza una bebida hoja" padre

No entiendo esto. Las bebidas que no consistan en otros no tiene nada que ver con la recursividad. Es un simple SALVO o cuando no existe.

Y "para llegar a los valores de hoja" (dado un padre), inevitablemente, será necesario recorrer el árbol, independientemente de la estructura de datos (relacional o jerárquica) que se utiliza para modelar ella, ¿no le parece?

Tanto, RDBMS y NoSQL, tienen un problema con esto:. Un modo u otro

RDBMS en realidad no tienen un problema con esto. El problema ya fue identificada hace unas décadas (80 de más o menos), y fue dirigida por el que se modifica el álgebra relacional con una operación de cierre transitivo, y una versión generalizada de la misma. SQL admite esto a través de consultas recursivas, y como dijo Frank, al menos todos los perros grandes todas las consultas recursivas de apoyo de una manera u otra.

La línea de fondo:? ¿Ésta es práctico y factible "

Escribir consultas recursivas no es exactamente trivial si nunca lo has hecho antes. ¿Eso lo hace "poco práctico"? No sabría.

Otros consejos

Muchas RDMSs apoyan consultas recursivas. Ver e. sol. http://msdn.microsoft.com/en-us/library/ms186243. aspx .

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