es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Consulta PK en relación M2M

Estaba leyendo sobre Neo4j, una base de datos de grafos, y cómo se compara con el modelo relacional. Aquí hay algo que menciona sobre cómo consultar una unión M2M para los “Departamentos” asociados con un solo usuario aquí:

enter image description here

Sin embargo, si supiera de antemano que solo estoy buscando una fila única por PK y que es probable que haya menos de 5 departamentos para ese usuario, escribiría la consulta de la siguiente manera:

SELECT name FROM department WHERE department_id IN (
  SELECT department_id FROM PersonDepartment WHERE user_id IN (
    SELECT pk FROM Person WHERE name='Alice' -- asumir nombre único
  )
)

Estoy seguro de que escribir esto en el formato de “unión más común” estaría optimizado por el RDBMS para que sea algo similar a lo anterior, pero estoy usando lo anterior solo para mostrar cómo parece que la consulta anterior tomaría casi ningún tiempo en ejecutarse, ¿o estoy equivocado aquí? Por otro lado, escribir lo anterior en el formato más conciso de Cypher:
[p:Person{name:"Alice"}]-[:BELONGS_TO]->[d:Department]
es mucho más fácil de leer y escribir.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    La consulta mencionada es una forma de consultar una relación de muchos a muchos (M2M) en Neo4j, una base de datos de grafos, para recuperar los departamentos asociados con un único usuario. Sin embargo, si la consulta se sabe de antemano que está enfocada en recuperar una sola fila por clave primaria (PK), y hay menos de cinco departamentos probables para ese usuario, se puede escribir una consulta más optimizada en un formato de ‘unirse’ más común, como se muestra en la pregunta. Aunque es probable que el sistema de gestión de bases de datos relacionales (RDBMS) optimice la consulta común en formato de ‘unirse’ hasta algo más cercano a la consulta anterior, la consulta anterior sigue siendo significativamente más rápida de ejecutar. Por otro lado, la misma consulta se puede escribir en el formato más conciso de Cífer [p:Person{name:"Alice"}]-[:BELONGS_TO]->[d:Department], lo cual es mucho más fácil de leer y escribir.

Comments are closed.