├── .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 | 
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 | 
39 |
40 | ### Modelo Relacional de la BD
41 |
42 | 
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 | 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
--------------------------------------------------------------------------------
/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 | 
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 | 7Z1bc9o4FMc/DTPtQ3ewjbk8AqGXbbLtJrTbfeqoWAHNGouRRQP99CvZFjdZxG7BphzNZFosZGHr/K2fdHQkN7zhfPWGocXsjgY4bLjNYNXwbhqu2+u44l+ZsE4T2n4rTZgyEqRJzjbhgfzAWWIzS12SAMd7GTmlISeL/cQJjSI84XtpiDH6tJ/tkYb7v7pAU6wlPExQqKf+QwI+S1NbzeY2/S0m01n2y676Yo5U3iwhnqGAPu0keaOGN2SU8vTTfDXEoaw6VS3pea8N326ui+GIFzlh8vnVd+/xz6937999nLxZvWqRqPUqM853FC6z+8XRZIljjuLsqvla1YS4gYX8yNE3mTQQmRjPDOY1RYIwAUckwkwkOMlxGKJFTJLsacqMhMEtWtMlVwWpo8EjWeHgPrWXzCtMdysKk4ey8EdR+EN2MfJrFJJpJD5PxO3LXxwwHItruUUxz3Jkt4YZxytjnTkbSwgBYzrHnK1FlpWyZnpGpl1HHT9tlbAx+GxXBUq9KFPfdFP01kLiQ2akEgbzNIMdt9O9lNxgRhn5Ia0TZrW5a7vk+InMQxQJKaPgIGlAk0c3sQEJwyENqTRwRCOs2VhmChhdjBGbYp4lLCiJeFIP/kD8iZoZNv/wG7641qE4drbH4k9mZ3xIo5gzoSVZBhYmfcLSrANOF1mhIX5U5bOs3uXnb5RzOi8jAPNjoasik4FXUAXeuUTQ0kTw8b1RBuJmOUHhvWgcUTQNU6MlbSXaGi3Hsrl1vanfw4o/fDypqPbHMGnvZiQIcPRL9vDy7bFjAK9k/WeFbWuldGkoFO1OhLh4QJZREGtG3Vznz9vZN7bOX8V5Q7fRF9fUfPHur7H4r/9p/OFlzSpQjXKadxAv0IRE09v0zHZdMlkZH1unc1LZFCquAt20LSQKQaJ5Rki064ZEp7gIqmkccEBUead/9NswCdHVjBzR+TcmL/bF5/798G3//oXffHnxXKhEDOA40LMcqJ0Dvbo5oIaiQEDQgwkCx9GsHOB4wshiQmgkcTAefRkD44BBC+A44OhuPguCqkFQ2Hl4PhKUcB5eAQkcgz2uHgW6e5DM0RRHu4MC1/ehjQpMeoCHgxKuAYuDc+HArx0HuvPgqnHQAYoD3QvwiCczJGlw0x+Pxu/uRtBIYJACOBKoLqklQZ0k6NZNAld3HlwzCXbCb0CRQFk1Zz45oHEjnUkGhgKTFsChwNGDDZJYPirS7nGIpBsRJZF98gYGKMbq8w3iVI8WE5ZI7McZ/Q8fKOLAxjmamfF5mD370qpkgsJ+dtJcGD0R39OMcPwg9CF/8YmhhVSSrB+smJNEG2QBam52/BrNSShb3jGa0TkqKp7jcWKq8taq9dZU45dVza917fUIgAcSczxHymgjY5jfhRnObVVouJxJ+2oN5+ouugXD02VkAzLTJ0v1lVQoXk7fyenlWGzjfT29yXR3m+1DnyEk0xDcZY7JzNXB+Z5cnZ9XHpSZCh9gN1qHq2qjbVhmGaEc6WO3T9vHLlJcFcqxjvdK3C3HUZHTyasYFbrj/XXdqCjgcNlvJH7eOkD98K7uhzdF8188L2qQBzhYeHap1wXAIid8s1pYeCWGlxeDip83hwd0qZenDx/VoKIBO2zHpAhwQGjp0zcMxwu7WltJwVdGKe0c9M/VercsxKtwDqaPxuU6B1vgVmy3gHK8pXN800hb72AZpcDju122XcWA7xlW1O4dbOlOYkDewRbQhdwt3SdsmlS6eF7UIA94sLBruy8AFrV7B9XAFYh3sAV0dbevB2hvRhXA3YMmSYAjgq+7By0RKidC3irvipEAa5W3b7DH1SNBdyni+OuEMiYvW0Jh8OHD7aj/FzAemPQAjwf6iHJvtc8xNDRAzhfl7tDh5Fhzs2Lv9I23HdZVMV+UPhtl5otydXA2hrf1Yd2Vzxf5QEd2bX1kt22l7YRRGakcIXz3tIQvUlwV2rEjvipGfM/AIm+j32phAWvA1wY64GvrAz67169ZDvBooEeeWBpUToO87X6rpUGJKJJroIEPlAZ6lIiwaRiSbCcXwEAwKAIcEDp2Y4ILAEJhp+LZiNAp0TG4AiJ0gG5L0NHBjwPxhP7GQWOnFwE8CNgtBy4BAnmb/VYLAX028NPfl4+BE4WNdoDuOdDJ2XNgjkgIe4RgUgM4OKjL2A8rXIY2QsCw3Vzh6K7zRQh0S+zVCxrovxYhkNqvTIRAtVF+XVeTwZVHCHQNj+q1M7yrT+9tGmkbIFBGKeBCALvWA1jF4O8ZVtS+orSrOwABrSjtAvUHdnP8gXa/ucLyAAeLnt2q5gJgUfuK0p7eZwAEix7QbWt6ehfBHIYMGRcmgYDDRddOLF0ALupfbtqF9RbJLtCZpK4+k7TzYprfFwunVwI4EqjmxpKgVhLkhBhUPHKA9RbJnsEe106Cnj7zpHYdAEoCkxLgkaDA2gMcTLEah4lqJXwt3y7JCY1G2292XwDouI291wriKOgzlthudC/UMaZ3KFo3Dl8hiFeEf1GniM//ynTRpKdHN6udbDeKJeJ62PrL7sHOWfJwe1pypM5Lb1LemVE4WVJMl2yCj1Rh5oTjClamfAXeouLkvUN4k8iSWv++f8VHpPdREnMralfhRk2IOwdyS+80O2srNa0g76Ag97CgtCq0gk6m2QLj2EvW7Am1p95k+Kz4CmzSacVX6D2tzQJ958rUp1o/p7bWT21/8qwCC/hprQKLKbBAr/2S27/fiNkFZqKhi1YcMkr5bnaGFrPkTeQi8X8=
--------------------------------------------------------------------------------
/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 | 
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 | 
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 | 
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 | 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
--------------------------------------------------------------------------------
/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 | 
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 | 
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 | 7Z1bc5s4FMc/jWfah+5w9eUxdtLLNm13U3e3feqoINuaYuRiubH3068EQgZEEkhsIEgzmRYECHz0l37SOQIN7Nl6/yYCm9UH7MNgYBn+fmBfDixrPHbovyzhkCS4EzdJWEbIT5LMY8Jn9B/kiQZP3SEfbnMnEowDgjb5RA+HIfRILg1EEb7Nn7bAQf6uG7CEUsJnDwRy6r/IJ6skdWgYx/S3EC1X/M4jhx9Yg/RcnrBdAR/fZpLsq4E9izAmydZ6P4MBM11qluS613ccFc8VwZBUuWD15tf772/htwAGn8I/x2N38e/hFc/lNwh2/Pd6AaIZUosnD00OqSHo82/YJgE/WNJ0S0BEeHnRW9tTWgIEoBBGNMGM94MAbLYoPj1JWaHAvwYHvCNpRunedIH20L9JioudS0vummbGdlnmC5r5Z/4w7DAI0DKk2x572IidD7f0Wa7BlvAzZPukPxZGBO4zSdxebyBeQxId6Cn8qD1JruDSNdMcbo9CsEyetsqIwJrwCwEX31JkLe52Q8UKwiX9QeJ25sjI329sSPdLT8nezjbydwMBNUkICJziXehvs6qgG5kfekyKtVJDN5akm/v1csOUP13hCP3HVBLwUs1qKN6/ResAhLRGAb+QNMVxCxJrAQXBDAeYCS3EIZS0xk7yI7yZg2gJCU/YYBSS2ELulP5Rm82MP9yBS591RvfN4z79Y6dHZIbDLYmoplkekErrFjJ5TQne8EwDuEjzj3iBsO0fmBC8vlOI91bFh9XJ5WHJ6ihVY1EeWTHmdFFXBLYkgr/e3ykD+vsJAsFR9nGDwZpscCy0kpIttbWwb9HwxWYCU3MugrjZXSHfh2H18rAql0emAOwK1fOBxqBmbg1UducuSHynl1nGi3cf5/S/iy/zTy9bLv6UCsm50+0GeChcXidXDtvSxz5fcpkCNsc16+v9eqmUXQOCcTUdKtHBOCMd3LbpMKwugmYaB+ijNL8nVn23cmH0HQ0jqZBDvP4RsYd98c/Fzeztxc0L13jZeS40IgblODDWHGidAyVjyGY5MOkvB8aVC6PvHEi9dZlSpkUaBMjHW4VYUF0QyrHAlF2NGgZNw8A026aBKXsOv/zdfSDk/QYVS6d68fQeD7KrkEBaNDjEWTqY/aZDDUEohwdLHklqPDSOB6dtPFjykLGveBCK13iw5DEiXAMUKDRyqKEG5dhgy4NLzYbG2TBqmw12jRFkZ8hQsTiExDUMbHmE6KMIeh7CYX6w0G8i1JCEekSQx5OaCE0TwTJaJ4I8M6X7RHjMWEHoXePBlieXeBvGhWSU0G8kVJeBekioMd9EI+FcSCjRW8NIqOFH7AwSqlb/YeXy6D0FZD+hh3Y+raLquIxqyEE5Gjh6Cmo1Gpjxj4zwT1h44LMhYtg2Ihy5p/C6R+8tOHp2qjCF3BnYABRPSHr3cd55NrQjCuVYYcpehE2E/Z1HcL23IG1j0Mu3INMXzXgL7kzKpFFS48UbaqefRaTxXh3vVUnuVBbG4Z4moiZHniYDmeR9egPR1CQXpighOW+jlX4JsYZE7uG6e1LJVMquCc3o109O7xGsDYmS4V7DkOjxCyimfgNFTKCSJwmJVxEzDsGus6EZMSjHAjHq0SxokQVVB47nm15s9ZcFNQb2vWeBPD3Ih1svQhsPDWb2YGrHM8nmV1+77wRsRhHqAaHG1CENhHMBwSz5hlXDRKjhSXx2RKheHr0nguwpXGCCM2MDy3V7zYLqWlCOBY52FHWBBSVfrGqWBU6PPUWO9hSJDzbJnqJNBD0Uv4r++vrTRa8HBTWEoBwIXO0l6gIISj5Z1SwI3B67iVztJhKmkN1EHggJ4tOIn8MUsWaEoB4IZO/Qb2pNoOeDsfJIPyJV14ljDs/WYOv5YCefD+Y+v/lgbr/ng7l6PpgwhTwfLG6glZ4MVkMf6hFd+/hOPrSrT4jWJ4O5souv9Xd/zvTNAFd7/MRSBLLHT1rBpPOgaEEXylFiqB2AHaBE69PEhj32/w21/0+YQvb/LaC3AowIlxfzq/m7D1fPEgunl4J6JNDzwzpAgvbnhw17PD9sqOeHCVPInsM1rcZqTAmooQPlODCq0BWE/hKmozBqaUQONzAABOHw6ngkGaslIDAthgqyDngdhqF/wZaqprtXN1Qdc/wBhAemAPa7YAoKuEfka3oJ3f7G0mmDnuxd7jOnXaYkoc8THb5mdzJXsd3jZfFeep0sHd5Z2OJd5MF7LMbtQ1Iy3UkDPg5l1qva9phGiSpEYhRb/TfMPe890vuL8fIoaqfwnQO3GK5Kfjq/6ig1KSO3+MGEYkaJbaSMTqZZuV/L2ihvF+Dt9/332FF+f2dmoGQg0y5ZHafhQOZIdztPHsgU1eH5BDJHcq+zT4HMke54ClPIHc+0rVY6lllDIur1SfVaSSf3TdSHROuxzJEc0u5rLHOk10oSppAj2IWZL53HRAuqUI4RaUukGdEmI1qPZI7lgHZfGSEUrxkxlp2W8tfylMFEDWGohwm9kFIHMNF+mHP8HFdSqlr/9eJJwhQliyep88ZbDSGoB4IKyyc1FudMY5bmoKGYZTqSfDhoyStQZ4KWdqqVNGjpFrRTNWhZjH6KYFhDQctxBafmaQW4BqH/KW6i4t5L2YGnx98fr8mU/w9q0uyaJq1xXkqO80hN2oWM7GJGZ9bkpGQcBdAW6teA6ZGRmS/kkvWhy4PnZ+vETvRg5uTBc1EFnk/wfCKPZfoUPJ/o4YwwhTycYe2z0oHzGvJQbpAz0WvEntzbVR8QrQfOJz1eI3ai14gVppDnR4gVIVRZI7aGHNSjQY3PfWoanIsGrYfIhdcjo4Mvf3cfCI8JhQrJazqYhjw1wsdrFCbfgU2+Cd5vNlQXg3JsME1ZHZIU2nZHNx4mSceWD7qknc67pCcFTT3aJV3M6MwuabNkzdOBNQxY67Ayc/oc/trhGPRwT17xhuSCnsHbkuMJdGvJ/w94KxOW5sSk/OqWFw/LyjESQRnFewjP8913YZndfZdtXGNYVra12RcyMhbAy18zByu8BvLNPmAfBqxBZzXTozUTMAv7rNWZgi1Mty9BvNZz8mC0XJJnyz8vTU4MIyUzu6eJhSaC2SVf52NXfAYRYEdvzZuHQYnrnrXOyAPBBT+wpq183K7ku4KX5bShPT/8ExYS883Inc1BDS5MJC64ZZgfn60PV7rIY59rheU8oVZ8RlsC2YFE/f/wT9tq+T9N/ilbTKk2iJXQn1gb6G6EWVEekRKBzSpu5Wji/w==
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------