├── .gitignore ├── ModeladoDatos.md ├── Modelados ├── Autenticacion │ ├── Autenticacion_LogicaNegocio.md │ ├── Autenticacion_ModeloRelacionalBD.drawio │ └── Autenticacion_ModeloRelacionalBD.png ├── Carreras │ ├── Carreras_CorridaDatos.xlsx │ ├── Carreras_LogicaNegocio.md │ ├── Carreras_ModeloDocumental.json │ ├── Carreras_ModeloE-R.drawio │ ├── Carreras_ModeloE-R.png │ ├── Carreras_ModeloRelacionalBD.drawio │ └── Carreras_ModeloRelacionalBD.png ├── Encuestas │ ├── Encuestas_LogicaNegocio.md │ ├── Encuestas_ModeloRelacionalBD.drawio │ └── Encuestas_ModeloRelacionalBD.png ├── EntrenaTuGlamour │ ├── EntrenaTuGlamour.md │ ├── EntrenaTuGlamour_ModeloRelacionalBD.drawio │ └── EntrenaTuGlamour_ModeloRelacionalBD.png ├── MirChaGram │ ├── MirChaGram_LogicaNegocio.md │ ├── MirChaGram_ModeloDocumental.json │ ├── MirChaGram_ModeloRelacionalBD.drawio │ └── MirChaGram_ModeloRelacionalBD.png ├── PeliSeries │ ├── PeliSeries_LogicaNegocio.md │ ├── PeliSeries_ModeloDocumental.json │ ├── PeliSeries_ModeloRelacionalBD.drawio │ └── PeliSeries_ModeloRelacionalBD.png ├── SaintSeiya │ ├── SaintSeiya_LogicaNegocios.md │ ├── SaintSeiya_ModeloDocumental.json │ ├── SaintSeiya_ModeloRelacionalBD.drawio │ └── SaintSeiya_ModeloRelacionalBD.png └── Ventas │ ├── Ventas_CorridaDatos.xlsx │ ├── Ventas_LogicaNegocio.md │ ├── Ventas_ModeloRelacionalBD.drawio │ └── Ventas_ModeloRelacionalBD.png ├── NoSQL ├── Cassandra.sql ├── Mongo.js ├── Neo4j.cyp └── Redis.sh ├── NormalizacionBD.xlsx ├── README.md └── SQL ├── Script01_ComandosBasicos.sql ├── Script02_FuncionesBasicas.sql ├── Script03_Indices.sql ├── Script04_Joins.sql ├── Script05_Restricciones.sql └── Script06_ProcedimientosDisparadores.sql /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | -------------------------------------------------------------------------------- /ModeladoDatos.md: -------------------------------------------------------------------------------- 1 | # Modelado de Datos 2 | 3 | ## Pasos a seguir 4 | 5 | 1. Identificar las entidades del sistema. 6 | 1. Identificar los atributos de las entidades. 7 | 1. Identificar las llaves primarias y foráneas. 8 | 1. Asignar una nomenclatura adeacuada a las entidades y sus atributos. 9 | 1. Identificar las entidades pivote del sistema. 10 | 1. Identificar los catálogos del sistema. 11 | 1. Identificar los tipos de relaciones del sistema. 12 | 1. Crear el Modelo Entidad-Relación del sistema. 13 | 1. Crear el Modelo Relacional de la base de datos del sistema. 14 | 1. Identificar los tipos de dato de los atributos de las entidades del sistema. 15 | 1. Identificar los atributos que puedan ser únicos en el sistema. 16 | 1. Identificar las reglas de negocio (Operaciones _CRUD_) del sistema. 17 | 18 | ## Glosario 19 | 20 | - **PK**: _Primary Key_ 21 | - **FK**: _Foreign Key_ 22 | - **UQ**: _Unique Attribute_ 23 | - **ED**: Entidad de Datos 24 | - **EP**: Entidad Pivote 25 | - **EC**: Entidad Catálogo 26 | -------------------------------------------------------------------------------- /Modelados/Autenticacion/Autenticacion_LogicaNegocio.md: -------------------------------------------------------------------------------- 1 | # Sistema de Autenticación 2 | 3 | ## Listado de Entidades 4 | 5 | ### usuarios **(ED)** 6 | 7 | - usuario_id **(PK)** 8 | - username **(UQ)** 9 | - password 10 | - email **(UQ)** 11 | - nombre 12 | - apellido 13 | - avatar 14 | - activo 15 | - fecha_creacion 16 | - fecha_actualizacion 17 | 18 | ### roles **(EC)** 19 | 20 | - rol_id **(PK)** 21 | - nombre 22 | - descripcion 23 | 24 | ### permisos **(EC)** 25 | 26 | - permiso_id **(PK)** 27 | - nombre 28 | - descripcion 29 | 30 | ### roles_x_usuario **(EP)** 31 | 32 | - rxu_id **(PK)** 33 | - usuario_id **(FK)** 34 | - rol_id **(FK)** 35 | 36 | ### permisos_x_roles **(EP)** 37 | 38 | - pxr_id **(PK)** 39 | - rol_id **(FK)** 40 | - permiso_id **(FK)** 41 | 42 | ## Relaciones 43 | 44 | 1. **Usuarios** tienen **roles** (_M - M_). 45 | 1. **Roles** tienen **permisos** (_M - M_). 46 | 47 | ## Diagramas 48 | 49 | ### Modelo Relacional de la BD 50 | 51 | ![Modelo Relacional](Autenticacion_ModeloRelacionalBD.png) 52 | 53 | ## Reglas de Negocio 54 | 55 | ### usuarios 56 | 57 | 1. Crear un usuario. 58 | 1. Leer todos los usuarios. 59 | 1. Leer un usuario en particular. 60 | 1. Actualizar un usuario. 61 | 1. Validar un usuario. 62 | 1. Habilitar un usuario. 63 | 1. Inhabilitar un usuario. 64 | 1. Actualizar datos de un usuario. 65 | 1. Actualizar password de un usuario. 66 | 1. Eliminar un usuario. 67 | 68 | ### roles 69 | 70 | 1. Crear un rol. 71 | 1. Leer todos los roles. 72 | 1. Leer un rol en particular. 73 | 1. Actualizar un rol. 74 | 1. Eliminar un rol. 75 | 76 | ### permisos 77 | 78 | 1. Crear un permiso. 79 | 1. Leer todos los permisos. 80 | 1. Leer un permiso en particular. 81 | 1. Actualizar un permiso. 82 | 1. Eliminar un permiso. 83 | 84 | ### roles_x_usuarios 85 | 86 | 1. Crear un rxu. 87 | 1. Leer todos los rxu. 88 | 1. Leer un rxu en particular. 89 | 1. Leer todos los rxu de un usuario. 90 | 1. Eliminar un rxu. 91 | 92 | ### permisos_x_roles 93 | 94 | 1. Crear un pxr. 95 | 1. Leer todos los pxr. 96 | 1. Leer un pxr en particular. 97 | 1. Leer todos los pxr de un rol. 98 | 1. Eliminar un pxr. 99 | -------------------------------------------------------------------------------- /Modelados/Autenticacion/Autenticacion_ModeloRelacionalBD.drawio: -------------------------------------------------------------------------------- 1 | 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 -------------------------------------------------------------------------------- /Modelados/Autenticacion/Autenticacion_ModeloRelacionalBD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jonmircha/youtube-bd/4f0e51f775c511f939750563913214dcb983d593/Modelados/Autenticacion/Autenticacion_ModeloRelacionalBD.png -------------------------------------------------------------------------------- /Modelados/Carreras/Carreras_CorridaDatos.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jonmircha/youtube-bd/4f0e51f775c511f939750563913214dcb983d593/Modelados/Carreras/Carreras_CorridaDatos.xlsx -------------------------------------------------------------------------------- /Modelados/Carreras/Carreras_LogicaNegocio.md: -------------------------------------------------------------------------------- 1 | # Carreras 2 | 3 | ## Listado de Entidades 4 | 5 | ### carreras **(ED)** 6 | 7 | - carrera_id **(PK)** 8 | - nombre 9 | - tipo_carrera **(FK)** 10 | - fecha 11 | - tiempo 12 | - mejor_tiempo 13 | - altitud 14 | - lugar 15 | - pais **(FK)** 16 | - foto 17 | 18 | ### tipos_carreras **(EC)** 19 | 20 | - tipo_carrera_id **(PK)** 21 | - descripcion 22 | - distancia **(UQ)** 23 | 24 | ### paises **(EC)** 25 | 26 | - pais_id **(PK)** 27 | - nombre 28 | 29 | ## Relaciones 30 | 31 | 1. Una **carrera** _pertenece_ a un **tipo de carrera** (_1 a M_). 32 | 1. Una **carrera** se _corre_ en un **país** (_1 a M_). 33 | 34 | ## Diagramas 35 | 36 | ### Modelo Entidad - Reación 37 | 38 | ![Modelo Entidad - Reación](./Carreras_ModeloE-R.png) 39 | 40 | ### Modelo Relacional de la BD 41 | 42 | ![Modelo Relacional de la BD](./Carreras_ModeloRelacionalBD.png) 43 | 44 | ## Reglas de Negocio 45 | 46 | ### carreras 47 | 48 | 1. Crear el registro de una carrera 49 | 1. Leer el registro de una(s) carrera(s) dada una condición en particular. 50 | 1. Leer todos los registros de la entidad carreras. 51 | 1. Actualizar los datos de una carrera dada una condición en particular. 52 | 1. Eliminar los datos de una carrera dada una condición en particular. 53 | 54 | ### tipos_carreras 55 | 56 | 1. Todos los valores del atributo distancia, deberán estar expresados en _km_ y no se podrán repetir. 57 | 1. Crear el registro de un tipo de carrera 58 | 1. Leer el registro de un(os) tipo(s) de carrera(s) dada una condición en particular. 59 | 1. Leer todos los registros de la entidad tipos carreras. 60 | 1. Actualizar los datos de un tipo de carrera dada una condición en particular. 61 | 1. Eliminar los datos de una tipo de carrera dada una condición en particular. 62 | 63 | ### paises 64 | 65 | 1. Crear el registro de un país 66 | 1. Leer el registro de un(os) pais(es) dada una condición en particular. 67 | 1. Leer todos los registros de la entidad paises. 68 | 1. Actualizar los datos de un país dada una condición en particular. 69 | 1. Eliminar los datos de un páis dada una condición en particular. 70 | -------------------------------------------------------------------------------- /Modelados/Carreras/Carreras_ModeloDocumental.json: -------------------------------------------------------------------------------- 1 | { 2 | "carreras": [ 3 | { 4 | "carrera_id": "1", 5 | "nombre": "Carrera We Run México 2011", 6 | "tipo_carrera": "10K", 7 | "fecha": "2011-11-26", 8 | "tiempo": "0:56:59", 9 | "mejor_tiempo": false, 10 | "altitud": "2250", 11 | "lugar": "CDMX", 12 | "pais": "México", 13 | "foto": "img/carrera-01.jpg" 14 | }, 15 | { 16 | "carrera_id": "2", 17 | "nombre": "Reto Bosques de las Lomas", 18 | "tipo_carrera": "15k", 19 | "fecha": "2012-05-13", 20 | "tiempo": "1:20:21", 21 | "mejor_tiempo": false, 22 | "altitud": "2250", 23 | "lugar": "EdoMex", 24 | "pais": "México", 25 | "foto": "img/carrera-02.jpg" 26 | }, 27 | { 28 | "carrera_id": "3", 29 | "nombre": "Carrera Día del Padre 2012", 30 | "tipo_carrera": "Medio Maratón", 31 | "fecha": "2012-06-17", 32 | "tiempo": "1:55:02", 33 | "mejor_tiempo": false, 34 | "altitud": "2250", 35 | "lugar": "CDMX", 36 | "pais": "México", 37 | "foto": "img/carrera-03.jpg" 38 | }, 39 | { 40 | "carrera_id": "4", 41 | "nombre": "Maratón de la Ciudad de México 2012", 42 | "tipo_carrera": "Maratón", 43 | "fecha": "2012-09-02", 44 | "tiempo": "4:35:35", 45 | "mejor_tiempo": false, 46 | "altitud": "2250", 47 | "lugar": "CDMX", 48 | "pais": "México", 49 | "foto": "img/carrera-04.jpg" 50 | }, 51 | { 52 | "carrera_id": "5", 53 | "nombre": "Maratón Lala 2014", 54 | "tipo_carrera": "Maratón", 55 | "fecha": "2011-11-29", 56 | "tiempo": "3:56:22", 57 | "mejor_tiempo": false, 58 | "altitud": "1120", 59 | "lugar": "Torreón", 60 | "pais": "México", 61 | "foto": "img/carrera-05.jpg" 62 | }, 63 | { 64 | "carrera_id": "6", 65 | "nombre": "Ultra Trail 50K Guadalajara 2014", 66 | "tipo_carrera": "UltraMaratón 50k", 67 | "fecha": "2014-03-02", 68 | "tiempo": "8:23:01", 69 | "mejor_tiempo": true, 70 | "altitud": "1800", 71 | "lugar": "Guadalajara", 72 | "pais": "México", 73 | "foto": "img/carrera-06.jpg" 74 | }, 75 | { 76 | "carrera_id": "7", 77 | "nombre": "San Francisco Marathon 2015", 78 | "tipo_carrera": "Maratón", 79 | "fecha": "2015-07-26", 80 | "tiempo": "3:33:38", 81 | "mejor_tiempo": false, 82 | "altitud": "20", 83 | "lugar": "San Francisco", 84 | "pais": "USA", 85 | "foto": "img/carrera-07.jpg" 86 | }, 87 | { 88 | "carrera_id": "8", 89 | "nombre": "Maratón Powerade Monterrey 2016", 90 | "tipo_carrera": "Maratón", 91 | "fecha": "2016-12-11", 92 | "tiempo": "3:35:59", 93 | "mejor_tiempo": false, 94 | "altitud": "550", 95 | "lugar": "Monterrey", 96 | "pais": "México", 97 | "foto": "img/carrera-08.jpg" 98 | }, 99 | { 100 | "carrera_id": "9", 101 | "nombre": "Spartan Race UltraBeast Mexico 2017", 102 | "tipo_carrera": "UltraMaratón 50k", 103 | "fecha": "2017-12-03", 104 | "tiempo": "10:00:32", 105 | "mejor_tiempo": false, 106 | "altitud": "2700", 107 | "lugar": "Puebla", 108 | "pais": "México", 109 | "foto": "img/carrera-09.jpg" 110 | }, 111 | { 112 | "carrera_id": "10", 113 | "nombre": "Bank of America Chicago Marathon 2018", 114 | "tipo_carrera": "Maratón", 115 | "fecha": "2018-10-07", 116 | "tiempo": "3:27:13", 117 | "mejor_tiempo": true, 118 | "altitud": "180", 119 | "lugar": "Chicago", 120 | "pais": "USA", 121 | "foto": "img/carrera-10.jpg" 122 | } 123 | ] 124 | } 125 | -------------------------------------------------------------------------------- /Modelados/Carreras/Carreras_ModeloE-R.drawio: -------------------------------------------------------------------------------- 1 | 7VxLk6M2EP4tObgqOTgFCOzxceeRzCa7VVvZQ7K5TMkgY+1gRGR5PM6v3wbEWxi8awy252RoCSH1119LajUeobvV6+8cB8uPzCHeyNCc1xG6HxmGoSETfkLJLpbok6keS1xOHSnLBJ/p/0QKNSndUIesCxUFY56gQVFoM98ntijIMOdsW6y2YF7xrQF2SUXw2cZeVfo3dcQyliJNy+SPhLpLUSpY4aSuFKyX2GHbnAg9jNAdZ0zEV6vXO+KFykvUEj/3W01p2i9OfNHmgVfb++MLQu/N3b9/IvfmE33/4XFsTuJmXrC3kQOWvRW7RAMuZ5ug+jbZgRfCBXlVQYHnSQvZcMFOCFsRwXdQTz41tpBUkbSR8TTR2TbTuK5NpXCZU/c0EWIJs5s2n6kCLqQ2DtEMUmhm4sF7bxcMdJBX0eS/DUsKxuvIhN9BBfMmgCHeZuVw5crfqKF5Ioh4w+CRB19QBztw9RfxsE1Hd2h0i/zkARjJvNwIyOIOJeISfIBOKF+KFYz/XodL7FHXh2sbsCQcBCGGFEz+nSxYUccJH7/lBEYjcdTgPmDUF5GmrduRdR+2tREsHnHU9Fpw9kzumMeg3Xuf+WErC+p5ZRH0WHLd0NJe581rv7mWja7WuAyFKVkzlSV1ZkjWd1PsMB20J17ii5HekmYTsyvt6ArllMhxKO0Ms4Z2NswHhMMQ6pijIlkJKQDKd4gj+bBdUkE+B9gOS7cwAxaJ1hZRqwbRequeFT2mbiocpqECsiscjRPiCHM/Wz9dDprpdLcPTZXP6gzN+rnv+GgGmK5JiuKcN85vZ4NrmaWm1TdLzX24KjCsX7psWtaXLH2CbmXAbQ4CE8YFi33SDGQR9c5gRb072xYrCuLALkbeMi6WzGU+9h4yaUlbWZ0PjAVSoV+JEDu5TAsXekV159dw5uEKX7MNt0nz0kBg7pK9Dcb1whHvhY/DilrQl+K+7ujY3FSw8dlqzsngzTrdcfdm1rM3s64a0kDMOjEOxdRBFXNDtlBL1mkN7p+ejfvXteKsjvqmja7aQ10vbxJLPR5xokffcY53uQoyFJK1/CkU5MzEKi3qp1oJ6bjFDPe0az9gCl1sw7S6hXtIGZ8AaD+yUl/C7LhZD4bdll6CTbOq9DYV9NZRZ/xW7caumN/GsCbGYS7GARS++0cWRjdfwsZ/tZLb+1f5svhu933EakTV6A1VtVuelGMtZdrGPZVPlWzjGB5adeBS8tB6K895UXH9g/20OanBcZs/pKu66e4C2dNmYD++AdsI7MSyGoFVzb/dAVvd0S+IvcRVLz+4jUpBkbPe9ynD2993MeO1XsccfYPfxT6luT46wb7GqEYfBCWrgA2XhGm+S9+0M4YXHkiXnQNYoLalqzGQsEL55HfWQNf99TuiazUMsSJfGX86E9L2H9MzhrfnP0vSdrOrPPUcm9hZt6StHg5jT1CxcYbLV/VKN83B7I++wwsK9UrDox/Rnk9I3qgGfLyNi/nZkWraO6lUEZYrJtXkHEjVWN/UTkHCagyn+fQ6TEy7oFProtZ7z2Ey3qJBKgs9dzafYkpNdmcnOeUGDoeJ9Zxf1DG3MStG2Q1VmEpX+INUePyc42HGqfpyCImRD+SYG1VDOpeIDjpTdOoT9ivLlnl+fVPMy1Z9W7Y5myVO+qmX9GnWTd9rHKTKt79i0qBhkaYapDmTVG00GZylt/iO+Jos3RqWpbfITdmbvH1Jn+9MSwkmve+EkSo4cXncMdpyZzos7lTjFA5Z25wGNmX+4K19Vt7Q927upmr3fsXmPhuUuZvVXbhD1wL7Nh1+xlvZtffv283r2Da3NfbEuoZi7PXronWAfWXc0I7zYsOYIXfnP4PhwLu15OeXSLlaFFxc4BX1dnHVR+K9kDBlN1euCD7KgvilYYnP+Ap7ubIXzCmGX4+6WGx4+M9Ie+vZOFBU8cBaCB/DIG3qu9VyxoMl9uWDRiwL05LHMhM5FKfJyEkZBRsNzSksTAcUlQgOjS2g/eRNUUpxzMvoD5pyr9ky7hQ7lrY13pL5M4XmwjbjxOWxZHah3hzbz27EmXEJLcO8iYEyzJm8sBLMolYdYjMOlsf8sVhS+9kna9k96lNBE/2U6+YQ21sv151CvYXHsCgrB/xu4OFdUt2jfhiK/omuAvAA2BfKcHXbnPNUFhv6/lT0Bu+e8y6g3xPue5Eiaq3KDb/pzL3Xnyu+fc1xCLDlhCfFvzYd6WsOuM3+cy0+kcr+uQ49fAM= -------------------------------------------------------------------------------- /Modelados/Carreras/Carreras_ModeloE-R.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jonmircha/youtube-bd/4f0e51f775c511f939750563913214dcb983d593/Modelados/Carreras/Carreras_ModeloE-R.png -------------------------------------------------------------------------------- /Modelados/Carreras/Carreras_ModeloRelacionalBD.drawio: -------------------------------------------------------------------------------- 1 | 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 -------------------------------------------------------------------------------- /Modelados/Carreras/Carreras_ModeloRelacionalBD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jonmircha/youtube-bd/4f0e51f775c511f939750563913214dcb983d593/Modelados/Carreras/Carreras_ModeloRelacionalBD.png -------------------------------------------------------------------------------- /Modelados/Encuestas/Encuestas_LogicaNegocio.md: -------------------------------------------------------------------------------- 1 | # Encuestas 2 | 3 | ## Listado de Entidades 4 | 5 | ### encuestas **(ED)** 6 | 7 | - encuesta_id **(PK)** 8 | - nombre 9 | - descripcion 10 | - imagen 11 | - fecha 12 | - encuestados 13 | 14 | ### preguntas **(ED)** 15 | 16 | - pregunta_id **(PK)** 17 | - encuesta_id **(FK)** 18 | - pregunta 19 | 20 | ### respuestas **(ED)** 21 | 22 | - respuesta_id **(PK)** 23 | - pregunta_id **(FK)** 24 | - respuesta 25 | - es_correcta 26 | 27 | ### encuestados **(ED)** 28 | 29 | - encuestado_id **(PK)** 30 | - nombre 31 | - apellidos 32 | - edad 33 | - email **(UQ)** 34 | 35 | ### resultado **(ED|EP)** 36 | 37 | - resultado_id **(PK)** 38 | - encuesta_id **(FK)** 39 | - encuestado_id **(FK)** 40 | - preguntas 41 | - correctas 42 | 43 | ## Relaciones 44 | 45 | 1. Una **encuesta** tiene **preguntas** (_1 - M_). 46 | 1. Una **pregunta** tiene **respuestas** (_1 - M_). 47 | 1. Una **encuesta** tiene **resultados** (_1 - M_). 48 | 1. Un **encuestado** tiene **resultados** (_1 - M_). 49 | 50 | ## Diagramas 51 | 52 | ### Modelo Relacional de la BD 53 | 54 | ![Modelo Relacional](Encuestas_ModeloRelacionalBD.png) 55 | 56 | ## Reglas de Negocio 57 | 58 | ### encuestas 59 | 60 | 1. Crear una encuesta. 61 | 1. Leer todas las encuestas. 62 | 1. Leer una encuesta en particular. 63 | 1. Actualizar una encuesta. 64 | 1. Eliminar una encuesta. 65 | 1. Aumentar en 1 el valor del atributo encuestados cada que un encuestado complete la encuesta. 66 | 67 | ### preguntas 68 | 69 | 1. Crear una pregunta. 70 | 1. Leer todas las preguntas. 71 | 1. Leer una pregunta en particular. 72 | 1. Actualizar una pregunta. 73 | 1. Eliminar una pregunta. 74 | 75 | ### respuestas 76 | 77 | 1. Crear una respuesta. 78 | 1. Leer todas las respuestas. 79 | 1. Leer una respuesta en particular. 80 | 1. Actualizar una respuesta. 81 | 1. Eliminar una respuesta. 82 | 83 | ### encuestados 84 | 85 | 1. Crear un encuestados. 86 | 1. Leer todos los encuestados. 87 | 1. Leer un encuestado en particular. 88 | 1. Actualizar un encuestado. 89 | 1. Eliminar un encuestado. 90 | 1. Antes de crear un encuestado en la entidad, verificar mediante su email que no exista. 91 | 92 | ### resultados 93 | 94 | 1. Crear un resultado. 95 | 1. Leer todas los resultados. 96 | 1. Leer un resultado en particular. 97 | 1. Actualizar un resultado. 98 | 1. Eliminar un resultado. 99 | 1. Sacar el porcentaje de asertividad que tuvo el encuestado al contestar la encuesta. 100 | -------------------------------------------------------------------------------- /Modelados/Encuestas/Encuestas_ModeloRelacionalBD.drawio: -------------------------------------------------------------------------------- 1 | 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 -------------------------------------------------------------------------------- /Modelados/Encuestas/Encuestas_ModeloRelacionalBD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jonmircha/youtube-bd/4f0e51f775c511f939750563913214dcb983d593/Modelados/Encuestas/Encuestas_ModeloRelacionalBD.png -------------------------------------------------------------------------------- /Modelados/EntrenaTuGlamour/EntrenaTuGlamour.md: -------------------------------------------------------------------------------- 1 | # Sistema Entrena Tu _Glamour_ 2 | 3 | ## Requisitos del Sistema 4 | 5 | - Registrar participantes para el evento Entrena tu _Glamour_. 6 | - El evento tendrá 4 disciplinas: _KickBoxing_, Pilates, Yoga y Zumba. 7 | - Cada disciplina tendrá 3 bloques de horarios: 8 | - Bloque 1 de 9:00 a 12:00 9 | - Bloque 2 de 14:00 a 17:00 10 | - Bloque 3 de 18:00 a 21:00 11 | - Cada actividad tendrá un máximo de 10 participantes, excepto Yoga que tendrá 20. 12 | - Cada participante sólo se podrá registrar a una sóla actividad. 13 | 14 | ## Listado de Entidades 15 | 16 | ### actividades **(EC)** 17 | 18 | - actividad_id **(PK)** 19 | - bloque 20 | - disciplina 21 | - horario 22 | - cupo 23 | 24 | | actividad_id | bloque | disciplina | horario | cupo | 25 | | ------------ | -------- | ----------- | ------------- | ---- | 26 | | 1K | Bloque 1 | KICK BOXING | 9:00 a 12:00 | 10 | 27 | | 1Y | Bloque 1 | YOGA | 9:00 a 12:00 | 20 | 28 | | 1P | Bloque 1 | PILATES | 9:00 a 12:00 | 10 | 29 | | 1Z | Bloque 1 | ZUMBA | 9:00 a 12:00 | 10 | 30 | | 2K | Bloque 2 | KICK BOXING | 14:00 a 17:00 | 10 | 31 | | 2Y | Bloque 2 | YOGA | 14:00 a 17:00 | 20 | 32 | | 2P | Bloque 2 | PILATES | 14:00 a 17:00 | 10 | 33 | | 2Z | Bloque 2 | ZUMBA | 14:00 a 17:00 | 10 | 34 | | 3K | Bloque 3 | KICK BOXING | 18:00 a 21:00 | 10 | 35 | | 3Y | Bloque 3 | YOGA | 18:00 a 21:00 | 20 | 36 | | 3P | Bloque 3 | PILATES | 18:00 a 21:00 | 10 | 37 | | 3Z | Bloque 3 | ZUMBA | 18:00 a 21:00 | 10 | 38 | 39 | ### participantes **(ED)** 40 | 41 | - email **(PK)** 42 | - nombre 43 | - apellidos 44 | - nacimiento 45 | 46 | ### registros **(ED | EP)** 47 | 48 | - registro_id **(PK)** 49 | - email **(FK)** 50 | - actividad **(FK)** 51 | - fecha 52 | 53 | ## Relaciones 54 | 55 | 1. Un **participante** crea un **registro** (_1 - 1_). 56 | 1. Una **actividad** se asigna a un **registro** (_1 - M_). 57 | 58 | ## Diagramas 59 | 60 | ### Modelo Relacional de la BD 61 | 62 | ![Modelo Relacional](EntrenaTuGlamour_ModeloRelacionalBD.png) 63 | 64 | ## Reglas de Negocio 65 | 66 | ### actividades 67 | 68 | 1. Crear una actividad. 69 | 1. Leer todos las actividades. 70 | 1. Leer una actividad en particular. 71 | 1. Actualizar una actividad. 72 | 1. Eliminar una actividad. 73 | 74 | ### participantes 75 | 76 | 1. Crear un participante. 77 | 1. Leer todos los participantes. 78 | 1. Leer un participante en particular. 79 | 1. Actualizar un participante. 80 | 1. Eliminar un participante. 81 | 82 | ### registros 83 | 84 | 1. Crear un registro. 85 | 1. Leer todos los registros. 86 | 1. Leer un registro en particular. 87 | 1. Actualizar un registro. 88 | 1. Eliminar un registro. 89 | 90 | ### Lógica y validaciones de requisitos 91 | 92 | - Registrar un participante implica: 93 | - Validar cupo de la actividad. 94 | - Insertar datos a las entidades participantes y registros. 95 | - Restarle uno al atributo cupo de la entidad actividades. 96 | - Listar registros 97 | - Eliminar participante implica: 98 | - Eliminar datos a las entidades participantes y registros. 99 | - Sumarle uno al atributo cupo de la entidad actividades. 100 | -------------------------------------------------------------------------------- /Modelados/EntrenaTuGlamour/EntrenaTuGlamour_ModeloRelacionalBD.drawio: -------------------------------------------------------------------------------- 1 | 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 -------------------------------------------------------------------------------- /Modelados/EntrenaTuGlamour/EntrenaTuGlamour_ModeloRelacionalBD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jonmircha/youtube-bd/4f0e51f775c511f939750563913214dcb983d593/Modelados/EntrenaTuGlamour/EntrenaTuGlamour_ModeloRelacionalBD.png -------------------------------------------------------------------------------- /Modelados/MirChaGram/MirChaGram_LogicaNegocio.md: -------------------------------------------------------------------------------- 1 | # MirChaGram 2 | 3 | ## Listado de Entidades 4 | 5 | ### posts **(ED)** 6 | 7 | - post_id 8 | - post_date 9 | - plot 10 | - photo 11 | - user **(FK)** 12 | 13 | ### user **(ED)** 14 | 15 | - user_id **(PK)** 16 | - user_date 17 | - user_name 18 | - email **(UQ)** 19 | - password 20 | - phone **(UQ)** 21 | - bio 22 | - web 23 | - avatar 24 | - birthdate 25 | - genre 26 | - country **(FK)** 27 | 28 | ### comments **(ED | EP)** 29 | 30 | - comment_id **(PK)** 31 | - comment_date 32 | - comment 33 | - post_id **(FK)** 34 | - user_id **(FK)** 35 | 36 | ### hearts **(ED | EP)** 37 | 38 | - heart_id **(PK)** 39 | - heart_date 40 | - post_id **(FK)** 41 | - user_id **(FK)** 42 | 43 | ### follows 44 | 45 | - follow_id **(PK)** 46 | - follow_date 47 | - follow_user **(FK)** 48 | - following_user **(FK)** 49 | 50 | ### counties **(EC)** 51 | 52 | - country_id **(PK)** 53 | - country_name 54 | 55 | ## Relaciones 56 | 57 | 1. Los **users** publican **posts** (_1 - M_). 58 | 1. Los **users** escriben **comments** (_1 - M_). 59 | 1. Los **posts** tienen **comments** (_1 -M_). 60 | 1. Los **users** otorgan **hearts** (_1 - 1_). 61 | 1. Los **posts** tienen **hearts** (_1 - M_). 62 | 1. Los **users** tienen **follows** (_1 - M_). 63 | 1. Los **users** siguen **follows** (_1 - M_). 64 | 1. Los **users** tienen un **countries** (_1 - M_). 65 | 66 | ## Diagramas 67 | 68 | ### Modelo Relacional de la BD 69 | 70 | ![Modelo Relacional](MirChaGram_ModeloRelacionalBD.png) 71 | 72 | ## Reglas de Negocio 73 | 74 | ### posts 75 | 76 | 1. Crear un post. 77 | 1. Leer todos los posts. 78 | 1. Leer un post en particular. 79 | 1. Leer los post de un user. 80 | 1. Actualizar el plot de un post. 81 | 1. Eliminar un post. 82 | 83 | ### users 84 | 85 | 1. Crear un user. 86 | 1. Leer todos los users. 87 | 1. Leer un user en particular. 88 | 1. Validar un user. 89 | 1. Actualizar datos del user. 90 | 1. Actualizar password de user. 91 | 1. Eliminar user. 92 | 93 | ### comments 94 | 95 | 1. Crear un comment en un post. 96 | 1. Leer todos los comments de un post. 97 | 1. Leer un comment de un post. 98 | 1. Contar el número de comments de un post. 99 | 1. Eliminar comment en un post. 100 | 101 | ### hearts 102 | 103 | 1. Crear heart de user en un post. 104 | 1. Contar el número de hearts de un post. 105 | 1. Eliminar heart de user en un post. 106 | 107 | ### follows 108 | 109 | 1. Crear follow de un user. 110 | 1. Contar el número de followers de un user. 111 | 1. Contar el número de followings de un user. 112 | 1. Eliminar follow de un user. 113 | 114 | ### countries 115 | 116 | 1. Crear country. 117 | 1. Leer todos los countries. 118 | 1. Leer un country. 119 | 1. Actualizar un country. 120 | 1. Eliminar country. 121 | -------------------------------------------------------------------------------- /Modelados/MirChaGram/MirChaGram_ModeloDocumental.json: -------------------------------------------------------------------------------- 1 | { 2 | "users": [ 3 | { 4 | "user_id": "", 5 | "user_date": "", 6 | "user_name": "", 7 | "email": "", 8 | "password": "", 9 | "phone": "", 10 | "bio": "", 11 | "web": "", 12 | "avatar": "", 13 | "birthdate": "", 14 | "genre": "", 15 | "country": "", 16 | "posts": [1, 2, 3], 17 | "followers": ["@user1", "@user2", "@user3"], 18 | "followings": ["@user1", "@user2", "@user3"] 19 | } 20 | ], 21 | "posts": [ 22 | { 23 | "post_id": "", 24 | "post_date": "", 25 | "plot": "", 26 | "photo": "", 27 | "user": "", 28 | "comments": [ 29 | { 30 | "comment_id": "", 31 | "comment_date": "", 32 | "comment": "", 33 | "user": "" 34 | }, 35 | { 36 | "comment_id": "", 37 | "comment_date": "", 38 | "comment": "", 39 | "user": "" 40 | }, 41 | { 42 | "comment_id": "", 43 | "comment_date": "", 44 | "comment": "", 45 | "user": "" 46 | } 47 | ], 48 | "hearts": ["@user1", "@user2", "@user3"] 49 | } 50 | ] 51 | } 52 | -------------------------------------------------------------------------------- /Modelados/MirChaGram/MirChaGram_ModeloRelacionalBD.drawio: -------------------------------------------------------------------------------- 1 | 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 -------------------------------------------------------------------------------- /Modelados/MirChaGram/MirChaGram_ModeloRelacionalBD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jonmircha/youtube-bd/4f0e51f775c511f939750563913214dcb983d593/Modelados/MirChaGram/MirChaGram_ModeloRelacionalBD.png -------------------------------------------------------------------------------- /Modelados/PeliSeries/PeliSeries_LogicaNegocio.md: -------------------------------------------------------------------------------- 1 | # PeliSeries 2 | 3 | 4 | 5 | ## Listado de Entidades 6 | 7 | ### peliculas **(ED)** 8 | 9 | - pelicula_id **(PK)** 10 | - titulo 11 | - estreno 12 | - duracion 13 | - sinopsis 14 | - estudio 15 | - director 16 | - elenco 17 | - poster 18 | - trailer 19 | - pais **(FK)** 20 | 21 | ### series **(ED)** 22 | 23 | - serie_id **(PK)** 24 | - titulo 25 | - estreno 26 | - final 27 | - sinopsis 28 | - estudio 29 | - creador 30 | - elenco 31 | - poster 32 | - trailer 33 | - pais **(FK)** 34 | 35 | ### temporadas **(ED)** 36 | 37 | - temporada_id **(PK)** 38 | - serie_id **(FK)** 39 | - numero 40 | - estreno 41 | - titulo 42 | - sinopsis 43 | - poster 44 | - trailer 45 | 46 | ### episodios **(ED)** 47 | 48 | - episodio_id **(PK)** 49 | - temporada_id **(FK)** 50 | - numero 51 | - estreno 52 | - titulo 53 | - sinopsis 54 | - director 55 | - duracion 56 | 57 | ### paises **(EC)** 58 | 59 | - pais_id **(PK)** 60 | - nombre 61 | 62 | ### generos **(EC)** 63 | 64 | - genero_id **(PK)** 65 | - nombre 66 | 67 | ### generos_x_peliculas **(EP)** 68 | 69 | - gxp_id **(PK)** 70 | - pelicula_id **(FK)** 71 | - genero_id **(FK)** 72 | 73 | ### generos_x_series **(EP)** 74 | 75 | - gxs_id **(PK)** 76 | - serie_id **(FK)** 77 | - genero_id **(FK)** 78 | 79 | ## Relaciones 80 | 81 | 1. Una **pelicula** tiene **país** (_1 - M_). 82 | 1. Una **serie** tiene **país** (_1 - M_). 83 | 1. Una **temporada** pertenece a **serie** (_1 - M_). 84 | 1. Un **episodio** pertenece a **temporada** (_1 - M_). 85 | 1. **Películas** pertenecen a **géneros** (_M - M_). 86 | 1. **Series** pertenecen a **géneros** (_M - M_). 87 | 88 | ## Diagramas 89 | 90 | ### Modelo Relacional de la BD 91 | 92 | ![Modelo Relacional](PeliSeries_ModeloRelacionalBD.png) 93 | 94 | ## Reglas de Negocio 95 | 96 | ### peliculas 97 | 98 | 1. Crear una película. 99 | 1. Leer todas las películas. 100 | 1. Leer una película en particular. 101 | 1. Actualizar una película. 102 | 1. Eliminar una película. 103 | 104 | ### series 105 | 106 | 1. Crear una serie. 107 | 1. Leer todas las series. 108 | 1. Leer una serie en particular. 109 | 1. Leer las temporadas de una serie. 110 | 1. Leer los episodios de una serie. 111 | 1. Actualizar una serie. 112 | 1. Eliminar una serie. 113 | 114 | ### temporadas 115 | 116 | 1. Crear una temporada. 117 | 1. Leer todas las temporadas. 118 | 1. Leer una temporada en particular. 119 | 1. Leer los episodios de una temporada. 120 | 1. Actualizar una temporada. 121 | 1. Eliminar una temporada. 122 | 123 | ### episodios 124 | 125 | 1. Crear un episodio. 126 | 1. Leer todos los episodios. 127 | 1. Leer un episodio en particular. 128 | 1. Actualizar un episodio. 129 | 1. Eliminar un episodio. 130 | 131 | ### paises 132 | 133 | 1. Crear un pais. 134 | 1. Leer todos los paises. 135 | 1. Leer un país en particular. 136 | 1. Actualizar un país. 137 | 1. Eliminar un país. 138 | 139 | ### generos 140 | 141 | 1. Crear un género. 142 | 1. Leer todos los géneros. 143 | 1. Leer un género en particular. 144 | 1. Actualizar un género. 145 | 1. Eliminar un género. 146 | 147 | ### generos_x_peliculas 148 | 149 | 1. Crear un gxp. 150 | 1. Leer los géneros de una película. 151 | 1. Eliminar un gxp. 152 | 153 | ### generos_x_series 154 | 155 | 1. Crear un gxs. 156 | 1. Leer los géneros de una serie. 157 | 1. Eliminar un gxs. 158 | -------------------------------------------------------------------------------- /Modelados/PeliSeries/PeliSeries_ModeloDocumental.json: -------------------------------------------------------------------------------- 1 | { 2 | "peliculas": [ 3 | { 4 | "pelicula_id": "", 5 | "titulo": "", 6 | "estreno": "", 7 | "duracion": "", 8 | "sinopsis": "", 9 | "generos": ["genero 1", "genero 2"], 10 | "estudio": ["estudio 1", "estudio 2"], 11 | "director": ["director 1", "director 2"], 12 | "elenco": ["actor 1", "actor 2", "actor 3"], 13 | "poster": ["poster 1", "poster 2"], 14 | "trailer": ["trailer 1", "trailer 2"], 15 | "pais": ["país 1", "país 2"] 16 | } 17 | ], 18 | "series": [ 19 | { 20 | "serie_id": "", 21 | "titulo": "", 22 | "estreno": "", 23 | "final": "", 24 | "sinopsis": "", 25 | "generos": ["genero 1", "genero 2"], 26 | "estudio": ["estudio 1", "estudio 2"], 27 | "creador": ["creador 1", "creador 2"], 28 | "elenco": ["actor 1", "actor 2", "actor 3"], 29 | "poster": ["poster 1", "poster 2"], 30 | "trailer": ["trailer 1", "trailer 2"], 31 | "pais": ["país 1", "país 2"], 32 | "temporadas": [ 33 | { 34 | "temporada_id": "", 35 | "numero": "", 36 | "estreno": "", 37 | "titulo": "", 38 | "sinopsis": "", 39 | "poster": ["poster 1", "poster 2"], 40 | "trailer": ["trailer 1", "trailer 2"], 41 | "episodios": [ 42 | { 43 | "episodio_id": "", 44 | "numero": "", 45 | "estreno": "", 46 | "titulo": "", 47 | "sinopsis": "", 48 | "director": ["director 1", "director 2"], 49 | "duracion": "" 50 | } 51 | ] 52 | } 53 | ] 54 | } 55 | ] 56 | } 57 | -------------------------------------------------------------------------------- /Modelados/PeliSeries/PeliSeries_ModeloRelacionalBD.drawio: -------------------------------------------------------------------------------- 1 | 7Z1bc5u6Fsc/TWb2fsgZEAHjxzhJ793tpNmn7VOGBsVmDkYu4B1nf/ojrraRwMLmZpZmOtNYxgKkv/RDC621LrSb5eatb60Wn4mN3Quk2JsL7fYCIVVDGv0vKnlNSswJSgrmvmOnB20Lvjn/4rRQSUvXjo2DvQNDQtzQWe0XPhHPw0/hXpnl++Rl/7Bn4u6fdWXNMVPw7cly2dLvjh0uklJDUbbl77AzX6RnnlylXyyt7Ni0IFhYNnnZKdLuLrQbn5Aw+Wu5ucFu1HZZsyS/e1PybXpdQfiaXWl2QT72QpEaFm9/f3x8h3+62P3ifTBN/fn762Va7T+Wu06rXWHXeVq7VsCckN7RKvoztH5FRbMgtPww7UF6bm1G+yS0HA/7tECNP7uutQqc+PCkZOG49ifrlazDrKLs0+zZ2WD7PunA6Fjal59oZdHHqPJnWvm39GKiry3XmXv07yd6+9EZZz4O6LV8soIwPYJtoOxusR/izU5R2mBvMVni0H+lh6TfatPkF6mY1ayGl600VDMtW+zIQtPTH1qpHOd51fnZ7ql8LW9Obyg/nTpR9s9nKsz5skP2Tqfsn81yaZN4VohnZO3Zwa4s6B87N7otisVSQziIEU61Xu6jsTBbEN/5N1KJm/bqrobizy/O0rU8OsYsu1A0I/GcEmvBcd0b4pJIaB7xMKO16CDbJ6sHy5/jMC1YEccL4xbSZ/QfbbMb5T/6hU6v9YZ+Vref6b/ocD+8IV4Q+lTTUR2YSusFR/KahWSVVuri56x+P+2Q6O9fJAzJslSIlWPxsDpTeSBWHXw1KuVi3NNFXRFojAi+fiyVAb3/0LHcrezjCSOaxK1tp3F6ltvWefsWG744TRDanM9uPBEvHNvGnnh/IOH+2OkATWB4HpgMatbWwWC/KqXEI/0dUv54/9cD/e/674cvf/bc/xkWkmNnwcp6crz5p+SXRl8C2ex33e6A1WsO2GrBCFXXgWJ0iQchPCgt4kHvGw+GuAi6mRyw7WT1nTj0deHOGDsbJkwnh064dkmEhf9e39+8u77/Q1f+HDwXOhEDOA6YkgO9c4CziOyWA9PxcsAU7oyxcyAz4O30Mh0EtPliEvy8u74fMwLEdQAOASprY5QM6JoBqto3BNQaFsPBUGDfWCDYN+KdM3omsAZCe+3TaZd4ERQe3n++GzMUaigBHBUQu26UVOicCld9UwHVWCCeNRVyvUsqIHY9GDgeoWMviKlw9+NhzFSooQRwVNDYRaSkQudUmPRNBa3GknEwVBDsjlziEgQauySk42BtO5BeHtTQAzwcsOtHiYOucYCU3nHA7j8ZPg6OWSTkepds0NgdJLbj00umnQYIDuKCgAeHGttLJBzaggNPb93CoYYhcTBwEB3+hnB/jJ4HrKEQu9h72lsqIF0fNw7E9TBmHPx9+/jm8dNb05iunx+ML+HM+RBwPFkkDappwKhIFBDlNDA6pAFXBaxF4VxgcKA3yjU/ahZwb5u1CqxIEDmBjQcFDaoBHAlqWAskCdoiwbRvEtTwQBkBCa5gkoA1AURDwgWPghI5wEOBfIEgxgI1vkmf/A8XLrgtQGhdOi/ztcE+J7w5H+/lo2YFDSYlrthngZWVbDZ6/9fw9xr1I4oxs4LvyMiyYo497JPgcfN4XFQUTbkYY1SUbNdo5mfMdTTmDH21tZcAE7nmE+e8IL8n4u8eM6YL6qA9GbAT/ZgCkuQql6+DJuzKb75ZgY5GUkMdVWxvVC1C1XUhF+lt0vhegfp84L4d6pQP7Evk3pd8LW0lm0h/k7wpWH8TNnzV4EnRgzDAYSKbjCQm+sQE99VRl5jIzJAAMJErXmLCROySIrb/AIREDVmAg8SU1UlkTcbSNEi/yYNNVUZM5tkGlbZm86l8B9i4bTAfA+djG5yyJuIx2Qan0nUobwr+6z7QxsEa8oAHdOlI1Piqrz4gejcOTkfsSDSVjkR5U7A2YI8sf/nR1UJxK60hB3A0UFUeDgw36oSFuqcI4/eaxDMo3oSXaX9d0yPSLtseQP+ap/+7aWd63Joi4l++pA0QVXWlJJOuUjxHvoorP0tUWflZghhUUVUaWm0KFSnP1tP+bx6sBVla7MniDFCRE949duPAflacDyrq3JkV4OzvWyskQXZhtF+Sa9u/XlqcNAxTHLV7VlgYlFG7RD0TLt10moyXtTsj0VrTUydU5i6Do0HgPFnudfrFkg6meFDvM/aWP6i5myb9SJ04gz47KOvHBZwyw0/nzadmW3BUVV4Q58pR0aT8T5U4ujpB4t+cIMTRF4mUv2L34ka7uL5N94MpUT99w76DhyXwdBY6B3nr+0ajK9ZmpLWldr4nFWLfAARpD9ew8Q03KdqBjaIHegvtdxfMrGglwmGNw9WSgbqWFNZi1QAtXUz27lygItbqfEbmxuP6BPH7ZEQrypIbZ03LMS3GbHFsVCFj9jUoaQmZIK2uzbENTnSZIq3kAs83SdpxHaJDhcT4E6U1KgiATJDJ0obAhC7TpZVc4PkmTDuuQ0ygTOCEux9PzrRGpQCPBnVi4EsatEaDThOnlSihhk1xMDjg7Do+qnu08W9TKLlx1oD47CRvV0GSoUwIAMkggx0MggxdJk8rUcI5BrlrjAxAY96pnMD3I8qf1qgWAMJBRjoYBBy6zKFWooRzTK15yhwwgcoD1lw4ujRqjSoCHhWyR1VJhV6p0GkqtRIl1DArDoYKTS0ZkmEAEBFXrAnxyadjdkzJ1BpVBEBESDf5QSCC6yjfLSLOMd3mKXMA0LDYKicu9uhyqjWqCIBUkL7xg6BC74nV1KvzdY8/bg4woFKBtRvK9GpVigBIhRobFCUV2qNC70nW8qANYKgwBUoFnbUbylRrlZKAhwWdtTJKLJQ5Px+fbe0oVvSfb03VWQtj72GVW3Z4TUYERFywNkSZcu2gLAAigzVBhnhJZ1nLrplrbaTBVibF4CecYCtI5fQmMkYfbEWXxknx541TpqsSF93yYCtcRbb4ZMHaJscebEWHap7UWfNkTgwZcEVQJRUPGnXXBAceNESq60I2pmRFf2vTAwDhRGHpGCAmC5CxL01NqAAxWYAUonVBp0aZNOBRw5Bhujp50XUAEJw1aMeAMM4xTFdT26YNqDG7DPaxwFsvsU/OBRQNg6FMCADBgCQYBgAGXnSWrslQY9/8YMhwyhxQ8u5i/DBgX2kBD9ZVJgV4OMgC20sc9IsDTkiWrnEAbEOcDnVDnMHZECfj+ZYLAh4UDBnPdxBQ4IRi6RoK5xjQtzHrEdTovhP2UQB6nK4yLcCDg1njOVHCoTU48CKydP3u+RwjspzQIybUICwmazOWjpVVigBIBRmEZRBU4EiuayoAC8JiQg3CYnI8IKRjZZUkwGEBcRJM4pUTENsh0knmgnWSuRJ1SRi/kwySmSYFHylOc5JJx2jFQrPnJwrEyTQ5cicZBDXZJOIkm8yAIX1kBEUC8DFDvrASR0XDPjKH+NG7jwziZKUcuY8MgpqYMj9ntZMleHLIt1mZXmq8wwBNjtPslocg0bufDIKcqxJBzVWJOLkqIfvJlAoBIBhkrsohgKF/Pxl0lrkqT5kDgKanRJz0lDt+MrfXD3fgcFA/O+VYcSCzUw4CB737ySBg2SkR1OyUiJOdUvrJVAgCHhRkcsphQKF3PxkEOTklgpqcEnGSUwL3kynVAkA4yB3RQ4BD/34yCFhaSgQ1LSXipKW0HZ9eM/RsxaWSAIgFGc53EFjo3VEGActLiaDmpUScvJT22qczLvHiZcL7z+BeLByRkXKsPGCtjHPsYb+mf4ymXIzRPybfGJT5x3A2CqlTzjhXldbm7TqZI0ET/ES/lLL0hFleOEEltAdwTmbJsful6FBNfZwMkck0Lb1SBCVSgXajUckIVdeJZqQFsJOl3gFQGP2DApgBUIdqAOQkhfTI8pePgZv/ygQBkAms+S9d7j1uHuNsPnLdR7/Rs77JnAg5XoR57IK9dV+Ls7jcAtjJuq8s9V/Fuo+nhBaFwNrzRr/ug7oJkBMff74J5KJPUB9VecGbBbxIdV0Ipk4YfdCUOHHRd4ASvEVft5TghNnvPepAh5sCDaiWQk6CrXPL0tmHLgCSQpoHh0CKaf+kYM2DoEgB1VrIydFbfKcEGxX1rYZjRYWA6Qnbc5y1Om1YJ3y9x64VOsS7236T9E3CChVFNAmXbjrGsWdf+37clXf3VCwP5LPlvcYGQXpjOGMJrdt//ZH/hn74GX1DZ/304+1m98jbDDh444Q/dv7e+RX9tP1R9CH7TXKT0Z2VSictCsjaf8IVbahmb3DDjGf04+Lt74+P7/BPF7tfvA+mqT9/f72cHp6P8t0l3C0nftzu/+xfc4X6vkZQ3bF9ZmuXYkzYrIrkXtNfbdXGVGQUKtKKFSVNwVTUnGwFXGU7k20qP7Uf+WXeIMNXXzEicXG+E1ZfoSKtWFHr6hPIXTVk9R070TY6aRqsbI+OONiqbqf6vtwmxQ2AorpVlUJNRrGmtoXLSb9VKVy6yFqQOfEs9xjRLhO9xqtIprQE/UoXiuROj5OJ4DyK+pXjpVp8g2keqcfLQkVIUI60L63XncPSpXvpFaOC6tPw62WXVTg8mym2YyE5f8MjQ8DN+qxGRs8PxbmZ/OD8rqKeB9RE5euz/nPJtDAwJ+2MJ73kgsuuq3h8RyMKdf2Q1OGo6ulZP/cQOPzUJGD7andUFQbD5NinfbNQkdH10/5EwJren5BPefzv72HLFNaxgF9Aqzo2ipPt9EgdFzGjFytqXccCe4Wbe8QRMPOd19yrZs11+InGPOyP2u6KtWCey6VXf8VaqMko1nS0aOlHn5Bw93DfWi0+ExtHR/wf -------------------------------------------------------------------------------- /Modelados/PeliSeries/PeliSeries_ModeloRelacionalBD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jonmircha/youtube-bd/4f0e51f775c511f939750563913214dcb983d593/Modelados/PeliSeries/PeliSeries_ModeloRelacionalBD.png -------------------------------------------------------------------------------- /Modelados/SaintSeiya/SaintSeiya_LogicaNegocios.md: -------------------------------------------------------------------------------- 1 | # Saint Seiya 2 | 3 | ## Listado de Entidades 4 | 5 | ### personajes **(ED)** 6 | 7 | - personaje_id **(PK)** 8 | - nombre 9 | - armadura **(FK)** 10 | - signo **(FK)** 11 | - nacimiento 12 | - pais **(FK)** 13 | - entrenamiento **(FK)** 14 | - maestro **(FK)** 15 | - ejercito **(FK)** 16 | - rango **(FK)** 17 | - foto 18 | - canonico 19 | 20 | ### armduras **(ED|EC)** 21 | 22 | - armadura_id **(PK)** 23 | - armadura 24 | - armadura_tipo **(FK)** 25 | 26 | ### armaduras_tipos **(EC)** 27 | 28 | - armadura_tipo_id **(FK)** 29 | - armadura_tipo 30 | 31 | ### armaduras_versiones **(EC | EP)** 32 | 33 | - armadura_version_id **(PK)** 34 | - armadura_id **(FK)** 35 | - version 36 | - foto 37 | 38 | ### signos **(EC)** 39 | 40 | - signo_id **(PK)** 41 | - signo 42 | 43 | ### paises **(EC)** 44 | 45 | - pais_id **(PK)** 46 | - pais 47 | 48 | ### ejercitos **(EC)** 49 | 50 | - ejercito_id **(PK)** 51 | - ejercito 52 | 53 | ### rangos **(EC)** 54 | 55 | - rango_id **(PK)** 56 | - rango 57 | 58 | ### tecnicas **(EC)** 59 | 60 | - tecnica_id **(PK)** 61 | - tecnica 62 | 63 | ### tecnicas_x_personajes **(EP)** 64 | 65 | - txp_id **(PK)** 66 | - personaje_id **(FK)** 67 | - tecnica_id **(FK)** 68 | 69 | ### franquicias **(EC)** 70 | 71 | - franquicia_id **(PK)** 72 | - franquicia 73 | 74 | ### franquicias_x_personajes **(EP)** 75 | 76 | - fxp_id **(PK)** 77 | - personaje_id **(FK)** 78 | - franquicia_id **(FK)** 79 | 80 | ### medios **(EC)** 81 | 82 | - medio_id **(PK)** 83 | - medio 84 | 85 | ### medios_x_personajes **(EP)** 86 | 87 | - mxp_id **(PK)** 88 | - personaje_id **(FK)** 89 | - medio_id **(FK)** 90 | 91 | ## Relaciones 92 | 93 | 1. Un **personaje** poseé **armadura** (_1 - M_). 94 | 1. Una **armadura** pertenece a un **tipo de armadura** (_1 - M_). 95 | 1. Una **armadura** tiene **versiones** (_1 - M_). 96 | 1. Un **personaje** pertenece a un **signo** (_1 - M_). 97 | 1. Un **personaje** pertenece a un **país** (_1 - M_). 98 | 1. Un **personaje** entrenó en un **país** (_1 - M_). 99 | 1. Un **personaje** tiene un **maestro** (_1 - M_). 100 | 1. Un **personaje** pertenece a un **ejercito** (_1 - M_). 101 | 1. Un **personaje** tiene un **rango** (_1 - M_). 102 | 1. **Personajes** poseén **técnicas** (_M - M_). 103 | 1. **Personajes** pertenecen a **franquicias** (_M - M_). 104 | 1. **Personajes** pertenecen a **medios** (_M - M_). 105 | 106 | ### Modelo Relacional de la BD 107 | 108 | ![Modelo Relacional](SaintSeiya_ModeloRelacionalBD.png) 109 | 110 | ## Reglas de Negocio 111 | 112 | ### personajes 113 | 114 | 1. Crear un personaje. 115 | 1. Leer todos los personajes. 116 | 1. Leer un personaje en particular. 117 | 1. Actualizar un personaje. 118 | 1. Eliminar un personaje. 119 | 120 | ### armaduras 121 | 122 | 1. Crear una armadura. 123 | 1. Leer todas las armaduras. 124 | 1. Leer una armadura en particular. 125 | 1. Actualizar una armadura. 126 | 1. Eliminar una armadura. 127 | 128 | ### armaduras_tipos 129 | 130 | 1. Crear una armadura_tipo. 131 | 1. Leer todas las armaduras_tipos. 132 | 1. Leer una armadura_tipo en particular. 133 | 1. Actualizar una armadura_tipo. 134 | 1. Eliminar una armadura_tipo. 135 | 136 | ### armaduras_versiones 137 | 138 | 1. Crear una armadura_version. 139 | 1. Leer todas las armaduras_versiones. 140 | 1. Leer una armadura_version en particular. 141 | 1. Actualizar una armadura_version. 142 | 1. Eliminar una armadura_version. 143 | 144 | ### signos 145 | 146 | 1. Crear un signo. 147 | 1. Leer todos los signos. 148 | 1. Leer un signo en particular. 149 | 1. Actualizar un signo. 150 | 1. Eliminar un signo. 151 | 152 | ### paises 153 | 154 | 1. Crear un país. 155 | 1. Leer todos los países. 156 | 1. Leer un país en particular. 157 | 1. Actualizar un país. 158 | 1. Eliminar un país. 159 | 160 | ### ejercitos 161 | 162 | 1. Crear un ejercito. 163 | 1. Leer todos los ejercitos. 164 | 1. Leer un ejercito en particular. 165 | 1. Actualizar un ejercito. 166 | 1. Eliminar un ejercito. 167 | 168 | ### rangos 169 | 170 | 1. Crear un rango. 171 | 1. Leer todos los rangos. 172 | 1. Leer un rango en particular. 173 | 1. Actualizar un rango. 174 | 1. Eliminar un rango. 175 | 176 | ### tecnicas 177 | 178 | 1. Crear una técnica. 179 | 1. Leer todas las técnicas. 180 | 1. Leer una técnica en particular. 181 | 1. Actualizar una técnica. 182 | 1. Eliminar una técnica. 183 | 184 | ### tecnicas_x_personajes 185 | 186 | 1. Crear un txp. 187 | 1. Leer las técnicas de un personaje. 188 | 1. Eliminar un txp. 189 | 190 | ### franquicias 191 | 192 | 1. Crear una franquicia. 193 | 1. Leer todas las franquicias. 194 | 1. Leer una franquicia en particular. 195 | 1. Actualizar una franquicia. 196 | 1. Eliminar una franquicia. 197 | 198 | ### franquicias_x_personajes 199 | 200 | 1. Crear un fxp. 201 | 1. Leer las franquicias de un personaje. 202 | 1. Eliminar un fxp. 203 | 204 | ### medios 205 | 206 | 1. Crear un medio. 207 | 1. Leer todos los medios. 208 | 1. Leer un medio en particular. 209 | 1. Actualizar un medio. 210 | 1. Eliminar un medio. 211 | 212 | ### medios_x_personajes 213 | 214 | 1. Crear un mxp. 215 | 1. Leer los medios de un personaje. 216 | 1. Eliminar un mxp. 217 | -------------------------------------------------------------------------------- /Modelados/SaintSeiya/SaintSeiya_ModeloDocumental.json: -------------------------------------------------------------------------------- 1 | { 2 | "personajes": [ 3 | { 4 | "personaje_id": "", 5 | "nombre": "", 6 | "armadura": ["armadura 1", "armadura 2"], 7 | "signo": "", 8 | "nacimiento": "", 9 | "pais": "", 10 | "entrenamiento": "", 11 | "maestro": ["maestro 1", "maestro 2"], 12 | "ejercito": ["ejercito 1", "ejercito 2"], 13 | "rango": ["rango 1", "rango 2"], 14 | "foto": ["foto 1", "foto 2", "foto 3"], 15 | "canonico": "", 16 | "tecnicas": ["técnica 1", "técnica 2", "técnica 3"], 17 | "franquicias": ["franquicia 1", "franquicia 2", "franquicia 3"], 18 | "medios": ["medio 1", "medio 2", "medio 3"] 19 | } 20 | ], 21 | "armaduras": [ 22 | { 23 | "armadura_id": "", 24 | "armadura": "", 25 | "armadura_tipo": "", 26 | "versiones": [ 27 | { 28 | "nombre": "versión 1", 29 | "foto": ["foto versión 1", "foto versión 2"] 30 | }, 31 | { 32 | "nombre": "versión 2", 33 | "foto": "foto versión 2" 34 | }, 35 | { 36 | "nombre": "versión 3", 37 | "foto": "foto versión 3" 38 | } 39 | ], 40 | "portadores": [ 41 | { "nombre": "portador 1", "foto": "foto portador 1" }, 42 | { "nombre": "portador 2", "foto": "foto portador 2" }, 43 | { "nombre": "portador 3", "foto": "foto portador 3" }, 44 | { "nombre": "portador 4", "foto": "foto portador 4" } 45 | ] 46 | } 47 | ] 48 | } 49 | -------------------------------------------------------------------------------- /Modelados/SaintSeiya/SaintSeiya_ModeloRelacionalBD.drawio: -------------------------------------------------------------------------------- 1 | 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 -------------------------------------------------------------------------------- /Modelados/SaintSeiya/SaintSeiya_ModeloRelacionalBD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jonmircha/youtube-bd/4f0e51f775c511f939750563913214dcb983d593/Modelados/SaintSeiya/SaintSeiya_ModeloRelacionalBD.png -------------------------------------------------------------------------------- /Modelados/Ventas/Ventas_CorridaDatos.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jonmircha/youtube-bd/4f0e51f775c511f939750563913214dcb983d593/Modelados/Ventas/Ventas_CorridaDatos.xlsx -------------------------------------------------------------------------------- /Modelados/Ventas/Ventas_LogicaNegocio.md: -------------------------------------------------------------------------------- 1 | # Ventas 2 | 3 | ## Listado de Entidades 4 | 5 | ### clientes **(ED)** 6 | 7 | - cliente_id **(PK)** 8 | - nombre 9 | - apellidos 10 | - telefono **(UQ)** 11 | - email **(UQ)** 12 | - direccion 13 | - cp 14 | - ciudad 15 | - pais **(FK)** 16 | 17 | ### productos **(ED|EC)** 18 | 19 | - producto_id **(PK)** 20 | - nombre 21 | - descripcion 22 | - foto 23 | - precio 24 | - cantidad 25 | 26 | ### ventas **(ED)** 27 | 28 | - venta_id **(PK)** 29 | - cliente_id **(FK)** 30 | - fecha 31 | - monto 32 | 33 | ### articulos_x_venta **(EP)** 34 | 35 | - articulo_id **(PK)** 36 | - venta_id **(FK)** 37 | - producto_id **(FK)** 38 | - cantidad 39 | 40 | ### paises **(EC)** 41 | 42 | - pais_id **(PK)** 43 | - nombre 44 | - dominio **(UQ)** 45 | 46 | ## Relaciones 47 | 48 | 1. Un **cliente** tiene **país** (_1 - M_). 49 | 1. Un **cliente** genera **venta** (_1 - M_). 50 | 1. Una **venta** tiene **artículo** (_1 - M_). 51 | 1. Un **artículo** es un **producto** (_1 - 1_). 52 | 53 | ## Diagramas 54 | 55 | ### Modelo Relacional de la BD 56 | 57 | ![Modelo Relacional](Ventas_ModeloRelacionalBD.png) 58 | 59 | ## Reglas de Negocio 60 | 61 | ### clientes 62 | 63 | 1. Crear un cliente. 64 | 1. Leer todos los clientes. 65 | 1. Leer un cliente en particular. 66 | 1. Actualizar un cliente. 67 | 1. Eliminar un cliente. 68 | 69 | ### productos 70 | 71 | 1. Crear un producto. 72 | 1. Leer todos los productos. 73 | 1. Leer un producto en particular. 74 | 1. Actualizar un producto. 75 | 1. Eliminar un producto. 76 | 1. Cada que haya una venta restar a la cantidad de productos disponibles, el número de artículos que se vendieron. 77 | 78 | ### ventas 79 | 80 | 1. Crear una venta. 81 | 1. Leer todas las ventas. 82 | 1. Leer una venta en particular. 83 | 1. Leer todas las ventas de un cliente. 84 | 1. Leer todas las ventas de un producto. 85 | 1. Actualizar una venta. 86 | 1. Eliminar una venta. 87 | 88 | ### articulos_x_venta 89 | 90 | 1. Crear un artículo. 91 | 1. Leer todos los artículos. 92 | 1. Leer un artículo en particular. 93 | 1. Leer todos los artículos de una venta. 94 | 1. Leer todos los artículos de un producto. 95 | 1. Leer todos los artículos de un cliente. 96 | 1. Actualizar un artículo. 97 | 1. Eliminar un artículo. 98 | 99 | ### paises 100 | 101 | 1. Crear un pais. 102 | 1. Leer todos los paises. 103 | 1. Leer un país en particular. 104 | 1. Actualizar un país. 105 | 1. Eliminar un país. 106 | -------------------------------------------------------------------------------- /Modelados/Ventas/Ventas_ModeloRelacionalBD.drawio: -------------------------------------------------------------------------------- 1 | 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 -------------------------------------------------------------------------------- /Modelados/Ventas/Ventas_ModeloRelacionalBD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jonmircha/youtube-bd/4f0e51f775c511f939750563913214dcb983d593/Modelados/Ventas/Ventas_ModeloRelacionalBD.png -------------------------------------------------------------------------------- /NoSQL/Cassandra.sql: -------------------------------------------------------------------------------- 1 | HELP; 2 | DESC KEYSPACES; 3 | USE KEYSPACE_NAME; 4 | DESC TABLES; 5 | 6 | 7 | 8 | CREATE TABLE users ( 9 | user_id UUID PRIMARY KEY, 10 | username TEXT, 11 | email TEXT, 12 | password TEXT, 13 | full_name TEXT 14 | ); 15 | 16 | CREATE TABLE user_posts ( 17 | user_id UUID, 18 | post_id UUID, 19 | post_content TEXT, 20 | created_at TIMESTAMP, 21 | PRIMARY KEY (user_id, post_id) 22 | ); 23 | 24 | CREATE TABLE user_followers ( 25 | user_id UUID, 26 | follower_id UUID, 27 | follower_username TEXT, 28 | PRIMARY KEY (user_id, follower_id) 29 | ); 30 | 31 | 32 | 33 | INSERT INTO users (user_id, username, email, password, full_name) 34 | VALUES (uuid(), 'john_doe', 'john@example.com', 'mypassword', 'John Doe'); 35 | 36 | INSERT INTO users (user_id, username, email, password, full_name) 37 | VALUES (uuid(), 'jane_smith', 'jane@example.com', 'secret123', 'Jane Smith'); 38 | 39 | INSERT INTO users (user_id, username, email, password, full_name) 40 | VALUES (uuid(), 'alex_wilson', 'alex@example.com', 'alexpass', 'Alex Wilson'); 41 | 42 | INSERT INTO users (user_id, username, email, password, full_name) 43 | VALUES (uuid(), 'lisa_johnson', 'lisa@example.com', 'lisa123', 'Lisa Johnson'); 44 | 45 | INSERT INTO users (user_id, username, email, password, full_name) 46 | VALUES (uuid(), 'michael_brown', 'michael@example.com', 'michaelpass', 'Michael Brown'); 47 | 48 | 49 | 50 | INSERT INTO user_posts (user_id, post_id, post_content, created_at) 51 | VALUES (, uuid(), '¡Hola a todos!', toTimestamp(now())); 52 | 53 | INSERT INTO user_posts (user_id, post_id, post_content, created_at) 54 | VALUES (, uuid(), 'Estoy emocionado de unirme a esta comunidad.', toTimestamp(now())); 55 | 56 | INSERT INTO user_posts (user_id, post_id, post_content, created_at) 57 | VALUES (, uuid(), 'Hoy es un hermoso día.', toTimestamp(now())); 58 | 59 | INSERT INTO user_posts (user_id, post_id, post_content, created_at) 60 | VALUES (, uuid(), 'Compartiendo mi última experiencia de viaje.', toTimestamp(now())); 61 | 62 | INSERT INTO user_posts (user_id, post_id, post_content, created_at) 63 | VALUES (, uuid(), '¡Feliz cumpleaños a mí!', toTimestamp(now())); 64 | 65 | 66 | 67 | INSERT INTO user_posts (user_id, post_id, post_content, created_at) 68 | VALUES (, uuid(), '¡Hola a todos!', toTimestamp(now())); 69 | 70 | INSERT INTO user_posts (user_id, post_id, post_content, created_at) 71 | VALUES (e621f01d-b422-4de4-94e2-772eb1d7d1ae, uuid(), '¡Hola a todos!', toTimestamp(now())); 72 | 73 | INSERT INTO user_posts (user_id, post_id, post_content, created_at) 74 | VALUES (, uuid(), 'Estoy emocionado de unirme a esta comunidad.', toTimestamp(now())); 75 | INSERT INTO user_posts (user_id, post_id, post_content, created_at) 76 | VALUES (e621f01d-b422-4de4-94e2-772eb1d7d1ae, uuid(), 'Estoy emocionado de unirme a esta comunidad.', toTimestamp(now())); 77 | 78 | INSERT INTO user_posts (user_id, post_id, post_content, created_at) 79 | VALUES (, uuid(), 'Hoy es un hermoso día.', toTimestamp(now())); 80 | 81 | INSERT INTO user_posts (user_id, post_id, post_content, created_at) 82 | VALUES (, uuid(), 'Compartiendo mi última experiencia de viaje.', toTimestamp(now())); 83 | 84 | INSERT INTO user_posts (user_id, post_id, post_content, created_at) 85 | VALUES (, uuid(), '¡Feliz cumpleaños a mí!', toTimestamp(now())); 86 | 87 | 88 | 89 | INSERT INTO user_followers (user_id, follower_id, follower_username) 90 | VALUES (, uuid(), 'jane_smith'); 91 | 92 | INSERT INTO user_followers (user_id, follower_id, follower_username) 93 | VALUES (, uuid(), 'alex_wilson'); 94 | 95 | INSERT INTO user_followers (user_id, follower_id, follower_username) 96 | VALUES (, uuid(), 'john_doe'); 97 | 98 | INSERT INTO user_followers (user_id, follower_id, follower_username) 99 | VALUES (, uuid(), 'michael_brown'); 100 | 101 | INSERT INTO user_followers (user_id, follower_id, follower_username) 102 | VALUES (, uuid(), 'jane_smith'); 103 | 104 | 105 | 106 | SELECT * FROM users; 107 | 108 | SELECT * FROM users WHERE user_id = 0feda1aa-4e53-4242-b523-ae16567b2dbe; 109 | SELECT * FROM users WHERE username = 'john_doe'; 110 | 111 | SELECT * FROM users WHERE username = 'john_doe' LIMIT 200 ALLOW FILTERING; 112 | 113 | UPDATE users SET email = 'newemail@example.com' WHERE user_id = ; 114 | 115 | DELETE FROM users WHERE user_id = ; 116 | -------------------------------------------------------------------------------- /NoSQL/Mongo.js: -------------------------------------------------------------------------------- 1 | //Comandos 2 | show dbs 3 | use db_name 4 | show collections 5 | 6 | //Modelo de Datos 7 | 8 | //Colección de Libros 9 | db.books.insertMany([ 10 | { 11 | _id: ObjectId("6152f6d15e91ab001c3ce336"), 12 | title: "El Gran Gatsby", 13 | author: "F. Scott Fitzgerald", 14 | publishedYear: 1925, 15 | genres: ["Ficción", "Clásico"], 16 | price: 12.99 17 | }, 18 | { 19 | _id: ObjectId("6152f6d15e91ab001c3ce338"), 20 | title: "1984", 21 | author: "George Orwell", 22 | publishedYear: 1949, 23 | genres: ["Ficción", "Distopía"], 24 | price: 9.99 25 | }, 26 | { 27 | _id: ObjectId("6152f6d15e91ab001c3ce33a"), 28 | title: "Orgullo y prejuicio", 29 | author: "Jane Austen", 30 | publishedYear: 1813, 31 | genres: ["Ficción", "Romance"], 32 | price: 10.99 33 | } 34 | ]) 35 | 36 | 37 | 38 | //Colección de Autores 39 | db.authors.insertMany([ 40 | { 41 | _id: ObjectId("6152f6d15e91ab001c3ce337"), 42 | name: "F. Scott Fitzgerald", 43 | nationality: "Estadounidense", 44 | birthDate: ISODate("1896-09-24"), 45 | books: [ 46 | ObjectId("6152f6d15e91ab001c3ce336"), 47 | ObjectId("6152f6d15e91ab001c3ce339") 48 | ] 49 | }, 50 | { 51 | _id: ObjectId("6152f6d15e91ab001c3ce33b"), 52 | name: "George Orwell", 53 | nationality: "Británico", 54 | birthDate: ISODate("1903-06-25"), 55 | books: [ 56 | ObjectId("6152f6d15e91ab001c3ce338") 57 | ] 58 | }, 59 | { 60 | _id: ObjectId("6152f6d15e91ab001c3ce33c"), 61 | name: "Jane Austen", 62 | nationality: "Británica", 63 | birthDate: ISODate("1775-12-16"), 64 | books: [ 65 | ObjectId("6152f6d15e91ab001c3ce33a") 66 | ] 67 | } 68 | ]) 69 | 70 | //CRUD 71 | 72 | db.books.insertOne({ 73 | title: "Nuevo Libro", 74 | author: "Autor Desconocido", 75 | publishedYear: 2023, 76 | genres: ["Ficción", "Misterio"], 77 | price: 14.99 78 | }) 79 | db.books.find() 80 | db.books.findOne({ title: "El Gran Gatsby" }) 81 | db.books.updateOne({ title: "El Gran Gatsby" }, { $set: { price: 11.99 } }) 82 | db.books.deleteOne({ title: "Nuevo Libro" }) 83 | 84 | db.authors.insertOne({ 85 | name: "Nuevo Autor", 86 | nationality: "Desconocida", 87 | birthDate: new Date("1990-01-01"), 88 | books: [] 89 | }) 90 | db.authors.findOne({ name: "F. Scott Fitzgerald" }) 91 | db.authors.updateOne({ name: "F. Scott Fitzgerald" }, { $set: { nationality: "Estadounidense" } }) 92 | db.authors.deleteOne({ name: "Nuevo Autor" }) 93 | -------------------------------------------------------------------------------- /NoSQL/Neo4j.cyp: -------------------------------------------------------------------------------- 1 | CREATE (:User {name: 'Jon', age: 39}) 2 | CREATE (:Movie {title: 'Inception', genre: 'Thriller'}) 3 | MATCH (u:User {name: 'Jon'}), (m:Movie {title: 'Inception'}) 4 | CREATE (u)-[:HAS_SEEN]->(m) 5 | 6 | 7 | 8 | CREATE (:User {name: 'Alice', age: 30}) 9 | CREATE (:User {name: 'Bob', age: 28}) 10 | CREATE (:Movie {title: 'The Shawshank Redemption', genre: 'Drama'}) 11 | CREATE (:Movie {title: 'Pulp Fiction', genre: 'Crime'}) 12 | 13 | MATCH (u:User {name: 'Jon'}), (m:Movie {title: 'The Shawshank Redemption'}) 14 | CREATE (u)-[:HAS_SEEN]->(m) 15 | MATCH (u:User {name: 'Jon'}), (m:Movie {title: 'Pulp Fiction'}) 16 | CREATE (u)-[:HAS_SEEN]->(m) 17 | MATCH (u:User {name: 'Alice'}), (m:Movie {title: 'The Shawshank Redemption'}) 18 | CREATE (u)-[:HAS_SEEN]->(m) 19 | MATCH (u:User {name: 'Bob'}), (m:Movie {title: 'Pulp Fiction'}) 20 | CREATE (u)-[:HAS_SEEN]->(m) 21 | 22 | 23 | 24 | CREATE (:User {name: 'kEnAi', age: 10}) 25 | 26 | MATCH (u:User {name: 'kEnAi'}) 27 | RETURN u 28 | 29 | MATCH (u:User {name: 'kEnAi'}) 30 | SET u.age = 11 31 | 32 | MATCH (u:User {name: 'kEnAi'}) 33 | DETACH DELETE u 34 | 35 | 36 | CREATE (:Movie {title: 'Inception', genre: 'Thriller'}) 37 | MATCH (m:Movie {title: 'Inception'}) 38 | RETURN m 39 | 40 | MATCH (m:Movie {title: 'Inception'}) 41 | SET m.genre = 'Sci-Fi' 42 | 43 | MATCH (m:Movie {title: 'Inception'}) 44 | DETACH DELETE m 45 | -------------------------------------------------------------------------------- /NoSQL/Redis.sh: -------------------------------------------------------------------------------- 1 | HSET user:1 name "John Doe" age 30 location "New York" 2 | HSET user:2 name "Jane Smith" age 25 location "London" 3 | 4 | LPUSH user:1:posts 1001 5 | LPUSH user:1:posts 1002 6 | LPUSH user:2:posts 2001 7 | 8 | HSET post:1001 content "¡Hola a todos!" created_at "2023-05-10 10:00:00" likes 10 9 | HSET post:1002 content "Feliz cumpleaños a mí" created_at "2023-05-09 15:30:00" likes 20 10 | HSET post:2001 content "¡Gran día en la playa!" created_at "2023-05-08 12:45:00" likes 15 11 | 12 | 13 | 14 | HSET user:3 name "Sarah Johnson" age 35 location "San Francisco" 15 | 16 | HGETALL user:1 17 | HGET user:1 name 18 | 19 | HSET user:2 age 26 20 | DEL user:3 21 | 22 | LPUSH user:1:posts 1003 23 | HSET post:1003 content "un comentartio más" created_at "2023-05-09 15:30:00" likes 15 24 | 25 | HGETALL post:1001 26 | 27 | HSET post:1002 likes 30 28 | DEL post:1003 -------------------------------------------------------------------------------- /NormalizacionBD.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jonmircha/youtube-bd/4f0e51f775c511f939750563913214dcb983d593/NormalizacionBD.xlsx -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Cursos de Bases de Datos 2 | 3 | Hola soy tu amigo y docente digital Jonathan MirCha, bienvenid@s a mis cursos de Bases de Datos. 4 | 5 | En este repositorio encontrarás los recursos de mis cursos de [Bases de Datos](https://www.youtube.com/playlist?list=PLvq-jIkSeTUbxupWtqWZI-agsR-b3S9_5). 6 | 7 | 1. [Curso Diseño de Bases de Datos](https://www.youtube.com/watch?v=HXE169-n5pM). 8 | 1. [Curso Modelado de Bases de Datos](https://www.youtube.com/watch?v=aFgHVE_Y_YU). 9 | 1. [Curso _SQL_](https://www.youtube.com/watch?v=UAuZvxPTi58). 10 | 1. [Curso _NoSQL_](https://www.youtube.com/watch?v=3MWt3CCjHG8). 11 | 12 | ## Recursos Teóricos 13 | 14 | - [Mapa Mental Bases de Datos](https://www.figma.com/file/Af7NoQC3xp7cu6unD7OqQl/Bases-de-Datos). 15 | - [Artículo sobre Bases de Datos](https://jonmircha.com/bd). 16 | - [Artículo sobre _SQL_](https://jonmircha.com/sql). 17 | - [Artículo sobre _NoSQL_](https://jonmircha.com/nosql). 18 | 19 | ## Mis Redes Sociales 20 | 21 | - 🔔 Suscríbete al canal https://youtube.com/jonmircha?sub_confirmation=1 🤓 22 | - 👉 Visita mi sitio web https://jonmircha.com/ 💻 23 | - 🌮 ¿Me invítas un taco? https://www.paypal.me/jonmircha 24 | -------------------------------------------------------------------------------- /SQL/Script01_ComandosBasicos.sql: -------------------------------------------------------------------------------- 1 | -- Comentario en una línea en SQL 2 | 3 | /* 4 | Este es un comentario 5 | de varias 6 | líneas 7 | 8 | SQL, NO distingue entre MÁYUSCULAS y minúsculas pero: 9 | 10 | - Comandos y palabras reservadas de SQL van en MÁYUSCULAS. 11 | - Nombres de objetos y datos van en minúsculas con _snake_case_. 12 | - Para strings usar comillas simples ( `''` ). 13 | - Todas las sentencias terminan con punto y coma ( `;` ). 14 | */ 15 | 16 | SHOW DATABASES; 17 | 18 | CREATE DATABASE curso_sql; 19 | 20 | CREATE DATABASE IF NOT EXISTS curso_sql; 21 | 22 | DROP DATABASE curso_sql; 23 | 24 | DROP DATABASE IF EXISTS curso_sql; 25 | 26 | CREATE DATABASE para_jonmircha; 27 | 28 | CREATE USER 'jonmircha'@'localhost' IDENTIFIED BY 'qwerty'; 29 | 30 | GRANT ALL PRIVILEGES ON para_jonmircha TO 'jonmircha'@'localhost'; 31 | 32 | FLUSH PRIVILEGES; 33 | 34 | SHOW GRANTS FOR 'jonmircha'@'localhost'; 35 | 36 | REVOKE ALL, GRANT OPTION FROM 'jonmircha'@'localhost'; 37 | 38 | DROP USER 'jonmircha'@'localhost'; 39 | 40 | USE curso_sql; 41 | 42 | SHOW TABLES; 43 | 44 | DESCRIBE usuarios; 45 | 46 | CREATE TABLE usuarios( 47 | nombre VARCHAR(50), 48 | correo VARCHAR(50) 49 | ); 50 | 51 | ALTER TABLE usuarios ADD COLUMN cumpleaños VARCHAR(15); 52 | 53 | ALTER TABLE usuarios MODIFY cumpleaños DATE; 54 | 55 | ALTER TABLE usuarios RENAME COLUMN cumpleaños TO nacimiento; 56 | 57 | ALTER TABLE usuarios DROP COLUMN nacimiento; 58 | 59 | DROP TABLE usuarios; 60 | 61 | CREATE TABLE usuarios( 62 | usuario_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, 63 | nombre VARCHAR(30) NOT NULL, 64 | apellidos VARCHAR(30) NOT NULL, 65 | correo VARCHAR(50) UNIQUE, 66 | direccion VARCHAR(100) DEFAULT "Sin dirección", 67 | edad INT DEFAULT 0 68 | ); 69 | 70 | INSERT INTO usuarios VALUES (0,"Jon","MirCha","jonmircha@gmail.com","dirección de mircha", 38); 71 | 72 | INSERT INTO usuarios (apellidos, edad, nombre) VALUES ("MirCha", 10, "kEnAi"); 73 | 74 | INSERT INTO usuarios SET nombre = "Irma", apellidos = "Campos", edad = 38; 75 | 76 | INSERT INTO usuarios (nombre, apellidos, correo, edad) VALUES 77 | ("Pepito", "Perez", "pepito@gmail.com", 28), 78 | ("Rosita", "Juárez", "rosita@gmail.com", 19), 79 | ("Macario", "Guzman", "macario@gmail.com", 55); 80 | 81 | SELECT * FROM usuarios; 82 | 83 | SELECT nombre, edad, usuario_id FROM usuarios; 84 | 85 | SELECT COUNT(*) FROM usuarios; 86 | 87 | SELECT COUNT(*) AS total_usuarios FROM usuarios; 88 | 89 | SELECT * FROM usuarios WHERE nombre = "Jon"; 90 | 91 | SELECT * FROM usuarios WHERE nombre IN ("Jon", "kEnAi", "Irma"); 92 | 93 | SELECT * FROM usuarios WHERE apellidos LIKE 'M%'; 94 | 95 | SELECT * FROM usuarios WHERE correo LIKE '%@gmail.com'; 96 | 97 | SELECT * FROM usuarios WHERE nombre LIKE '%it%'; 98 | 99 | SELECT * FROM usuarios WHERE apellidos NOT LIKE 'M%'; 100 | 101 | SELECT * FROM usuarios WHERE correo NOT LIKE '%@gmail.com'; 102 | 103 | SELECT * FROM usuarios WHERE nombre NOT LIKE '%it%'; 104 | 105 | SELECT * FROM usuarios WHERE edad != 38; 106 | SELECT * FROM usuarios WHERE edad <> 38; 107 | 108 | SELECT * FROM usuarios WHERE edad = 38; 109 | 110 | SELECT * FROM usuarios WHERE edad > 38; 111 | 112 | SELECT * FROM usuarios WHERE edad >= 38; 113 | 114 | SELECT * FROM usuarios WHERE edad < 38; 115 | 116 | SELECT * FROM usuarios WHERE edad <= 38; 117 | 118 | SELECT * FROM usuarios WHERE NOT direccion = 'Sin dirección'; 119 | 120 | SELECT * FROM usuarios WHERE direccion != 'Sin dirección' AND edad >= 38; 121 | 122 | SELECT * FROM usuarios WHERE direccion != 'Sin dirección' AND edad >= 38 AND nombre = "Jon"; 123 | 124 | SELECT * FROM usuarios WHERE direccion != 'Sin dirección' AND edad >= 38; 125 | 126 | UPDATE usuarios SET correo = "irma@gmail.com", direccion = "Dirección de Irma" WHERE usuario_id = 3; 127 | 128 | -- CUIDADO toda sentencia UPDATE debe llevar su claúsula WHERE 129 | UPDATE usuarios SET direccion = "nueva dirección"; 130 | 131 | DELETE FROM usuarios WHERE usuario_id = 6; 132 | 133 | -- CUIDADO toda sentencia DELETE debe llevar su claúsula WHERE 134 | -- NO TE OLVIDES DEL WHERE EN EL DELETE FROM 135 | -- https://www.youtube.com/watch?v=i_cVJgIz_Cs 136 | DELETE FROM usuarios; 137 | 138 | TRUNCATE TABLE usuarios; 139 | 140 | -------------------------------------------------------------------------------- /SQL/Script02_FuncionesBasicas.sql: -------------------------------------------------------------------------------- 1 | CREATE DATABASE curso_sql; 2 | 3 | DROP DATABASE curso_sql; 4 | 5 | USE curso_sql; 6 | 7 | SHOW TABLES; 8 | 9 | CREATE TABLE usuarios( 10 | usuario_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, 11 | nombre VARCHAR(30) NOT NULL, 12 | apellidos VARCHAR(30) NOT NULL, 13 | correo VARCHAR(50) UNIQUE, 14 | edad INT DEFAULT 0 15 | ); 16 | 17 | INSERT INTO usuarios (nombre, apellidos, correo, edad) VALUES 18 | ("Jon","MirCha","jonmircha@gmail.com", 38), 19 | ("kEnAi","MirCha","kenai@gmail.com", 10), 20 | ("Irma","Campos","irma@outlook.com", 38), 21 | ("Pepito", "Perez", "pepito@hotmail.com", 28), 22 | ("Rosita", "Juárez", "rosita@yahoo.com", 19), 23 | ("Macario", "Guzman", "macario@outlook.com", 55); 24 | 25 | CREATE TABLE productos ( 26 | producto_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, 27 | nombre VARCHAR(50) NOT NULL, 28 | descripcion VARCHAR(50), 29 | precio DECIMAL(7,2), 30 | cantidad INT UNSIGNED 31 | ); 32 | 33 | INSERT INTO productos (nombre, descripcion, precio, cantidad) VALUES 34 | ("Computadora", "Macbook Air M2", 29999.99, 5), 35 | ("Celular", "Nothing Phone 1", 11999.99, 15), 36 | ("Cámara Web", "Logitech C920", 1500, 13), 37 | ("Micrófono", "Blue Yeti", 2500, 19), 38 | ("Audífonos", "Audífonos Bose", 6500, 10); 39 | 40 | SELECT * FROM usuarios; 41 | SELECT * FROM productos; 42 | 43 | DROP TABLE usuarios; 44 | DROP TABLE productos; 45 | 46 | TRUNCATE TABLE usuarios; 47 | TRUNCATE TABLE productos; 48 | 49 | 50 | # Cálculos Aritméticos 51 | SELECT 6 + 5 AS calculo; 52 | SELECT 6 - 5 AS calculo; 53 | SELECT 6 * 5 AS calculo; 54 | SELECT 6 / 5 AS calculo; 55 | 56 | 57 | # Funciones Matemáticas 58 | SELECT MOD(4,2); 59 | SELECT MOD(5,2); 60 | SELECT CEILING(7.1); 61 | SELECT FLOOR(7.9); 62 | SELECT ROUND(7.5); 63 | SELECT ROUND(7.4999); 64 | SELECT POWER(2, 6); 65 | SELECT SQRT(81); 66 | 67 | # Columnas Calculadas 68 | SELECT nombre, precio, cantidad, (precio * cantidad) AS ganancia FROM productos; 69 | 70 | # Funciones de Agrupamiento 71 | SELECT MAX(precio) AS precio_maximo FROM productos; 72 | SELECT MIN(precio) AS precio_minimo FROM productos; 73 | SELECT SUM(cantidad) AS existencias FROM productos; 74 | SELECT AVG(precio) AS precio_promedio FROM productos; 75 | SELECT COUNT(*) AS productos_total FROM productos; 76 | 77 | SELECT nombre, precio, MAX(precio) AS precio_maximo FROM productos GROUP BY precio, nombre; 78 | 79 | CREATE TABLE caballeros ( 80 | caballero_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, 81 | nombre VARCHAR(30), 82 | armadura VARCHAR(30), 83 | rango VARCHAR(30), 84 | signo VARCHAR(30), 85 | ejercito VARCHAR(30), 86 | pais VARCHAR(30) 87 | ); 88 | 89 | INSERT INTO caballeros VALUES 90 | (0,"Seiya","Pegaso","Bronce","Sagitario","Athena","Japón"), 91 | (0,"Shiryu","Dragón","Bronce","Libra","Athena","Japón"), 92 | (0,"Hyoga","Cisne","Bronce","Acuario","Athena","Rusia"), 93 | (0,"Shun","Andromeda","Bronce","Virgo","Athena","Japón"), 94 | (0,"Ikki","Fénix","Bronce","Leo","Athena","Japón"), 95 | (0,"Kanon","Géminis","Oro","Géminis","Athena","Grecia"), 96 | (0,"Saga","Géminis","Oro","Géminis","Athena","Grecia"), 97 | (0,"Camus","Acuario","Oro","Acuario","Athena","Francia"), 98 | (0,"Rhadamanthys","Wyvern","Espectro","Escorpión","Hades","Inglaterra"), 99 | (0,"Kanon","Dragón Marino","Marino","Géminis","Poseidón","Grecia"), 100 | (0,"Kagaho","Bennu","Espectro","Leo","Hades","Rusia"); 101 | 102 | SELECT * FROM caballeros; 103 | 104 | SELECT signo, COUNT(*) AS total FROM caballeros GROUP BY signo; 105 | SELECT armadura, COUNT(*) AS total FROM caballeros GROUP BY armadura; 106 | SELECT rango, COUNT(*) AS total FROM caballeros GROUP BY rango; 107 | SELECT pais, COUNT(*) AS total FROM caballeros GROUP BY pais; 108 | SELECT ejercito, COUNT(*) AS total FROM caballeros GROUP BY ejercito; 109 | 110 | SELECT rango, COUNT(*) AS total FROM caballeros WHERE ejercito = "Athena" GROUP BY rango; 111 | 112 | SELECT rango, COUNT(*) AS total FROM caballeros WHERE ejercito = "Athena" GROUP BY rango HAVING total >= 4; 113 | 114 | SELECT nombre, precio, MAX(precio) AS precio_maximo FROM productos GROUP BY precio, nombre HAVING precio_maximo >= 10000; 115 | 116 | SELECT DISTINCT signo FROM caballeros; 117 | SELECT DISTINCT armadura FROM caballeros; 118 | SELECT DISTINCT ejercito FROM caballeros; 119 | SELECT DISTINCT rango FROM caballeros; 120 | SELECT DISTINCT pais FROM caballeros; 121 | 122 | SELECT * FROM caballeros ORDER BY nombre ASC; 123 | 124 | SELECT * FROM caballeros ORDER BY nombre DESC; 125 | 126 | SELECT * FROM caballeros ORDER BY nombre, signo DESC; 127 | 128 | SELECT * FROM caballeros ORDER BY nombre, armadura; 129 | 130 | SELECT * FROM caballeros WHERE ejercito = "Athena" ORDER BY nombre, armadura; 131 | 132 | SELECT ejercito, COUNT(*) AS total FROM caballeros GROUP BY ejercito ORDER BY ejercito DESC; 133 | 134 | SELECT nombre, precio, MAX(precio) AS precio_maximo FROM productos GROUP BY precio, nombre HAVING precio_maximo >= 1000 ORDER BY nombre; 135 | 136 | SELECT * FROM productos; 137 | 138 | SELECT * FROM productos WHERE precio >= 5000 AND precio <= 15000; 139 | 140 | SELECT * FROM productos WHERE precio BETWEEN 5000 AND 15000; 141 | 142 | SELECT * FROM productos WHERE nombre REGEXP '[a-z]'; 143 | 144 | SELECT * FROM productos WHERE descripcion REGEXP '[0-9]'; 145 | 146 | SELECT ('Hola Mundo'); 147 | SELECT LOWER('Hola Mundo'); 148 | SELECT LCASE('Hola Mundo'); 149 | SELECT UPPER('Hola Mundo'); 150 | SELECT UCASE('Hola Mundo'); 151 | SELECT LEFT('Hola Mundo', 6); 152 | SELECT RIGHT('Hola Mundo', 6); 153 | SELECT LENGTH('Hola Mundo'); 154 | SELECT REPEAT('Hola Mundo', 3); 155 | SELECT REVERSE('Hola Mundo'); 156 | SELECT REPLACE('Hola Mundo', 'o', 'x'); 157 | SELECT LTRIM(' Hola Mundo '); 158 | SELECT RTRIM(' Hola Mundo '); 159 | SELECT TRIM(' Hola Mundo '); 160 | SELECT CONCAT('Hola Mundo',' desde ', 'SQL'); 161 | SELECT CONCAT_WS('-','Hola','Mundo','desde','SQL'); 162 | 163 | SELECT UPPER(nombre), LOWER(descripcion), precio FROM productos; 164 | -------------------------------------------------------------------------------- /SQL/Script03_Indices.sql: -------------------------------------------------------------------------------- 1 | CREATE DATABASE curso_sql; 2 | 3 | DROP DATABASE curso_sql; 4 | 5 | USE curso_sql; 6 | 7 | SHOW TABLES; 8 | 9 | DROP TABLE caballeros; 10 | 11 | TRUNCATE TABLE caballeros; 12 | 13 | CREATE TABLE caballeros ( 14 | caballero_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, 15 | nombre VARCHAR(30), 16 | armadura VARCHAR(30) UNIQUE, 17 | rango VARCHAR(30), 18 | signo VARCHAR(30), 19 | ejercito VARCHAR(30), 20 | pais VARCHAR(30), 21 | INDEX i_rango (rango), 22 | INDEX i_signo (signo), 23 | INDEX i_caballeros (ejercito, pais) 24 | ); 25 | 26 | CREATE TABLE caballeros ( 27 | caballero_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, 28 | nombre VARCHAR(30), 29 | armadura VARCHAR(30), 30 | rango VARCHAR(30), 31 | signo VARCHAR(30), 32 | ejercito VARCHAR(30), 33 | pais VARCHAR(30), 34 | FULLTEXT INDEX fi_search (armadura, rango, signo, ejercito, pais) 35 | ); 36 | 37 | CREATE TABLE caballeros ( 38 | caballero_id INT UNSIGNED, 39 | nombre VARCHAR(30), 40 | armadura VARCHAR(30), 41 | rango VARCHAR(30), 42 | signo VARCHAR(30), 43 | ejercito VARCHAR(30), 44 | pais VARCHAR(30) 45 | ); 46 | 47 | 48 | INSERT INTO caballeros VALUES 49 | (0,"Seiya","Pegaso","Bronce","Sagitario","Athena","Japón"), 50 | (0,"Shiryu","Dragón","Bronce","Libra","Athena","Japón"), 51 | (0,"Hyoga","Cisne","Bronce","Acuario","Athena","Rusia"), 52 | (0,"Shun","Andromeda","Bronce","Virgo","Athena","Japón"), 53 | (0,"Ikki","Fénix","Bronce","Leo","Athena","Japón"), 54 | (0,"Kanon","Géminis","Oro","Géminis","Athena","Grecia"), 55 | (0,"Saga","Junini","Oro","Junini","Athena","Grecia"), 56 | (0,"Camus","Acuario","Oro","Acuario","Athena","Francia"), 57 | (0,"Rhadamanthys","Wyvern","Espectro","Escorpión Oro","Hades","Inglaterra"), 58 | (0,"Kanon","Dragón Marino","Marino","Géminis Oro","Poseidón","Grecia"), 59 | (0,"Kagaho","Bennu","Espectro","Leo","Hades","Rusia"); 60 | 61 | SELECT * FROM caballeros; 62 | 63 | SELECT * FROM caballeros WHERE signo = "Leo"; 64 | 65 | SELECT * FROM caballeros 66 | WHERE MATCH(armadura, rango, signo, ejercito, pais) 67 | AGAINST('Oro' IN BOOLEAN MODE); 68 | 69 | SHOW INDEX FROM caballeros; 70 | 71 | ALTER TABLE caballeros ADD CONSTRAINT pk_caballero_id PRIMARY KEY (caballero_id); 72 | 73 | ALTER TABLE caballeros MODIFY COLUMN caballero_id INT AUTO_INCREMENT; 74 | 75 | ALTER TABLE caballeros ADD CONSTRAINT uq_armadura UNIQUE (armadura); 76 | ALTER TABLE caballeros DROP CONSTRAINT uq_armadura; 77 | 78 | 79 | ALTER TABLE caballeros ADD INDEX i_rango (rango); 80 | ALTER TABLE caballeros DROP INDEX i_rango; 81 | 82 | 83 | ALTER TABLE caballeros ADD INDEX i_ejercito_pais (ejercito, pais); 84 | ALTER TABLE caballeros DROP INDEX i_ejercito_pais; 85 | 86 | 87 | ALTER TABLE caballeros ADD FULLTEXT INDEX fi_search (nombre, signo); 88 | ALTER TABLE caballeros DROP INDEX fi_search; 89 | -------------------------------------------------------------------------------- /SQL/Script04_Joins.sql: -------------------------------------------------------------------------------- 1 | CREATE DATABASE curso_sql; 2 | 3 | DROP DATABASE curso_sql; 4 | 5 | USE curso_sql; 6 | 7 | SHOW TABLES; 8 | 9 | DROP TABLE caballeros; 10 | 11 | TRUNCATE TABLE caballeros; 12 | 13 | SELECT * FROM caballeros; 14 | 15 | 16 | CREATE TABLE armaduras ( 17 | armadura_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, 18 | armadura VARCHAR(30) NOT NULL 19 | ); 20 | 21 | CREATE TABLE signos ( 22 | signo_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, 23 | signo VARCHAR(30) NOT NULL 24 | ); 25 | 26 | CREATE TABLE rangos ( 27 | rango_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, 28 | rango VARCHAR(30) NOT NULL 29 | ); 30 | 31 | CREATE TABLE ejercitos ( 32 | ejercito_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, 33 | ejercito VARCHAR(30) NOT NULL 34 | ); 35 | 36 | CREATE TABLE paises ( 37 | pais_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, 38 | pais VARCHAR(30) NOT NULL 39 | ); 40 | 41 | CREATE TABLE caballeros ( 42 | caballero_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, 43 | nombre VARCHAR(30), 44 | armadura INT UNSIGNED, 45 | rango INT UNSIGNED, 46 | signo INT UNSIGNED, 47 | ejercito INT UNSIGNED, 48 | pais INT UNSIGNED, 49 | FOREIGN KEY(armadura) REFERENCES armaduras(armadura_id), 50 | FOREIGN KEY(rango) REFERENCES rangos(rango_id), 51 | FOREIGN KEY(signo) REFERENCES signos(signo_id), 52 | FOREIGN KEY(ejercito) REFERENCES ejercitos(ejercito_id), 53 | FOREIGN KEY(pais) REFERENCES paises(pais_id) 54 | ); 55 | 56 | INSERT INTO armaduras VALUES 57 | (1, "Pegaso"), 58 | (2, "Dragón"), 59 | (3, "Cisne"), 60 | (4, "Andrómeda"), 61 | (5, "Fénix"), 62 | (6, "Géminis"), 63 | (7, "Acuario"), 64 | (8, "Wyvern"), 65 | (9, "Dragón Marino"), 66 | (10, "Bennu"); 67 | 68 | INSERT INTO rangos VALUES 69 | (1, "Bronce"), 70 | (2, "Oro"), 71 | (3, "Espectro"), 72 | (4, "Marino"); 73 | 74 | INSERT INTO signos VALUES 75 | (1, "Aries"), 76 | (2, "Tauro"), 77 | (3, "Géminis"), 78 | (4, "Cancer"), 79 | (5, "Leo"), 80 | (6, "Virgo"), 81 | (7, "Libra"), 82 | (8, "Escorpión"), 83 | (9, "Sagitario"), 84 | (10, "Capricornio"), 85 | (11, "Acuario"), 86 | (12, "Piscis"); 87 | 88 | INSERT INTO ejercitos VALUES 89 | (1, "Athena"), 90 | (2, "Hades"), 91 | (3, "Poseidón"); 92 | 93 | INSERT INTO paises VALUES 94 | (1, "Japón"), 95 | (2, "Rusia"), 96 | (3, "Grecia"), 97 | (4, "Francia"), 98 | (5, "Inglaterra"); 99 | 100 | 101 | INSERT INTO caballeros VALUES 102 | (1,"Seiya", 1, 1, 9, 1, 1), 103 | (2,"Shiryu", 2, 1, 7, 1, 1), 104 | (3,"Hyoga", 3, 1, 11, 1, 2), 105 | (4,"Shun", 4, 1, 6, 1, 1), 106 | (5,"Ikki", 5, 1, 5, 1, 1), 107 | (6,"Kanon", 6, 2, 3, 1, 3), 108 | (7,"Saga", 6, 2, 3, 1, 3), 109 | (8,"Camus", 7, 2, 11, 1, 4), 110 | (9,"Rhadamanthys", 8, 3, 8, 2, 5), 111 | (10,"Kanon", 9, 4, 3, 3, 3), 112 | (11,"Kagaho", 10, 3, 5, 2, 2); 113 | 114 | SELECT * FROM armaduras; 115 | SELECT * FROM rangos; 116 | SELECT * FROM signos; 117 | SELECT * FROM ejercitos; 118 | SELECT * FROM paises; 119 | SELECT * FROM caballeros; 120 | 121 | SELECT * FROM caballeros c 122 | LEFT JOIN signos s 123 | ON c.signo = s.signo_id; 124 | 125 | SELECT * FROM caballeros c 126 | RIGHT JOIN signos s 127 | ON c.signo = s.signo_id; 128 | 129 | SELECT * FROM caballeros c 130 | INNER JOIN signos s 131 | ON c.signo = s.signo_id; 132 | 133 | 134 | SELECT * FROM caballeros c 135 | LEFT JOIN signos s 136 | ON c.signo = s.signo_id 137 | UNION 138 | SELECT * FROM caballeros c 139 | RIGHT JOIN signos s 140 | ON c.signo = s.signo_id; 141 | 142 | SELECT c.caballero_id, c.nombre, a.armadura, 143 | s.signo, r.rango, e.ejercito, p.pais 144 | FROM caballeros c 145 | INNER JOIN armaduras a ON c.armadura = a.armadura_id 146 | INNER JOIN signos s ON c.signo = s.signo_id 147 | INNER JOIN rangos r ON c.rango = r.rango_id 148 | INNER JOIN ejercitos e ON c.ejercito = e.ejercito_id 149 | INNER JOIN paises p ON c.pais = p.pais_id; 150 | 151 | SELECT signo, 152 | (SELECT COUNT(*) FROM caballeros c WHERE c.signo = s.signo_id) 153 | AS total_caballeros 154 | FROM signos s; 155 | 156 | SELECT rango, 157 | (SELECT COUNT(*) FROM caballeros c WHERE c.rango = r.rango_id) 158 | AS total_caballeros 159 | FROM rangos r; 160 | 161 | SELECT ejercito, 162 | (SELECT COUNT(*) FROM caballeros c WHERE c.ejercito = e.ejercito_id) 163 | AS total_caballeros 164 | FROM ejercitos e; 165 | 166 | SELECT pais, 167 | (SELECT COUNT(*) FROM caballeros c WHERE c.pais = p.pais_id) 168 | AS total_caballeros 169 | FROM paises p; 170 | 171 | 172 | CREATE VIEW vista_caballeros AS 173 | SELECT c.caballero_id, c.nombre, a.armadura, 174 | s.signo, r.rango, e.ejercito, p.pais 175 | FROM caballeros c 176 | INNER JOIN armaduras a ON c.armadura = a.armadura_id 177 | INNER JOIN signos s ON c.signo = s.signo_id 178 | INNER JOIN rangos r ON c.rango = r.rango_id 179 | INNER JOIN ejercitos e ON c.ejercito = e.ejercito_id 180 | INNER JOIN paises p ON c.pais = p.pais_id; 181 | 182 | CREATE VIEW vista_signos AS 183 | SELECT signo, 184 | (SELECT COUNT(*) FROM caballeros c WHERE c.signo = s.signo_id) 185 | AS total_caballeros 186 | FROM signos s; 187 | 188 | SELECT * FROM vista_caballeros; 189 | SELECT * FROM vista_signos; 190 | 191 | DROP VIEW vista_caballeros; 192 | 193 | SHOW FULL TABLES IN curso_sql WHERE TABLE_TYPE LIKE 'VIEW'; 194 | -------------------------------------------------------------------------------- /SQL/Script05_Restricciones.sql: -------------------------------------------------------------------------------- 1 | CREATE DATABASE curso_sql; 2 | 3 | DROP DATABASE curso_sql; 4 | 5 | USE curso_sql; 6 | 7 | SHOW TABLES; 8 | 9 | DROP TABLE armaduras; 10 | 11 | /* MOTORES DE TABLAS */ 12 | 13 | CREATE TABLE armaduras_myisam ( 14 | armadura_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, 15 | armadura VARCHAR(30) NOT NULL 16 | ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4; 17 | 18 | CREATE TABLE armaduras_innodb ( 19 | armadura_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, 20 | armadura VARCHAR(30) NOT NULL 21 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 22 | 23 | 24 | /* 25 | RESTRICCIONES (DELETE Y UPDATE) 26 | - CASCADE 27 | - SET NULL 28 | - SET DEFAULT 29 | - RESTRICT 30 | */ 31 | 32 | CREATE TABLE lenguajes ( 33 | lenguaje_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, 34 | lenguaje VARCHAR(30) NOT NULL 35 | ); 36 | 37 | INSERT INTO lenguajes (lenguaje) VALUES 38 | ("JavaScript"), 39 | ("PHP"), 40 | ("Python"), 41 | ("Ruby"), 42 | ("JAVA"); 43 | 44 | CREATE TABLE entornos ( 45 | entorno_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, 46 | entorno VARCHAR(30) NOT NULL 47 | ); 48 | 49 | INSERT INTO entornos (entorno) VALUES 50 | ("Frontend"), 51 | ("Backend"); 52 | 53 | CREATE TABLE frameworks ( 54 | framework_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, 55 | framework VARCHAR(30) NOT NULL, 56 | lenguaje INT UNSIGNED, 57 | FOREIGN KEY (lenguaje) REFERENCES lenguajes(lenguaje_id) 58 | ); 59 | 60 | CREATE TABLE frameworks ( 61 | framework_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, 62 | framework VARCHAR(30) NOT NULL, 63 | lenguaje INT UNSIGNED, 64 | FOREIGN KEY (lenguaje) REFERENCES lenguajes(lenguaje_id) 65 | ON DELETE RESTRICT ON UPDATE CASCADE 66 | ); 67 | 68 | CREATE TABLE frameworks ( 69 | framework_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, 70 | framework VARCHAR(30) NOT NULL, 71 | lenguaje INT UNSIGNED, 72 | entorno INT UNSIGNED, 73 | FOREIGN KEY (lenguaje) 74 | REFERENCES lenguajes(lenguaje_id) 75 | ON DELETE RESTRICT 76 | ON UPDATE CASCADE, 77 | FOREIGN KEY (entorno) 78 | REFERENCES entornos(entorno_id) 79 | ON DELETE RESTRICT 80 | ON UPDATE CASCADE 81 | ); 82 | 83 | 84 | INSERT INTO frameworks (framework, lenguaje) VALUES 85 | ("React", 1), 86 | ("Angular", 1), 87 | ("Vue", 1), 88 | ("Svelte", 1), 89 | ("Laravel", 2), 90 | ("Symfony", 2), 91 | ("Flask", 3), 92 | ("Django", 3), 93 | ("On Rails", 4); 94 | 95 | INSERT INTO frameworks (framework, lenguaje, entorno) VALUES 96 | ("React", 1, 1), 97 | ("Angular", 1, 1), 98 | ("Vue", 1, 1), 99 | ("Svelte", 1, 1), 100 | ("Laravel", 2, 2), 101 | ("Symfony", 2, 2), 102 | ("Flask", 3, 2), 103 | ("Django", 3, 2), 104 | ("On Rails", 4, 2); 105 | 106 | SELECT * FROM lenguajes; 107 | SELECT * FROM frameworks; 108 | SELECT * FROM entornos; 109 | 110 | 111 | SELECT * 112 | FROM frameworks f 113 | INNER JOIN lenguajes l 114 | ON f.lenguaje = l.lenguaje_id; 115 | 116 | SELECT * 117 | FROM frameworks f 118 | INNER JOIN lenguajes l ON f.lenguaje = l.lenguaje_id 119 | INNER JOIN entornos e ON f.entorno = e.entorno_id; 120 | 121 | 122 | DELETE FROM lenguajes WHERE lenguaje_id = 3; 123 | DELETE FROM lenguajes WHERE lenguaje_id = 5; 124 | DELETE FROM entornos WHERE entorno_id = 1; 125 | 126 | UPDATE lenguajes SET lenguaje_id = 13 WHERE lenguaje_id = 3; 127 | UPDATE entornos SET entorno_id = 19 WHERE entorno_id = 1; 128 | 129 | DROP TABLE lenguajes; 130 | DROP TABLE frameworks; 131 | DROP TABLE entornos; 132 | 133 | 134 | DELETE FROM frameworks; 135 | 136 | SELECT * FROM frameworks; 137 | 138 | START TRANSACTION; 139 | 140 | UPDATE frameworks SET framework = "Vue.js" WHERE framework_id = 11; 141 | DELETE FROM frameworks; 142 | INSERT INTO frameworks VALUES (0, "Spring", 5, 2); 143 | 144 | ROLLBACK; 145 | COMMIT; 146 | 147 | SELECT * FROM frameworks; 148 | SELECT * FROM frameworks LIMIT 2; 149 | SELECT * FROM frameworks LIMIT 2, 2; 150 | SELECT * FROM frameworks LIMIT 4, 2; 151 | SELECT * FROM frameworks LIMIT 6, 2; 152 | SELECT * FROM frameworks LIMIT 8, 2; 153 | SELECT * FROM frameworks LIMIT 10, 2; 154 | SELECT * FROM frameworks LIMIT 8, 2; 155 | 156 | 157 | SELECT MD5('m1 Sup3r P4$$w0rD'); 158 | SELECT SHA1('m1 Sup3r P4$$w0rD'); 159 | SELECT SHA2('m1 Sup3r P4$$w0rD', 256); 160 | 161 | SELECT AES_ENCRYPT('m1 Sup3r P4$$w0rD', 'llave_secreta'); 162 | SELECT AES_DECRYPT(nombre_campo, 'llave_secreta'); 163 | 164 | 165 | CREATE TABLE pagos_recurrentes( 166 | cuenta VARCHAR(8) PRIMARY KEY, 167 | nombre VARCHAR(50) NOT NULL, 168 | tarjeta BLOB 169 | ); 170 | 171 | INSERT INTO pagos_recurrentes VALUES 172 | ('12345678', 'Jon', AES_ENCRYPT('1234567890123488', '12345678')), 173 | ('12345677', 'Irma', AES_ENCRYPT('1234567890123477', '12345677')), 174 | ('12345676', 'Kenai', AES_ENCRYPT('1234567890123466', '12345676')), 175 | ('12345674', 'Kala', AES_ENCRYPT('1234567890123455', 'super_llave')), 176 | ('12345673', 'Miguel', AES_ENCRYPT('1234567890123444', 'super_llave')); 177 | 178 | SELECT * FROM pagos_recurrentes; 179 | 180 | SELECT CAST(AES_DECRYPT(tarjeta, '12345678') AS CHAR) AS tdc, nombre 181 | FROM pagos_recurrentes; 182 | 183 | SELECT CAST(AES_DECRYPT(tarjeta, 'super_llave') AS CHAR) AS tdc, nombre 184 | FROM pagos_recurrentes; 185 | 186 | SELECT CAST(AES_DECRYPT(tarjeta, 'qwerty') AS CHAR) AS tdc, nombre 187 | FROM pagos_recurrentes; 188 | -------------------------------------------------------------------------------- /SQL/Script06_ProcedimientosDisparadores.sql: -------------------------------------------------------------------------------- 1 | USE curso_sql; 2 | 3 | SHOW TABLES; 4 | 5 | CREATE TABLE suscripciones ( 6 | suscripcion_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, 7 | suscripcion VARCHAR(30) NOT NULL, 8 | costo DECIMAL(5,2) NOT NULL 9 | ); 10 | 11 | INSERT INTO suscripciones VALUES 12 | (0, 'Bronce', 199.99), 13 | (0, 'Plata', 299.99), 14 | (0, 'Oro', 399.99); 15 | 16 | CREATE TABLE clientes ( 17 | cliente_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, 18 | nombre VARCHAR(30) NOT NULL, 19 | correo VARCHAR(50) UNIQUE 20 | ); 21 | 22 | CREATE TABLE tarjetas ( 23 | tarjeta_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, 24 | cliente INT UNSIGNED, 25 | tarjeta BLOB, 26 | FOREIGN KEY (cliente) 27 | REFERENCES clientes(cliente_id) 28 | ON DELETE RESTRICT 29 | ON UPDATE CASCADE 30 | ); 31 | 32 | CREATE TABLE servicios( 33 | servicio_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, 34 | cliente INT UNSIGNED, 35 | tarjeta INT UNSIGNED, 36 | suscripcion INT UNSIGNED, 37 | FOREIGN KEY(cliente) 38 | REFERENCES clientes(cliente_id) 39 | ON DELETE RESTRICT 40 | ON UPDATE CASCADE, 41 | FOREIGN KEY(tarjeta) 42 | REFERENCES tarjetas(tarjeta_id) 43 | ON DELETE RESTRICT 44 | ON UPDATE CASCADE, 45 | FOREIGN KEY(suscripcion) 46 | REFERENCES suscripciones(suscripcion_id) 47 | ON DELETE RESTRICT 48 | ON UPDATE CASCADE 49 | ); 50 | 51 | CREATE TABLE actividad_clientes( 52 | ac_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, 53 | cliente INT UNSIGNED, 54 | fecha DATETIME, 55 | FOREIGN KEY (cliente) 56 | REFERENCES clientes(cliente_id) 57 | ON DELETE RESTRICT 58 | ON UPDATE CASCADE 59 | ); 60 | 61 | SELECT * FROM suscripciones; 62 | SELECT * FROM clientes; 63 | SELECT * FROM tarjetas; 64 | SELECT * FROM servicios; 65 | SELECT * FROM actividad_clientes; 66 | 67 | 68 | DELIMITER // 69 | 70 | CREATE PROCEDURE sp_obtener_suscripciones() 71 | 72 | BEGIN 73 | 74 | SELECT * FROM suscripciones; 75 | 76 | END // 77 | 78 | DELIMITER ; 79 | 80 | CALL sp_obtener_suscripciones(); 81 | 82 | SHOW PROCEDURE STATUS WHERE db = 'curso_sql'; 83 | 84 | DROP PROCEDURE sp_obtener_suscripciones; 85 | 86 | 87 | DELIMITER // 88 | 89 | CREATE PROCEDURE sp_asignar_servicio( 90 | IN i_suscripcion INT UNSIGNED, 91 | IN i_nombre VARCHAR(30), 92 | IN i_correo VARCHAR(50), 93 | IN i_tarjeta VARCHAR(16), 94 | OUT o_respuesta VARCHAR(50) 95 | ) 96 | 97 | BEGIN 98 | 99 | DECLARE existe_correo INT DEFAULT 0; 100 | DECLARE cliente_id INT DEFAULT 0; 101 | DECLARE tarjeta_id INT DEFAULT 0; 102 | 103 | START TRANSACTION; 104 | 105 | SELECT COUNT(*) INTO existe_correo 106 | FROM clientes 107 | WHERE correo = i_correo; 108 | 109 | IF existe_correo <> 0 THEN 110 | 111 | SELECT 'Tu correo ya ha sido registrado' INTO o_respuesta; 112 | 113 | ELSE 114 | 115 | INSERT INTO clientes VALUES (0, i_nombre, i_correo); 116 | SELECT LAST_INSERT_ID() INTO cliente_id; 117 | 118 | INSERT INTO tarjetas 119 | VALUES (0, cliente_id, AES_ENCRYPT(i_tarjeta, cliente_id)); 120 | SELECT LAST_INSERT_ID() INTO tarjeta_id; 121 | 122 | INSERT INTO servicios VALUES (0, cliente_id, tarjeta_id, i_suscripcion); 123 | 124 | SELECT 'Servicio asignado con éxito' INTO o_respuesta; 125 | 126 | END IF; 127 | 128 | COMMIT; 129 | 130 | END // 131 | 132 | DELIMITER ; 133 | 134 | SELECT * FROM suscripciones; 135 | SELECT * FROM clientes; 136 | SELECT * FROM tarjetas; 137 | SELECT * FROM servicios; 138 | SELECT * FROM actividad_clientes; 139 | 140 | CALL sp_asignar_servicio(2, 'Kenai', 'kenai@gmail.com', '1234567890123490', @res); 141 | SELECT @res; 142 | 143 | /* 144 | SINTAXIS TRIGGERS 145 | 146 | DELIMITER // 147 | CREATE TRIGGER nombre_disparador 148 | [BEFORE | AFTER] [INSERT | UPDATE | DELETE] 149 | ON nombre_tabla 150 | FOR EACH ROW 151 | BEGIN 152 | END // 153 | DELIMITER ; 154 | 155 | */ 156 | 157 | DELIMITER // 158 | 159 | CREATE TRIGGER tg_actividad_clientes 160 | AFTER INSERT 161 | ON clientes 162 | FOR EACH ROW 163 | 164 | BEGIN 165 | 166 | INSERT INTO actividad_clientes VALUES (0, NEW.cliente_id, NOW()); 167 | 168 | END // 169 | 170 | DELIMITER ; 171 | 172 | 173 | SHOW TRIGGERS FROM curso_sql; 174 | DROP TRIGGER tg_actividad_clientes; 175 | --------------------------------------------------------------------------------