Tema 2 Ejercicio Neo4j

Documentos relacionados
Manual de Usuario. WordPress

Diseñar la base de datos biblioteca Soluciones:

Creación y Modificación de Blog

Creación de la KB. Page1. Video filmado con GeneXus X Evolution 3. Vamos a ejecutar a GeneXus

TEMA 7: Ficheros. TEMA 7: Ficheros Concepto de fichero

MANUAL DEL PROGRAMA EXCEL LABORAL

Plataforma de video bajo demanda (VOD)

Manual de Publicación y Gestión de Ofertas

XQuery. Un lenguaje de consulta para XML.

CREACIÓN DE UNA PÁGINA WEB CON JIMDO

FORMULARIO HTML PREPARACION DEL FORMULARIO. Que información debes solicitar al visitante de tu web?

QUÉ ES UNA CLASE JAVA? ATRIBUTOS (PROPIEDADES O CAMPOS), CONSTRUCTOR Y MÉTODOS. (CU00623B)

CREAR UN BLOG EN BLOGGER

Manual de usuario, Escritores

GUÍA DE FUNCIONAMIENTO BASICO DE LA PLATAFORMA DOCENTE MOODLE

Manual de Usuario. AddIn Cancelación. Nota Crédito

Integridad Referencial. Restricciones (constraints)

LABORATORIO DE PROCESADORES DE LENGUAJE Curso: Práctica 2: Analizador léxico/sintáctico/semántico con Flex y Bison

Guía de acceso al campusfert

Manual del Alumno - Blackboard

Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso º Grado en Informática

Aprendemos a crear un blog

Tablas Hash y árboles binarios

Guía rápida de B-kin CRM

1. Lenguaje de Definición de Datos. 2. Lenguaje de Manipulación de. Datos. M. C. Gustavo Alfonso Gutiérrez Carreón

Qué más puedo hacer en el cuadro de búsqueda?

Tutorial. LINO IT (Mireya Martínez Estevan y María Juan Llopis

MANUAL BÁSICO DEL LENGUAJE SQL

Bases de Datos. Laboratorio III, L106/L111. Profesor: Goyo Celada

PUBLICACIÓN DE OFERTAS DE PRÁCTICAS EXTRACURRICULARES Y OFERTAS DE EMPLEO PROCEDIMIENTO PARA EMPRESAS

Instrucciones para registrarse como Acreedor

Clases e instancias. Algoritmos y Estructuras de Datos I. Clases e instancias. memoria dinámica.

Representación de números enteros: el convenio exceso Z

BACHILLERATO A DISTANCIA. Ciencias de la Tierra y Medio Ambiente 2º Bachillerato Z2B

BASES DE DATOS TEMA 2 MODELOS DE DATOS

El propósito de este material es brindar las explicaciones más importantes sobre bases de datos, relevantes para el uso de GeneXus.

MANUAL DE PROGRAMACIÓN PARA BASES DE DATOS 1.0 MySQL

La sintaxis básica para definir una clase es la que a continuación se muestra:

WorkManager E.D. Manual guía de usuario Diseñador de formularios

PROGRAMA PARA EL FORTALECIMIENTO DE LA FUNCIÓN PÚBLICA EN AMÉRICA LATINA MANUAL DE USUARIO DEL FORMULARIO

PROGRAMACION ORIENTADA A OBJETOS EN C++

Características Carta de opinión

Twitter Qué es Twitter?

LENGUAJE DE PROGRAMACION I. Ing. JAVIER ECHEGARAY ROJO Ing. WILDER ROMAN MUNIVE. Ing. Javier Echegaray Rojo / Ing. Wilder Román Munive Pag 1

Uso de blogs. Creación y administración de blogs. Pedro A. Castillo Valdivieso Depto. Arquitectura y Tecnología de Computadores

Laboratorio de MTP-I. Curso Proyecto: Sistema de reserva y gestión de vuelos Noviembre 2008

Constructor de sitios. Manual de Usuario

CÁLCULO DE COSTOS MARGINALES PARA TRANSFERENCIAS DE ENERGÍA PROCEDIMIENTO DP

Caracteres y Cadenas Conversión de Datos Funciones y procedimientos Archivos cabecera. Fundamentos de programación

Guía docente: Cómo crear un test y los tipos de preguntas

El presente tutorial nos indicara como usar Wordpress a nivel básico para crear los Blogs que queramos.

CREAR TABLAS EN BASES DE DATOS CON phpmyadmin. TIPOS DE DATOS BÁSICOS (VARCHAR, INT, FLOAT). INSERTAR FILAS. (CU00840B)

9.1. Insertar filas en una hoja

Paseo por SIGAD ÍNDICE. Introducción...2. Acceso a la aplicación...3

Informática y Computación III Guía de Estudio (50 reactivos)

Alianza para el Aprendizaje de las Ciencias y las Matemáticas (AlACiMa) Actividad de Matemáticas Nivel 4-6. Por los Pueblos de Puerto Rico

Incluir imágenes en el blog

Procesos y herramientas de gestión documental

MANUAL DE USO DE LA BIBLIOTECA VIRTUAL

Moodle, plataforma de aprendizaje

Una base de datos de Access puede estar conformada por varios objetos, los más comunes son los siguientes:

Facultad de Informática UCM - Examen Parcial Convocatoria de Febrero Curso 2009/2010 Grupo A Bases de Datos y Sistemas de la Información SOLUCIÓN

Estructuras en LabVIEW.

Boletín 7 Herencia. String Titular; Nombre del dueño de la cuenta double Saldo: Dinero disponible en la cuenta

LENGUAJE SQL. Bárbula, Febrero de Historia y Definición

Elementos de un programa en C

Modulo 11. Clases y Objetos en Java

Es toda la información que utiliza el computador. Según sea la información que guardemos en los datos, se clasifican en los siguientes tipos:

Es un lenguaje de consulta estructurado establecido claramente como lenguaje de alto nivel estándar para sistemas de base de datos relacionales.

Tabletas en el aula. Mi primer mapa conceptual con SimpleMind Free. Edición Autor: Fernando Posada Prieto canaltic.com

Twitter para novatos. Sep TWITTER PARA NOVATOS

ANAGOLF. Sitio administrativo, Facturación. Manual de usuario. Melquisedeth Soto Paniagua 10/09/2013

Tema 3: Diagramas de Casos de Uso. Arturo Mora Soto Octubre 2008

Manual de usuario (alumno) del aplicativo Segurmed.UB

Índice Proposiciones y Conectores Lógicos Tablas de Verdad Lógica de Predicados Inducción

Manual técnico de administración de un sitio web en WordPress

Manual de Uso. Copyright 2003 TARIC, S.A.

SQL básico. SQL básico 1. Contenido

FUNCIONES PHP: DECLARACIÓN Y LLAMADAS. PARÁMETROS, RETURN. EJERCICIOS EJEMPLOS RESUELTOS. (CU00827B)

LENGUAJE DE CONSULTA ESTRUCTURADO (SQL)

Configuración de Procedimientos en SQL. Introducción

Java Avanzado. Guía 1. Java Avanzado Facultad de Ingeniería. Escuela de computación.

Repositorio Institucional

Introducción a los Sistemas de Gestión de Bases de Datos

Instrucciones de uso de la Aplicación Móvil del Servicio Canario de Empleo.

Transcripción:

Tema 2 Ejercicio Neo4j Marta Zorrilla Diego García Saiz Enero 2017 Este material se ofrece con licencia: Creative Commons BY-NC-SA 4.0

Enunciado - 2 - Se precisa diseñar un blog de noticias donde los usuarios registrados pueda publicar sus comentarios: Cada autor tiene un nombre, un nombre de usuario único) y una cuenta de Twitter (única). Además, de forma opcional, los usuarios pueden tener un teléfono de contacto. Las noticias tienen un título, un cuerpo y una fecha de publicación. Son publicadas por un autor. Además, los usuarios pueden puntuar las noticias publicadas por otros usuarios. Las noticias reciben comentarios, quedando registrado la persona que lo escribió, el comentario escrito y el momento en el que lo hizo.

Diseño UML - 3 - puntuacion valor: int usuario nombre_usuario: string cuenta_twitter: string nombre: string telefono: string [0..1] 1 0..* PUNTUA-> 0..* 1 <-AUTOR 0..* noticia titulo: string cuerpo: string fecha: string 1 <-AUTOR 0..* comentario fecha: datetime cuerpo: string 0..* <-TIENE

Diseño en Neo4j - 4 - Recordemos que en un diagrama de bases de datos de Neo4j existen dos elementos: nodos y relaciones. Además, ambos elementos pueden tener propiedades (equivalentes a las columnas en una tabla del modelo relacional). Por otro lado, los nodos pueden tener etiquetas que los denotan como parte de una misma entidad o concepto.

Diseño en Neo4j: primeras decisiones - 5 - Primera cuestión: Qué etiquetas definir?. Del enunciado y de su correspondiente diagrama UML, se observa la existencia de 3 entidades diferentes. En esta práctica, vamos a crear, por tanto, 3 etiquetas, una por cada entidad: usuario, noticia y comentario. Segundo cuestión: Qué nodos formarán parte del diagrama?. En este caso, cada nodo que se incluya en el diagrama representará a los usuarios, noticias o comentarios junto con sus propiedades. Cada nodo, por tanto, deberá ser etiquetado de forma pertinente.

Diseño en Neo4j: creación de nodos - 6 - Vamos a comenzar introduciendo nodos de usuario y noticias con los siguientes datos: Usuarios: CREATE(MiguelNodo:usuario {nombre: Miguel, nombreusuario: Miguel_u, cuenta_twitter: miguelete93 }) CREATE(LaroNodo:usuario {nombre: Laro, nombreusuario: Laro_u, cuenta_twitter: larocantabro85, telefono: 1234567890 }) Noticias: dado que en CYPHER no existe el tipo de dato fecha, almacenaremos en propiedades separadas el año, el mes y el día: CREATE(NoticiaLaro1:noticia {titulo: Noticia1Laro, cuerpo: lorem ipsum, dia: 22, mes: 5, anio: 2017}) CREATE(NoticiaLaro2:noticia {titulo: Noticia2Laro, cuerpo: lorem ipsum 2, dia: 2, mes: 3, anio: 2015}) CREATE(NoticiaMiguel:noticia {titulo: NoticiaMiguel, cuerpo: lorem ipsum 3, dia: 15, mes: 3, anio: 2017})

Diseño en Neo4j: restricciones - 7 - Tercera cuestión: hay que definir restricciones?. En el enunciado, se indica que los nombres de usuario y las cuentas de twitter de los usuarios son únicas. En este punto, cabrían dos posibilidades: definir dos restricciones de unicidad, o definir esta restricción sobre uno de los campos y hacer del otro la KEY de los nodos con la etiqueta usuario. En esta práctica, vamos a optar por esta segunda opción, siendo la KEY el nombre de usuario: CREATE CONSTRAINT ON (u:usuario) ASSERT u.cuenta_twitter IS UNIQUE CREATE CONSTRAINT ON (u:usuario) ASSERT u.nombreusuario IS NODE KEY NOTA: Si usas le versión Community, en la que no está disponible la restricción NODE KEY, crea dos restricciones UNIQUE.

Diseño en Neo4j: restricciones - 8 - Aunque el enunciado no lo diga explícitamente, podría haber otras restricciones necesarias. En el caso de los usuarios y las noticias, tendría sentido obligar a que el nombre de usuario exista obligatoriamente (si no le hemos podido definir como NODE KEY). Igualmente, en las noticias los campos título y cuerpo deberían de ser obligatorios: CREATE CONSTRAINT ON (u:usuario) ASSERT exists(u.nombreusuario) CREATE CONSTRAINT ON (n:noticia) ASSERT exists(u.titulo) CREATE CONSTRAINT ON (n:noticia) ASSERT exists(u.cuerpo) NOTA: Las restricciones exists no están disponibles en la versión Community

Diseño en Neo4j: esquema inicial - 9 - Actualmente, el esquema que tendríamos en la base de datos es el siguiente: nombre: Laro nombreusuario: Laro_u cuenta_twitter: larocantabro85 telefono: 1234567890 nombre: Miguel nombreusuario: Miguel_u cuenta_twitter: miguelete93 titulo: Noticia1Laro cuerpo: lorem ipsum dia: 22 mes: 5 anio: 2017 titulo: Noticia2Laro cuerpo: lorem ipsum 2 dia: 2 mes: 3 anio: 2017 titulo: MiguelNoticia cuerpo: lorem ipsum 3 dia: 15 mes:3 anio: 2017

Diseño en Neo4j: consultas - 10 - Hagamos las siguientes consultas: Devolver todos los nodos. Devolver todos los nodos con etiqueta usuario. Devolver las noticias cuyo título termine en o. Devolver los usuarios en los que exista el campo telefono. Devolver los usuarios que, o bien tengan número de teléfono o bien, se llamen Miguel. Devolver las noticias publicadas en 2017. Devolver las noticias publicadas en marzo o abril. Devolver las noticias publicadas entre los años 2014 y 2016.

Diseño en Neo4j: consultas - 11 - Hagamos las siguientes consultas: Devolver todos los nodos. MATCH (allnodes) RETURN allnodes Devolver todos los nodos con etiqueta usuario. MATCH (u:usuario) RETURN u Devolver las noticias cuyo título termine en o. MATCH (n:noticia) WHERE n.titulo ENDS WITH o RETURN n Devolver los usuarios en los que exista el campo telefono. MATCH (u:usuario) WHERE exists(u.telefono) RETURN u Devolver los usuarios que o bien tengan número de teléfono o bien se llamen Miguel. MATCH (u:usuario) WHERE exists(u.telefono) OR u.nombre= Miguel RETURN u

Diseño en Neo4j: consultas - 12 - Hagamos las siguientes consultas: Devolver las noticias publicadas en 2017. MATCH (n:noticia) WHERE n.anio=2017 RETURN n Devolver las noticias publicadas en marzo o abril. MATCH (n:noticia) WHERE n.mes=3 OR n.mes=4 RETURN n MATCH (n:noticia) WHERE n.mes IN [3,4] RETURN n Devolver las noticias publicadas entre los años 2014 y 2016. MATCH (n:noticia) WHERE n.anio>=2014 AND n.anio<=2016 RETURN n

Diseño en Neo4j: relaciones - 13 - Cuarta cuestión: cuáles son las relaciones entre nodos y sus propiedades? En este ejercicio, existiría 4 tipos de relaciones: Entre las noticias y los usuarios: usuario escribe noticia y usuario puntúa noticia. Entre los comentarios y los usuarios: usuario escribe comentario. Entre los comentarios y las noticias los comentarios de los usuarios son escritos para una noticia. Siguiendo el esquema anterior, tendríamos que añadir, por tanto, las relaciones entre los dos usuarios y las tres noticias. Además, cada relación de usuario puntúa noticia tendrá una propiedad que almacenará la puntuación que el usuario le otorgó a la noticia.

Diseño en Neo4j: relaciones - 14 - Insertamos las relaciones en el esquema. Llamaremos REDACTO a la relación que indica qué usuario redactó la noticia. Dado que los nodos ya están creados, será necesario utilizar primero operaciones MATCH que retornen y guarden en variables los nodos sobre los que queremos crear la relación: MATCH(u:usuario) WHERE u.nombreusuario = Laro_u MATCH(n:noticia) WHERE n.titulo = Noticia1Laro CREATE (u)-[:redacto{}]->(n) MATCH(u:usuario) WHERE u.nombreusuario = Laro_u MATCH(n:noticia) WHERE n.titulo = Noticia2Laro CREATE (u)-[:redacto{}]->(n) MATCH(u:usuario) WHERE u.nombreusuario = Miguel_u MATCH(n:noticia) WHERE n.titulo = NoticiaMiguel CREATE (u)-[:redacto{}]->(n)

Diseño en Neo4j: relaciones - 15 - Insertamos las relaciones en el esquema. Llamaremos PUNTUA a la relación que indica la puntuación que un usuario le otorgó a una noticia. MATCH(u:usuario) WHERE u.nombreusuario = Laro_u MATCH(n:noticia) WHERE n.titulo = NoticiaMiguel CREATE (u)-[:puntua{puntuación: 3}]->(n) MATCH(u:usuario) WHERE u.nombreusuario = Miguel_u MATCH(n:noticia) WHERE n.titulo = Noticia1Laro CREATE (u)-[:puntua {puntuación: 5}]->( n) MATCH(u:usuario) WHERE u.nombreusuario = Miguel_u MATCH(n:noticia) WHERE n.titulo = Noticia2Laro CREATE (u)-[: PUNTUA {puntuación: 1}]->( n)

Diseño en Neo4j: esquema con relaciones - 16 - Ahora, el esquema que tendríamos en la base de datos es el siguiente: nombre: Laro nombreusuario: Laro_u cuenta_twitter: larocantabro85 telefono: 1234567890 PUNTUA puntuacion: 3 REDACTO titulo: Noticia1Laro cuerpo: lorem ipsum dia: 22 mes: 5 anio: 2017 PUNTUA puntuacion: 5 REDACTO titulo: Noticia2Laro cuerpo: lorem ipsum 2 dia: 2 mes: 3 anio: 2017 PUNTUA puntuacion: 1 nombre: Miguel nombreusuario: Miguel_u cuenta_twitter: miguelete93 titulo: MiguelNoticia cuerpo: lorem ipsum 3 dia: 15 mes:3 anio: 2017 REDACTO

Diseño en Neo4j: consultas - 17 - Probemos a realizar las siguientes consultas: Devolver los datos de todas las relaciones PUNTUA con puntuación igual a 4. Devolver los datos de todas las relaciones PUNTUA hechas por Miguel. Devolver los datos de las relaciones REDACTO de las noticias publicadas en 2017 cuyo autor se llame Laro. Devolver las cuenta de twitter de todos los usuarios que hayan puntuado noticias de 2017.

Diseño en Neo4j: consultas - 18 - Devolver los datos de todas las relaciones PUNTUA con puntuación de 4. MATCH relation=(u:usuario)-[r:puntua]->(n:noticia) WHERE n.puntuacion=4 RETURN relation Devolver los datos de todas las relaciones PUNTUA realizadas por Miguel. MATCH relation=(u:usuario)-[r:puntua]->(n:noticia) WHERE u.nombre= Miguel RETURN relation Devolver los datos de las relaciones REDACTO de las noticias publicadas en 2017 cuyo autor se llame Laro. MATCH relation=(u:usuario)-[r:redacto]->(n:noticia) WHERE r.anio=2017 AND u.nombre= Laro RETURN relation Devolver las cuentas de twitter de todos los usuarios que hayan valorado noticias de 2017. MATCH relation=(u:usuario)-[r:puntua]->(n:noticia) WHERE r.anio=2017 RETURN u.cuenta_twitter

Diseño en Neo4j: a realizar por el estudiante - 19 - Siguiendo el diseño del ejemplo, se propone añadir al esquema los comentarios que los usuarios pueden realizar sobre las noticias. Vamos a considerar que las noticias y los comentarios, a parte de su etiqueta particular, tengan una etiqueta común que indique que estos nodos almacenan contenidos del blog. Realizar en base a ello las siguientes actividades: Añadir a los nodos noticia una nueva etiqueta denominada contenido. Crear nodos de comentarios con doble etiqueta ( comentario y contenido ). Crear las restricciones que se consideren necesarias. Crear las relaciones entre los comentarios y los usuarios. Tienen estas relaciones alguna propiedad?. Crear las relaciones entre los comentarios y las noticias. Tienen estas relaciones alguna propiedad?.

Diseño en Neo4j: consultas sobre el nuevo diseño - 20 - En base al nuevo diseño al que se han añadido los comentarios, realizar las siguientes consultas: Devolver todos los nodos con etiqueta contenido. Devolver todos los nodos etiquetados como contenido y comentario. Contar el número de nodos que almacenan comentarios de los usuarios. Devolver los comentarios realizados en 2017 sobre noticias publicadas en 2016. Contar y devolver el número de contenidos publicados por el usuario llamado Laro. Contar y devolver el número de comentarios que tiene cada noticia, junto al título de la misma.