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.

Esquema relacional para un grafo de libros

Tengo el siguiente diagrama que hice para mostrar los libros y las personas que tienen relaciones con ellos:

enter image description here

Hay dos nodos:

  • Persona
  • Libro

Y tres relaciones (con sus propiedades, no mostradas en el gráfico):

  • Leer (fecha, num_stars)
  • Escribir (fecha)
  • Reseñar (fecha, num_stars, texto de la reseña)

Si esto se modelara en una base de datos relacional, ¿cómo sería el esquema? Mi idea era separar cada relación y nodo, algo así:

NodoPersona
– IDPersona
– Nombre

NodoLibro
– IDLibro
– Título

AristaLeer
– DesdeIDPersona
– HaciaIDLibro
– fecha
– num_stars

AristaEscribir
– DesdeIDPersona
– HaciaIDLibro
– fecha

AristaReseñar
– DesdeIDPersona
– HaciaIDLibro
– fecha
– num_stars
– texto de la reseña

O, ¿deberían todos los nodos ser una sola tabla? Si quisiéramos agregar Películas como otro nodo, ¿cómo mostraríamos que una arista de Reseña puede ir desde una Persona->Libro O una Persona->Película? Parece que una forma más genérica de hacerlo podría ser:

Nodo:
– ID
– Tipo
– // FK de tabla de Arista específica

Arista:
– DesdeID
– HaciaID
– Tipo
– // FK de tabla de Arista específica

¿Existen desventajas de utilizar este último enfoque en lugar del anterior?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Si esto se modelara en una base de datos relacional, un posible esquema podría ser el siguiente:

    Persona
    – IDPersona (clave primaria)
    – Nombre

    Libro
    – IDLibro (clave primaria)
    – Título

    Leyó
    – IDLeyó (clave primaria)
    – IDPersona (clave foránea que referencia a IDPersona en la tabla Persona)
    – IDLibro (clave foránea que referencia a IDLibro en la tabla Libro)
    – Fecha
    – NumEstrellas

    Escribió
    – IDEscribió (clave primaria)
    – IDPersona (clave foránea que referencia a IDPersona en la tabla Persona)
    – IDLibro (clave foránea que referencia a IDLibro en la tabla Libro)
    – Fecha

    Reseñó
    – IDReseñó (clave primaria)
    – IDPersona (clave foránea que referencia a IDPersona en la tabla Persona)
    – IDLibro (clave foránea que referencia a IDLibro en la tabla Libro)
    – Fecha
    – NumEstrellas
    – ReseñaTexto

    En este diseño de esquema, hay tablas separadas para cada nodo (Persona y Libro) y cada relación (Leyó, Escribió y Reseñó), con claves foráneas que hacen referencia a los nodos correspondientes. La ventaja de este enfoque es que es claro y sencillo, y consultar los datos es fácil.

    Si se agregaran Películas como otro nodo, se podría crear una estructura de tabla similar a la de Libro, y la relación Reseñó podría tener una clave foránea que haga referencia a Libro o Película. Sin embargo, esto significaría tener múltiples tablas de relación para la misma relación, lo cual puede ser redundante y difícil de manejar.

    Una forma más genérica de modelar esto en una base de datos relacional podría ser:

    Nodo
    – IDNodo (clave primaria)
    – TipoNodo

    Arista
    – IDArista (clave primaria)
    – IDNodoOrigen (clave foránea que referencia a IDNodo en la tabla Nodo)
    – IDNodoDestino (clave foránea que referencia a IDNodo en la tabla Nodo)
    – TipoArista

    Luego, se podrían crear tablas separadas para cada relación (Leyó, Escribió y Reseñó), cada una con una clave foránea que haga referencia a Arista. Este diseño permite una mayor flexibilidad, ya que puede adaptarse a cualquier tipo de nodo y relación. Sin embargo, consultar los datos puede ser más complejo y puede requerir una gestión cuidadosa de las restricciones de la base de datos.

    En general, ambos diseños de esquema tienen sus ventajas y desventajas. El primer enfoque es más sencillo y fácil de manejar, pero puede volverse redundante si hay múltiples tipos de relaciones. El segundo enfoque es más flexible pero puede ser más complejo de consultar y gestionar. La elección depende en última instancia de los requisitos específicos del proyecto.

Comments are closed.