├── .gitignore ├── .vscode └── settings.json └── Notas ├── notas.md └── src ├── Atributos-rdb.png ├── GROUP_CONCAT.png ├── Instalador_mysql_1.png ├── Instalador_mysql_2.png ├── Instalador_mysql_3.png ├── Platziblog_firebase_1.png ├── Platziblog_firebase_10.png ├── Platziblog_firebase_2.png ├── Platziblog_firebase_3.png ├── Platziblog_firebase_4.png ├── Platziblog_firebase_5.png ├── Platziblog_firebase_6.png ├── Platziblog_firebase_7.png ├── Platziblog_firebase_8.png ├── Platziblog_firebase_9.png ├── SQL_create.png ├── SQL_create_database.png ├── Teoria_conjuntos.jpg ├── Teoria_conjuntos.jpg:Zone.Identifier ├── alter_table_1.png ├── alter_table_2.png ├── alter_table_3.png ├── alter_table_4.png ├── badge.webp ├── badge.webp:Zone.Identifier ├── cardinalidad_0_1.png ├── cardinalidad_0_N.png ├── cardinalidad_1_1.png ├── cardinalidad_1_N.png ├── cardinalidad_N_N.png ├── colecciones_vs_subcolecciones_1.png ├── colecciones_vs_subcolecciones_2.png ├── colecciones_vs_subcolecciones_3.png ├── colecciones_vs_subcolecciones_4.png ├── colecciones_vs_subcolecciones_5.png ├── colecciones_vs_subcolecciones_6.png ├── create_table_slide.png ├── create_view1.png ├── create_view2.png ├── create_view3.png ├── create_view4.png ├── delete__command_1.png ├── diagrama_ER.png ├── diagrama_fisico_1N.png ├── diagrama_fisico_2N.png ├── diagrama_fisico_3N.png ├── diagrama_fisico_4N.png ├── diagrama_fisico_paso_1.png ├── diagrama_fisico_paso_2.png ├── diagrama_fisico_paso_2_N_N.png ├── diagrama_fisico_paso_3_N_N.png ├── diagrama_fisico_sin_normalizar.png ├── drop_column_1.png ├── drop_column_2.png ├── drop_schema_1.png ├── drop_schema_2.png ├── drop_schema_3.png ├── drop_schema_4.png ├── drop_table.png ├── drop_table_1.png ├── drop_table_2.png ├── drop_table_3.png ├── entidades_debiles.png ├── entidades_debiles_2.png ├── entidades_platziblog.png ├── entidades_platziblog_2.png ├── entidades_platziblog_3.png ├── firebase_intro_1.png ├── firebase_intro_2.png ├── firebase_intro_3.png ├── firebase_intro_4.png ├── firebase_intro_5.png ├── firebase_intro_6.png ├── firebase_intro_7.png ├── firebase_tipos_datos_1.png ├── firebase_tipos_datos_2.png ├── firebase_tipos_datos_3.png ├── firebase_tipos_datos_4.png ├── insert_command.png ├── insert_command_1.png ├── insert_command_2.png ├── jerarquia_firestore.png ├── platziblog_tabla_caracteristicas_1.png ├── platziblog_tabla_caracteristicas_2.png ├── platziblog_tabla_comentarios.png ├── platziblog_tabla_comentarios_1.png ├── platziblog_tabla_comentarios_post_fk_1.png ├── platziblog_tabla_comentarios_post_fk_2.png ├── platziblog_tabla_comentarios_usuarios_fk_1.png ├── platziblog_tabla_comentarios_usuarios_fk_2.png ├── platziblog_tabla_etiquetas_1.png ├── platziblog_tabla_etiquetas_2.png ├── platziblog_tabla_post_1.png ├── platziblog_tabla_post_2.png ├── platziblog_tabla_post_etiquetas.png ├── platziblog_tabla_post_etiquetas_1.png ├── platziblog_tabla_post_etiquetas_etiquetas_fk_1.png ├── platziblog_tabla_post_etiquetas_etiquetas_fk_2.png ├── platziblog_tabla_post_etiquetas_fk_1.png ├── platziblog_tabla_post_etiquetas_fk_2.png ├── platziblog_tabla_post_etiquetas_post_fk_2.png ├── platziblog_tabla_post_fk_categorias_id.png ├── platziblog_tabla_post_fk_categorias_id_1.png ├── platziblog_tabla_post_fk_usuario_id.png ├── platziblog_tabla_usuarios_1.png ├── platziblog_tabla_usuarios_2.png ├── relaciones.png ├── reverse_engineer_1.png ├── reverse_engineer_2.png ├── reverse_engineer_3.png ├── reverse_engineer_4.png ├── reverse_engineer_5.png ├── reverse_engineer_6.png ├── reverse_engineer_7.png ├── select_command.png ├── select_command_1.png ├── teoria_conjuntos_sentencias.jpg ├── teoria_conjuntos_sentencias.jpg:Zone.Identifier ├── update_command.png ├── update_command_1.png ├── update_command_2.png ├── worckbench_1.png ├── worckbench_2.png ├── worckbench_3.png ├── worckbench_4.png ├── worckbench_default_schema.png ├── worckbench_new_table_1.png ├── worckbench_new_table_2_apply.png ├── worckbench_new_table_3.png └── workbench_create_view.png /.gitignore: -------------------------------------------------------------------------------- 1 | .vscode/ -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "cSpell.words": [ 3 | "Aenean", 4 | "Aliquam", 5 | "Blogpost", 6 | "Codd", 7 | "Curabitur", 8 | "Donec", 9 | "Duis", 10 | "Etiam", 11 | "Fuccia", 12 | "Fusce", 13 | "Graficos", 14 | "Moni", 15 | "Morbi", 16 | "Nullam", 17 | "Nunc", 18 | "Phasellus", 19 | "Praesent", 20 | "Proin", 21 | "Quisque", 22 | "RDBMS", 23 | "Relacion", 24 | "SMALLINT", 25 | "Suspendisse", 26 | "Vivamus", 27 | "accumsan", 28 | "adipiscing", 29 | "aliquet", 30 | "amet", 31 | "aptent", 32 | "arcu", 33 | "astrof", 34 | "astrofísica", 35 | "augue", 36 | "bibendum", 37 | "blandit", 38 | "categoria", 39 | "categorias", 40 | "commodo", 41 | "condimentum", 42 | "congue", 43 | "consectetur", 44 | "consequat", 45 | "conubia", 46 | "convallis", 47 | "cursus", 48 | "dapibus", 49 | "dignissim", 50 | "e", 51 | "efficitur", 52 | "egestas", 53 | "eget", 54 | "eleifend", 55 | "elementum", 56 | "elit", 57 | "es", 58 | "escandalo", 59 | "espectaculo", 60 | "estandar", 61 | "estrellita", 62 | "eñes", 63 | "facilisis", 64 | "faucibus", 65 | "felis", 66 | "feugiat", 67 | "finibus", 68 | "fisica", 69 | "fisico", 70 | "foranea", 71 | "fringilla", 72 | "gcloud", 73 | "hendrerit", 74 | "himenaeos", 75 | "iaculis", 76 | "imperdiet", 77 | "inceptos", 78 | "inteligepostsnte", 79 | "lacus", 80 | "laoreet", 81 | "lectus", 82 | "litora", 83 | "lobortis", 84 | "malesuada", 85 | "manejadoras", 86 | "mattis", 87 | "mauris", 88 | "metus", 89 | "mollis", 90 | "multivaluados", 91 | "nanomaterial", 92 | "neque", 93 | "nisl", 94 | "normalizacion", 95 | "nostra", 96 | "nulla", 97 | "orci", 98 | "paparatzi", 99 | "pellentesque", 100 | "pharetra", 101 | "placerat", 102 | "platziblog", 103 | "porttitor", 104 | "postsetiquetas", 105 | "posuere", 106 | "pretium", 107 | "publicacion", 108 | "pulvinar", 109 | "raices", 110 | "rhoncus", 111 | "sagittis", 112 | "sapien", 113 | "scelerisque", 114 | "seccion", 115 | "sica", 116 | "sociosqu", 117 | "sodales", 118 | "sollicitudin", 119 | "taciti", 120 | "tempor", 121 | "teoria", 122 | "tincidunt", 123 | "torquent", 124 | "tortor", 125 | "tristique", 126 | "turpis", 127 | "ultrices", 128 | "ultricies", 129 | "varius", 130 | "vehicula", 131 | "velit", 132 | "vestibulum", 133 | "viverra", 134 | "volleiball", 135 | "volutpat", 136 | "vulputate", 137 | "worckbench" 138 | ] 139 | } -------------------------------------------------------------------------------- /Notas/notas.md: -------------------------------------------------------------------------------- 1 | 2 | ![badge](src/badge.webp) 3 | 4 | # Fundamentos de Bases de Datos 5 | 6 | ## Indice 7 | 8 | - [Fundamentos de Bases de Datos](#fundamentos-de-bases-de-datos) 9 | - [Indice](#indice) 10 | - [Modulo 1. Bienvenida conceptos básicos y contexto histórico de las Bases de Datos](#modulo-1-bienvenida-conceptos-básicos-y-contexto-histórico-de-las-bases-de-datos) 11 | - [Clase 1Expert Session: resuelve tus dudas sobre las bases de datos](#clase-1expert-session-resuelve-tus-dudas-sobre-las-bases-de-datos) 12 | - [Clase 2 Bienvenida conceptos básicos y contexto histórico de las Bases de Datos](#clase-2-bienvenida-conceptos-básicos-y-contexto-histórico-de-las-bases-de-datos) 13 | - [Tipos de bases de datos](#tipos-de-bases-de-datos) 14 | - [Servicios](#servicios) 15 | - [Modulo 2. Introducción a las bases de datos relacionales](#modulo-2-introducción-a-las-bases-de-datos-relacionales) 16 | - [Clase 3 Historia de las RDB (relational data bases)](#clase-3-historia-de-las-rdb-relational-data-bases) 17 | - [Clase 4 Entidades y atributos](#clase-4-entidades-y-atributos) 18 | - [Atributos](#atributos) 19 | - [Entidades](#entidades) 20 | - [Clase 5 Entidades de Platzi Blog](#clase-5-entidades-de-platzi-blog) 21 | - [Clase 6 Relaciones](#clase-6-relaciones) 22 | - [Cardinalidad: 1 a 1](#cardinalidad-1-a-1) 23 | - [Cardinalidad: 0 a 1](#cardinalidad-0-a-1) 24 | - [Cardinalidad: 1 a N (1 a muchos)](#cardinalidad-1-a-n-1-a-muchos) 25 | - [Cardinalidad: 0 a N](#cardinalidad-0-a-n) 26 | - [Clase 7 Multiples muchos](#clase-7-multiples-muchos) 27 | - [Clase 8 Diagrama ER](#clase-8-diagrama-er) 28 | - [Clase 9 Diagrama Físico: tipos de datos y constraints](#clase-9-diagrama-físico-tipos-de-datos-y-constraints) 29 | - [Tipos de dato](#tipos-de-dato) 30 | - [Constraints (Restricciones)](#constraints-restricciones) 31 | - [Clase 10 Diagrama Físico: normalizacion](#clase-10-diagrama-físico-normalizacion) 32 | - [Clase 11 Diagrama Físico: normalizando Platziblog](#clase-11-diagrama-físico-normalizando-platziblog) 33 | - [Diagram Entidad Relacion](#diagram-entidad-relacion) 34 | - [Diagrama fisico Paso 1](#diagrama-fisico-paso-1) 35 | - [Diagrama fisico Paso 2](#diagrama-fisico-paso-2) 36 | - [Diagrama fisico Paso 3](#diagrama-fisico-paso-3) 37 | - [Clase 12 Formas normales en DB relacionales](#clase-12-formas-normales-en-db-relacionales) 38 | - [Primera Forma Normal (1FN)](#primera-forma-normal-1fn) 39 | - [Segunda Forma Normal (2FN)](#segunda-forma-normal-2fn) 40 | - [Tercera Forma Normal (3FN)](#tercera-forma-normal-3fn) 41 | - [Cuarta Forma Normal (4FN)](#cuarta-forma-normal-4fn) 42 | - [Modulo 3 RDBMS (MySQL) o cómo hacer lo anterior de manera práctica](#modulo-3-rdbms-mysql-o-cómo-hacer-lo-anterior-de-manera-práctica) 43 | - [Clase 13 RDB Qué](#clase-13-rdb-qué) 44 | - [Clase 14 Instalación local de un RDBMS (Windows)](#clase-14-instalación-local-de-un-rdbms-windows) 45 | - [Clase 15 Instalación local de un RDBMS (Mac)](#clase-15-instalación-local-de-un-rdbms-mac) 46 | - [Clase 16 Instalación local de un RDBMS (Ubuntu)](#clase-16-instalación-local-de-un-rdbms-ubuntu) 47 | - [Clase 17 Clientes Graficos](#clase-17-clientes-graficos) 48 | - [Clase 18 Servicios administrados](#clase-18-servicios-administrados) 49 | - [Modulo 4 SQL hasta en la sopa](#modulo-4-sql-hasta-en-la-sopa) 50 | - [Clase 19 Historia de SQL](#clase-19-historia-de-sql) 51 | - [Clase 20 DDL create](#clase-20-ddl-create) 52 | - [Clase 21 CREATE VIEW y DDL ALTER](#clase-21-create-view-y-ddl-alter) 53 | - [Create view](#create-view) 54 | - [Alter Table](#alter-table) 55 | - [Drop Column Borrando una columna](#drop-column-borrando-una-columna) 56 | - [Clase 22 DDL drop](#clase-22-ddl-drop) 57 | - [Clase 23 DML](#clase-23-dml) 58 | - [Insert](#insert) 59 | - [Update](#update) 60 | - [Delete](#delete) 61 | - [Select](#select) 62 | - [Clase 24 Que tan standard es SQL](#clase-24-que-tan-standard-es-sql) 63 | - [Clase 25 Creando Platziblog: tablas independientes](#clase-25-creando-platziblog-tablas-independientes) 64 | - [Clase 26 Creando Platziblog: tablas transitivas](#clase-26-creando-platziblog-tablas-transitivas) 65 | - [Clase 27 Creando Platziblog: tablas transitivas](#clase-27-creando-platziblog-tablas-transitivas) 66 | - [Reverse Engineer](#reverse-engineer) 67 | - [Clase 28 Por qué las consultas son tan importantes](#clase-28-por-qué-las-consultas-son-tan-importantes) 68 | - [Clase 29 Estructura básica de un Query](#clase-29-estructura-básica-de-un-query) 69 | - [Primer Consulta](#primer-consulta) 70 | - [Clase 30 SELECT](#clase-30-select) 71 | - [Clase 31 FROM](#clase-31-from) 72 | - [Clase 32 Utilizando la sentencia FROM](#clase-32-utilizando-la-sentencia-from) 73 | - [Clase 33 WHERE](#clase-33-where) 74 | - [Clase 34 Utilizando la sentencia WHERE nulo y no nulo](#clase-34-utilizando-la-sentencia-where-nulo-y-no-nulo) 75 | - [Clase 35 GROUP BY](#clase-35-group-by) 76 | - [Clase 36 ORDER BY y HAVING](#clase-36-order-by-y-having) 77 | - [Clase 37 El interminable agujero de conejo (Nested queries)](#clase-37-el-interminable-agujero-de-conejo-nested-queries) 78 | - [Clase 38 Como convertir una pregunta en un query SQL](#clase-38-como-convertir-una-pregunta-en-un-query-sql) 79 | - [De pregunta a Query](#de-pregunta-a-query) 80 | - [Clase 39 Preguntandole a la base de datos](#clase-39-preguntandole-a-la-base-de-datos) 81 | - [Clase 40 Consultando PlatziBlog](#clase-40-consultando-platziblog) 82 | - [Modulo 4 Introduccion a la bases de datos NO relacionales](#modulo-4-introduccion-a-la-bases-de-datos-no-relacionales) 83 | - [Clase 41 Que son y cuales son los tipos de bases de datos no relacionales](#clase-41-que-son-y-cuales-son-los-tipos-de-bases-de-datos-no-relacionales) 84 | - [Tipos de bases de datos no relacionales:](#tipos-de-bases-de-datos-no-relacionales) 85 | - [Clase 42 Servicios administrados y jerarquía de datos](#clase-42-servicios-administrados-y-jerarquía-de-datos) 86 | - [Modulo 5 Manejo de modelos de datos en bases de datos no relacionales](#modulo-5-manejo-de-modelos-de-datos-en-bases-de-datos-no-relacionales) 87 | - [Clase 43 Top level collection con Firebase](#clase-43-top-level-collection-con-firebase) 88 | - [Clase 44 Creando y borrando documentos en Firestore](#clase-44-creando-y-borrando-documentos-en-firestore) 89 | - [Clase 45 Colecciones vs subcolecciones](#clase-45-colecciones-vs-subcolecciones) 90 | - [Clase 46 Recreando Platziblog](#clase-46-recreando-platziblog) 91 | - [Clase 47 Construyendo Platziblog en Firestore](#clase-47-construyendo-platziblog-en-firestore) 92 | - [Clase 48 Proyecto final: transformando tu proyecto en una db no relacional](#clase-48-proyecto-final-transformando-tu-proyecto-en-una-db-no-relacional) 93 | - [Regla 1. Piensa en la vista de tu aplicación](#regla-1-piensa-en-la-vista-de-tu-aplicación) 94 | - [Modulo 6 Bases de datos en la vida real](#modulo-6-bases-de-datos-en-la-vida-real) 95 | - [Clase 49 Bases de datos en la vida real](#clase-49-bases-de-datos-en-la-vida-real) 96 | - [Clase 50 Big Data](#clase-50-big-data) 97 | - [Clase 51 Data warehouse](#clase-51-data-warehouse) 98 | - [Clase 52 Data mining](#clase-52-data-mining) 99 | - [Clase 53 ETL](#clase-53-etl) 100 | - [Clase 54 Business intelligence](#clase-54-business-intelligence) 101 | - [Clase 55 Machine Learning](#clase-55-machine-learning) 102 | - [Clase 56 Data Science](#clase-56-data-science) 103 | - [Clase 57 Por que aprender bases de datos hoy](#clase-57-por-que-aprender-bases-de-datos-hoy) 104 | - [Bonus](#bonus) 105 | - [Clase 58 Bases de datos relacionales vs no relacionales](#clase-58-bases-de-datos-relacionales-vs-no-relacionales) 106 | 107 | ## Modulo 1. Bienvenida conceptos básicos y contexto histórico de las Bases de Datos 108 | 109 | ### Clase 1Expert Session: resuelve tus dudas sobre las bases de datos 110 | 111 | ### Clase 2 Bienvenida conceptos básicos y contexto histórico de las Bases de Datos 112 | 113 | Tu profesor será Israel Vázquez, senior web developer en San Francisco, seminarista de bases de datos y entusiasta data engineering. 114 | El almacenamiento en la nube tiene un gran pro comparada con los otros métodos de almacenamiento ya que es accesible desde cualquier parte del mundo. Además es centralizada y puede ser usada por varias personas al mismo tiempo. 115 | 116 | Las bases de datos entran cuando hacemos la transición a medios digitales. 117 | 118 | #### Tipos de bases de datos 119 | 120 | **Relacionales:** En la industria hay varias compañías dedicadas a ser manejadoras de bases de datos relacionales como SQL Server, Oracle, **MariaDB**, entre otras. 121 | **No relacionales**: Todavía están avanzando y existen ejemplos muy distintos como cassandra, elasticsearch, neo4j, MongoDB, entre otras. 122 | 123 | #### Servicios 124 | 125 | **Auto administrados:** Es la base de datos que instalas tú y te encargas de actualizaciones, mantenimiento, etc. 126 | **Administrados:** Servicios que ofrecen las nubes modernas como Azure y no debes preocuparte por mantenimiento o actualizaciones. 127 | 128 | ## Modulo 2. Introducción a las bases de datos relacionales 129 | 130 | ### Clase 3 Historia de las RDB (relational data bases) 131 | 132 | Las bases de datos surgen de la necesidad de conservar la información más allá de lo que existe en la memoria RAM. 133 | 134 | Las bases de datos basadas en archivos eran datos guardados en texto plano, fáciles de guardar pero muy difíciles de consultar y por la necesidad de mejorar esto nacen las bases de datos relacionales. **Su inventor Edgar Codd** dejó ciertas reglas para asegurarse de que toda la filosofía de las bases de datos no se perdiera, estandarizando el proceso, **Codd invento el algebra relacional** 135 | 136 | (Contenido adicional) 137 | Bases de datos relacionales (RBD) 138 | 139 | Es importante que sea fácil de guardar y extraer, anteriormente se usaban bases de datos basadas en archivos, el cuál era texto plano fácil de guardar, pero difícil de extraer, por esto se inventaron las bases de datos relacionales. En 1990 Codd se preocupó porque los sistemas de gestión de bases de datos (SGBD) que decían ser relacionales, no lo eran. En la práctica es difícil cumplir las 12 pero, un SGBD es más relacional cuantas más reglas cumpla 140 | 141 | Las Reglas y mandamientos de Edgar Frank Ted Codd 142 | 143 | **Regla 0:** Regla de fundación. 144 | a) Cualquier sistema que se proclame como relacional, debe ser capaz de gestionar sus bases de datos enteramente mediante sus capacidades relacionales. 145 | 146 | **Regla 1:** Regla de la información. 147 | a) Todos los datos deben estar almacenados en las tablas 148 | b) Esas tablas deben cumplir las premisas del modelo relacional 149 | c) No puede haber información a la que accedemos por otra vía 150 | 151 | **Regla 2:** Regla del acceso garantizado. 152 | a) Cualquier dato es accesible sabiendo la clave de su fila y el nombre de su columna o atributo 153 | b) Si a un dato no podemos acceder de esta forma, no estamos usando un modelo relacional 154 | 155 | **Regla 3:** Regla del tratamiento sistemático de valores nulos. 156 | a) Esos valores pueden dar significado a la columna que los contiene 157 | b) El SGBD debe tener la capacidad de manejar valores nulos 158 | c) El SGBD reconocerá este valor diferenciándolo de cualquier otro 159 | d) El SGBD deberá aplicársele la lógica apropiada 160 | e) Es un valor independiente del tipo de datos de la columna 161 | 162 | **Regla 4:** Catálogo dinámico en línea basado en el modelo relacional. 163 | a) El catálogo en línea es el diccionario de datos 164 | b) El diccionario de datos se debe de poder consultar usando las mismas técnicas que para los datos 165 | c) Los metadatos, por tanto, se organizan también en tablas relacionales 166 | d) Si SELECT es una instrucción que consulta datos, también será la que consulta los metadatos 167 | 168 | **Regla 5:** Regla comprensiva del sublenguaje de los datos completo. 169 | a) Al menos tiene que existir un lenguaje capaz de hacer todas las funciones del SGBD 170 | b) No puede haber funciones fuera de ese lenguaje 171 | c) Puede haber otros lenguajes en el SGBD para hacer ciertas tareas 172 | d) Pero esas tareas también se deben poder hacer con el “lenguaje completo” 173 | 174 | **Regla 6:** Regla de actualización de vistas. 175 | a) Las vistas tienen que mostrar información actualizada 176 | b) No puede haber diferencias entre los datos de las vistas y los datos de las tablas base 177 | 178 | **Regla 7:** Alto nivel de inserción, actualización, y cancelación. 179 | a) La idea es que el lenguaje que maneja la base de datos sea muy humano 180 | b) Eso implica que las operaciones del lenguaje de manipulación de los datos (DML) trabajen con conjuntos de filas a la vez 181 | c) Para modificar, eliminar o añadir datos, no hará falta programar de la forma en la que lo hacen los lenguajes de tercera generación como C o Java 182 | 183 | **Regla 8:** Independencia física de los datos. 184 | a) Cambios en la física de la BD no afecta a las aplicaciones ni a los esquemas lógicos 185 | b) El acceso a las tablas (elemento lógico) no cambia porque la física de la base de datos cambie 186 | 187 | **Regla 9:** Independencias lógicas de los datos. 188 | a) Cambios en el esquema lógico (tablas) de la BD no afectan al resto de esquemas 189 | b) Si cambiamos nombres de tabla, o de columna o modificamos información de las filas, las aplicaciones (esquema externo) no se ven afectadas 190 | c) Es más difícil de conseguir 191 | 192 | **Regla 10:** Independencia de la integridad. 193 | a) Las reglas de integridad (restricciones) deben de ser gestionadas y almacenadas por el SGBD 194 | 195 | **Regla 11:** Independencia de la distribución. 196 | a) Que la base de datos se almacene o gestione de forma distribuida en varios servidores, no afecta al uso de esta ni a la programación de las aplicaciones de usuario 197 | b) El esquema lógico es el mismo independientemente de si la BD es distribuida o no 198 | 199 | **Regla 12:** La regla de la no subversión. 200 | a) La base de datos no permitirá que exista un lenguaje o forma de acceso, que permita saltarse las reglas anteriores. 201 | 202 | ![image](https://user-images.githubusercontent.com/114417877/196577914-49c6a91d-2f7f-4d34-8aca-15ce078e458f.png) 203 | 204 | 205 | ### Clase 4 Entidades y atributos 206 | 207 | Una **entidad** es algo similar a un objeto (programación orientada a objetos) y representa algo en el mundo real, incluso algo abstracto. Tienen atributos que son las cosas que los hacen ser una entidad, se diagraman dentro de cuadrados y **por convención se ponen en plural**. 208 | 209 | #### Atributos 210 | 211 | Los atributos se representan con óvalos, los que tienen multiples valores llevan dobles óvalos, también existen atributos compuestos, los atributos especiales son óvalos con linea punteada. 212 | 213 | Los **atributos compuestos** son aquellos que tienen atributos ellos mismos. 214 | 215 | Los **atributos llave** son aquellos que identifican a la entidad y no pueden ser repetidos, se diagraman con underline. Existen: 216 | 217 | - Naturales: Son inherentes al objeto como el número de serie 218 | - Clave artificial: No es inherente al objeto y se asigna de manera arbitraria 219 | 220 | ![src/Atributos-rdb.png](src/Atributos-rdb.png) 221 | 222 | #### Entidades 223 | 224 | **Entidad Fuerte:** No depende de ninguna entidad para existir 225 | 226 | **Entidades débiles:** No pueden existir sin una entidad fuerte y se representan con un cuadrado con doble línea. 227 | 228 | - Identidades débiles por identidad: No se diferencian entre sí más que por la clave de su identidad fuerte. 229 | - Identidades débiles por existencia: Se les asigna una clave propia. 230 | 231 | ![src/entidades_debiles.png](src/entidades_debiles.png) 232 | 233 | ![src/entidades_debiles_2.png](src/entidades_debiles_2.png) 234 | 235 | Las entidades debiles pueden serlo por dos motivos: 236 | 237 | **Por identidad:** No se diferencian entre si mas que por la clave de su entidad fuerte (clave isbn). 238 | 239 | **Por existencia:** Usando llave asignada por nosotros (un id). 240 | 241 | #### Clase 5 Entidades de Platzi Blog 242 | 243 | Nuestro proyecto será un manejador de Blogpost. Es un contexto familiar y nos representará retos muy interesantes. 244 | 245 | - Primer paso: Identificar las entidades (abstracciones del mundo real). 246 | 247 | ![src/entidades_platziblog.png](src/entidades_platziblog.png) 248 | 249 | - Segundo paso: Pensar en los atributos. 250 | 251 | ![src/entidades_platziblog_2.png](src/entidades_platziblog_2.png) 252 | 253 | ![src/entidades_platziblog_3.png](src/entidades_platziblog_3.png) 254 | 255 | ### Clase 6 Relaciones 256 | 257 | Las **relaciones** nos permiten ligar o unir nuestras diferentes entidades y se representan con rombos. Por convención se definen a través de verbos. 258 | 259 | ![src/relaciones.png](src/relaciones.png) 260 | 261 | Las relaciones tienen una propiedad llamada **cardinalidad** y tiene que ver con números. Cuántos de un lado pertenecen a cuántos del otro lado: 262 | 263 | Cardinalidad: 1 a 1 264 | Cardinalidad: 0 a 1 265 | Cardinalidad: 1 a N 266 | Cardinalidad: 0 a N 267 | 268 | #### Cardinalidad: 1 a 1 269 | 270 | ![src/cardinalidad_1_1.png](src/cardinalidad_1_1.png) 271 | 272 | 1 persona - tiene - 1 dato_contacto 273 | 1 dato_contacto - tiene - 1 persona. 274 | 275 | #### Cardinalidad: 0 a 1 276 | 277 | Algunos autores la denominan 1 a 1 opcional. 278 | En el ejemplo una sesión tiene un usuario, pero no necesariamente esta loggeado todo el tiempo 279 | 280 | ![src/cardinalidad_0_1.png](src/cardinalidad_0_1.png) 281 | 282 | #### Cardinalidad: 1 a N (1 a muchos) 283 | 284 | Un automóvil tiene N automóviles, pero 1 automóvil solo tiene 1 dueño. 285 | 286 | ![src/cardinalidad_1_N.png](src/cardinalidad_1_N.png) 287 | 288 | #### Cardinalidad: 0 a N 289 | 290 | ![src/33333333333333333333333333333333333333333333333333333333333333333333.png](src/cardinalidad_0_N.png) 291 | 292 | ### Clase 7 Multiples muchos 293 | 294 | Este tipo de cardinalidad es muy interesante por ello su clase aparte,se vera cuando veamos los campos clave. 295 | 296 | Cardinalidad: N a N 297 | 298 | ### Clase 8 Diagrama ER 299 | 300 | Un diagrama es como un mapa y nos ayuda a entender cuáles son las entidades con las que vamos a trabajar, cuáles son sus relaciones y qué papel van a jugar en las aplicaciones de la base de datos. 301 | 302 | ![src/diagrama_ER.png](src/diagrama_ER.png) 303 | 304 | ### Clase 9 Diagrama Físico: tipos de datos y constraints 305 | 306 | Para llevar a la práctica un diagrama debemos ir más allá y darle detalle con parámetros como: 307 | 308 | #### Tipos de dato 309 | 310 | **- Texto:** CHAR(n), VARCHAR(n), TEXT 311 | **- Números:** INTEGER, BIGINT, SMALLINT, DECIMAL(n,s), NUMERIC(n,s) 312 | **- Fecha/hora:** DATE, TIME, DATETIME, TIMESTAMP 313 | **- Lógicos:** BOOLEAN 314 | 315 | Nota: 316 | 317 | Char(8) reserva 8 espacios en memoria de forma fija, Varchar(8) hace lo mismo pero crece (1,2,3...8) de manera dinámica conforme los requieres y tiene un limite general de 255 caracteres. 318 | 319 | #### Constraints (Restricciones) 320 | 321 | **- NOT NULL:** Se asegura que la columna no tenga valores nulos 322 | **- UNIQUE:** Se asegura que cada valor en la columna no se repita 323 | **- PRIMARY KEY:** Es una combinación de NOT NULL y UNIQUE 324 | **- FOREIGN KEY:** Identifica de manera única una tupla en otra tabla 325 | **- CHECK:** Se asegura que el valor en la columna cumpla una condición dada 326 | **- DEFAULT:** Coloca un valor por defecto cuando no hay un valor especificado 327 | **- INDEX:** Se crea por columna para permitir búsquedas más rápidas, tiene la desventaja de que tiene que reindexar los registros cada vez, lo que vuelve muy lenta la operación de la bd. 328 | 329 | ### Clase 10 Diagrama Físico: normalizacion 330 | 331 | La normalización como su nombre lo indica nos ayuda a dejar todo de una forma normal. Esto obedece a las 12 reglas de Codd y nos permiten separar componentes en la base de datos: 332 | 333 | **Primera forma normal (1FN):** Atributos atómicos (Sin campos repetidos) 334 | **Segunda forma normal (2FN):** Cumple 1FN y cada campo de la tabla debe depender de una clave única. 335 | **Tercera forma normal (3FN):** Cumple 1FN y 2FN y los campos que NO son clave, NO deben tener dependencias. 336 | **Cuarta forma normal (4FN):** Cumple 1FN, 2FN, 3FN y los campos multivaluados se identifican por una clave única. 337 | 338 | ![src/diagrama_fisico_sin_normalizar.png](src/diagrama_fisico_sin_normalizar.png) 339 | 340 | **Primera forma normal (1FN):** Atributos atómicos (Sin campos repetidos) 341 | 342 | ![src/diagrama_fisico_1N.png](src/diagrama_fisico_1N.png) 343 | 344 | **Segunda forma normal (2FN):** Cumple 1FN y cada campo de la tabla debe depender de una clave única. 345 | 346 | ![src/diagrama_fisico_2N.png](src/diagrama_fisico_2N.png) 347 | 348 | **Tercera forma normal (3FN):** Cumple 1FN y 2FN y los campos que NO son clave, NO deben tener dependencias. 349 | 350 | ![src/diagrama_fisico_3N.png](src/diagrama_fisico_3N.png) 351 | 352 | **Cuarta forma normal (4FN):** Cumple 1FN, 2FN, 3FN y los campos multivaluados se identifican por una clave única. 353 | 354 | ![src/diagrama_fisico_4N.png](src/diagrama_fisico_4N.png) 355 | 356 | ### Clase 11 Diagrama Físico: normalizando Platziblog 357 | 358 | #### Diagram Entidad Relacion 359 | 360 | ![src/diagrama_ER.png](src/diagrama_ER.png) 361 | 362 | #### Diagrama fisico Paso 1 363 | 364 | Generar los campos básicos de cada entidad 365 | 366 | ![src/Diagrama_Fisico_paso_1.png](src/Diagrama_Fisico_paso_1.png) 367 | 368 | #### Diagrama fisico Paso 2 369 | 370 | Genera las relaciones entre cada entidad y asigna PK y FK. 371 | 372 | ![src/diagrama_fisico_paso_2.png](src/diagrama_fisico_paso_2.png) 373 | 374 | #### Diagrama fisico Paso 3 375 | 376 | ![src/diagrama_fisico_paso_2_N_N.png](src/diagrama_fisico_paso_2_N_N.png) 377 | 378 | Para manejar las relaciones muchos a muchos, es necesario generar una tabla intermedia de esta manera. 379 | 380 | ![src/diagrama_fisico_paso_3_N_N.png](src/diagrama_fisico_paso_3_N_N.png) 381 | 382 | Observa que post_id y etiqueta_id usan llaves compuestas para hacer combinaciones únicas, o podemos generar también la forma anterior con un id 383 | 384 | ### Clase 12 Formas normales en DB relacionales 385 | 386 | La normalización en las bases de datos relacionales es uno de esos temas que, por un lado es sumamente importante y por el otro suena algo esotérico. Vamos a tratar de entender las formas normales (FN) de una manera simple para que puedas aplicarlas en tus proyectos profesionales. 387 | 388 | #### Primera Forma Normal (1FN) 389 | 390 | Esta FN nos ayuda a eliminar los valores repetidos y no atómicos dentro de una base de datos. 391 | 392 | Formalmente, una tabla está en primera forma normal si: 393 | 394 | - Todos los atributos son atómicos. Un atributo es atómico si los elementos del dominio son simples e indivisibles. 395 | - No debe existir variación en el número de columnas. 396 | - Los campos no clave deben identificarse por la clave (dependencia funcional). 397 | - Debe existir una independencia del orden tanto de las filas como de las columnas; es decir, si los datos cambian de orden no deben cambiar sus significados. 398 | 399 | Se traduce básicamente a que si tenemos campos compuestos como por ejemplo “nombre_completo” que en realidad contiene varios datos distintos, en este caso podría ser “nombre”, “apellido_paterno”, “apellido_materno”, etc. 400 | 401 | Se traduce básicamente a que si tenemos campos compuestos como por ejemplo “nombre_completo” que en realidad contiene varios datos distintos, en este caso podría ser “nombre”, “apellido_paterno”, “apellido_materno”, etc. 402 | 403 | Los campos deben ser tales que si reordenamos los registros o reordenamos las columnas, cada dato no pierda el significado. 404 | 405 | #### Segunda Forma Normal (2FN) 406 | 407 | Esta FN nos ayuda a diferenciar los datos en diversas entidades. 408 | 409 | Formalmente, una tabla está en segunda forma normal si: 410 | 411 | - Está en 1FN 412 | - Sí los atributos que no forman parte de ninguna clave dependen de forma completa de la clave principal. Es decir, que no existen dependencias parciales. 413 | - Todos los atributos que no son clave principal deben depender únicamente de la clave principal. 414 | 415 | Lo anterior quiere decir que sí tenemos datos que pertenecen a diversas entidades, cada entidad debe tener un campo clave separado. Por ejemplo: 416 | 417 | ![diagrama_fisico_1N.png](src/diagrama_fisico_1N.png) 418 | 419 | En la tabla anterior tenemos por lo menos dos entidades que debemos separar para que cada uno dependa de manera única de su campo llave o ID. En este caso las entidades son alumnos por un lado y materias por el otro, ya que una materia. En el ejemplo anterior, quedaría de la siguiente manera: 420 | 421 | ![diagrama_fisico_2N.png](src/diagrama_fisico_2N.png) 422 | 423 | #### Tercera Forma Normal (3FN) 424 | 425 | Esta FN nos ayuda a separar conceptualmente las entidades que no son dependientes. 426 | 427 | Formalmente, una tabla está en tercera forma normal si: 428 | 429 | Se encuentra en 2FN 430 | No existe ninguna dependencia funcional transitiva en los atributos que no son clave 431 | 432 | Esta FN se traduce en que aquellos datos que no pertenecen a la entidad deben tener una independencia de las demás y debe tener un campo clave propio. Continuando con el ejemplo anterior, al aplicar la 3FN separamos la tabla alumnos ya que contiene datos de los cursos en ella quedando de la siguiente manera. 433 | 434 | ![diagrama_fisico_3N.png](src/diagrama_fisico_3N.png) 435 | 436 | #### Cuarta Forma Normal (4FN) 437 | 438 | Esta FN nos **trata de atomizar los datos multivaluados** de manera que no tengamos datos repetidos entre rows. 439 | 440 | Formalmente, una tabla está en cuarta forma normal si: 441 | 442 | - Se encuentra en 3FN 443 | - Los campos multivaluados se identifican por una clave única 444 | 445 | Esta FN trata de eliminar registros duplicados en una entidad, es decir que cada registro tenga un contenido único y de necesitar repetir la data en los resultados se realiza a través de claves foráneas. 446 | 447 | Aplicado al ejemplo anterior la tabla materia se independiza y se relaciona con el alumno a través de una tabla transitiva o pivote, de tal manera que si cambiamos el nombre de la materia solamente hay que cambiarla una vez y se propagara a cualquier referencia que haya de ella. 448 | 449 | ![diagrama_fisico_4N](src/diagrama_fisico_4N.png) 450 | 451 | De esta manera, aunque parezca que la información se multiplicó, en realidad la descompusimos o normalizamos de manera que a un sistema le sea fácil de reconocer y mantener la consistencia de los datos. 452 | 453 | Algunos autores precisan una 5FN que hace referencia a que después de realizar esta normalización a través de uniones (JOIN) permita regresar a la data original de la cual partió. 454 | 455 | ## Modulo 3 RDBMS (MySQL) o cómo hacer lo anterior de manera práctica 456 | 457 | ### Clase 13 RDB Qué 458 | 459 | **RDBMS** significa Relational Database Management System o sistema manejador de bases de datos relacionales. Es un programa que se encarga de seguir las reglas de Codd y se puede utilizar de manera programática. 460 | 461 | ### Clase 14 Instalación local de un RDBMS (Windows) 462 | 463 | Hay dos maneras de acceder a manejadores de bases de datos: 464 | 465 | - Instalar en máquina local un administrador de bases relacional. 466 | -Tener ambientes de desarrollo especiales o servicios cloud. 467 | 468 | En este curso usaremos MySQL porque tiene un impacto histórico siendo muy utilizado y además es software libre y gratuito. La versión 5.6.43 es compatible con la mayoría de aplicaciones y frameworks. 469 | 470 | - Root es el usuario principal que tendrá todos los permisos y por lo tanto en ambientes de producción hay que tener mucho cuidado al configurarlo. 471 | 472 | Link 473 | 474 | 475 | Procedimiento: 476 | 477 | - Descargamos e instalamos como es usual en windows 478 | - En el instalador seleccionamos la opción custom 479 | - Instalamos MySQL Server la version 64bts 480 | - Instalamos MySQL Workbench (ignoramos lo demás) 481 | 482 | ![Instalador_mysql_1](src/Instalador_mysql_1.png) 483 | ![Instalador_mysql_2](src/Instalador_mysql_2.png) 484 | ![Instalador_mysql_3](src/Instalador_mysql_3.png) 485 | 486 | ### Clase 15 Instalación local de un RDBMS (Mac) 487 | 488 | La instalación es similar al todos los instaladores en mac, descarga el archivo .dmg 489 | 490 | 491 | 492 | Para macOS debes descargar workbench aparte. 493 | 494 | 495 | 496 | ### Clase 16 Instalación local de un RDBMS (Ubuntu) 497 | 498 | Visita la dirección de descarga de la versión de comunidad de MySql 499 | 500 | 501 | Dirígete a la sección de selección de descargas y selecciona tu distribución de Linux. En nuestro caso Ubuntu y selecciona posteriormente la versión que estás utilizando actualmente, en nuestro caso 18.04 de 64 bits. 502 | 503 | Los pasos son similares a los otros sistemas, descarga el paquete .deb, también puedes instalar desde la consola 504 | 505 | sudo apt-get install mysql-server 506 | 507 | ### Clase 17 Clientes Graficos 508 | 509 | Observamos el preview y pasos para crear un schema en Mysql workbench 510 | 511 | ![worckbench_1](src/worckbench_1.png) 512 | 513 | ![worckbench_2](src/worckbench_2.png) 514 | 515 | ![worckbench_3](src/worckbench_3.png) 516 | 517 | ### Clase 18 Servicios administrados 518 | 519 | Hoy en día muchas empresas ya no tienen instalados en sus servidores los RDBMS sino que los contratan a otras personas. Estos servicios administrados cloud te permiten concentrarte en la base de datos y no en su administración y actualización. 520 | 521 | Introducción a google cloud, toma el curso para configurarlo. 522 | 523 | ## Modulo 4 SQL hasta en la sopa 524 | 525 | ### Clase 19 Historia de SQL 526 | 527 | **SQL** significa Structured Query Language y tiene una estructura clara y fija. Su objetivo es hacer un solo lenguaje para consultar cualquier manejador de bases de datos volviéndose un gran estándar. 528 | 529 | Ahora existe el **NOSQL** o Not Only Structured Query Language que significa que no sólo se utiliza SQLen las bases de datos no relacionales. 530 | 531 | ### Clase 20 DDL create 532 | 533 | SQL tiene dos grandes sublenguajes: 534 | 535 | **DDL o Data Definition Language** que nos ayuda a crear la estructura de una base de datos. Existen 3 grandes comandos: 536 | 537 | **- Create**: Nos ayuda a crear bases de datos, tablas, vistas, índices, etc. 538 | 539 | -**Alter**: Ayuda a alterar o modificar entidades. 540 | 541 | **- Drop**: Nos ayuda a borrar. Hay que tener cuidado al utilizarlo. 542 | 543 | **3 objetos que manipularemos con el lenguaje DDL:** 544 | 545 | - Database o bases de datos 546 | - Table o tablas. Son la traducción a SQL de las entidades 547 | - View o vistas: Se ofrece la proyección de los datos de la base de datos de forma entendible. 548 | 549 | ![SQL_create_database](src/SQL_create.png) 550 | 551 | ![SQL_create](src/SQL_create_database.png) 552 | 553 | Seleccionamos el schema como default, de forma gráfica aunque con la terminal seria el use database. 554 | 555 | ![worckbench_default_schema.png](src/worckbench_default_schema.png) 556 | 557 | El comando Create Table 558 | 559 | ![create_table_slide](src/create_table_slide.png) 560 | 561 | El creamos con workbench la tabla anterior, definimos cada uno de los campos de manera sencilla posterior damos apply 562 | 563 | ![worckbench_new_table_1.png](src/worckbench_new_table_1.png) 564 | 565 | ![worckbench_new_table_2_apply.png](src/worckbench_new_table_2_apply.png) 566 | 567 | ![worckbench_new_table_3.png](src/worckbench_new_table_3.png) 568 | 569 | ### Clase 21 CREATE VIEW y DDL ALTER 570 | 571 | #### Create view 572 | 573 | ![workbench_create_view.png](src/workbench_create_view.png) 574 | 575 | Para iniciar el ejercicio insertamos datos en la BD, copiamos la sentencia 576 | `SELECT * FROM platziblog.people;`, nos movemos a views y damos click derecho y create view. 577 | 578 | Views ya cuenta con la parte inicial de la sentencia de create view, pegamos debajo el select y damos apply 579 | 580 | ```mysql 581 | CREATE VIEW 'new_view' AS 582 | SELECT * FROM platziblog.people; 583 | ``` 584 | 585 | ![create_view1](src/create_view1.png) 586 | 587 | ![create_view2](src/create_view2.png) 588 | 589 | ![create_view3](src/create_view3.png) 590 | 591 | ![create_view4](src/create_view4.png) 592 | 593 | Parece redundante la información, pero podemos estructurar las consultas junto con otras tablas, y estas vistas mantendrán la consulta sin necesidad de acer la de nuevo incrementando los datos de forma automática. 594 | 595 | #### Alter Table 596 | 597 | !![alter_table_1](src/alter_table_1.png) 598 | 599 | !![alter_table_2](src/alter_table_2.png) 600 | 601 | !![alter_table_3](src/alter_table_3.png) 602 | 603 | !![alter_table_4](src/alter_table_4.png) 604 | 605 | !![alter_table_1](src/alter_table_1.png) 606 | 607 | #### Drop Column Borrando una columna 608 | 609 | Click derecho y deled selected 610 | 611 | !![drop_column_1](src/drop_column_1.png) 612 | 613 | !![drop_column_1](src/drop_column_2.png) 614 | 615 | ### Clase 22 DDL drop 616 | 617 | Está puede ser la sentencia ¡más peligrosa! (????), sobre todo cuando somos principiantes. Básicamente borra o desaparece de nuestra base de datos algún elemento. 618 | 619 | Pasos para borrar una tabla 620 | 621 | ![drop_table](src/drop_table.png) 622 | 623 | ![drop_table_1](src/drop_table_1.png) 624 | 625 | ![drop_table_2](src/drop_table_2.png) 626 | 627 | ![drop_table_3](src/drop_table_3.png) 628 | 629 | Pasos para borrar la base de datos o schema 630 | 631 | ![drop_schema_1](src/drop_schema_1.png) 632 | 633 | ![drop_schema_2](src/drop_schema_2.png) 634 | 635 | ![drop_schema_3](src/drop_schema_3.png) 636 | 637 | ![drop_schema_4](src/drop_schema_4.png) 638 | 639 | Nota: las herramientas del DDL se utilizan mayormente en la fase de construcción y mantenimiento de las bases de datos, la manipulación u operación se hace con DML. 640 | 641 | ### Clase 23 DML 642 | 643 | **DML** trata del contenido de la base de datos. Son las siglas de Data Manipulation Language y sus comandos son: 644 | 645 | **- Insert:** Inserta o agrega nuevos registros a la tabla. 646 | **- Update:** Actualiza o modifica los datos que ya existen. 647 | **- Delete:** Esta sentencia es riesgosa porque puede borrar el contenido de una tabla. 648 | **- Select:** Trae información de la base de datos. 649 | 650 | #### Insert 651 | 652 | Crearemos este comando en una BD nueva llamada platzi_test con la con la estructura del ejercicio anterior 653 | 654 | ![insert_command.png](src/insert_command.png) 655 | 656 | En la seccion de query realizamos el comando 657 | 658 | ```sql 659 | INSERT INTO people(last_name, first_name, address, city) 660 | VALUES ('Hernandez', 'Laura', 'Calle 21', 'Monterrey'); 661 | ``` 662 | 663 | Insertamos los valores con el símbolo de rayo o con ctrl + enter 664 | 665 | ![insert_command_1.png](src/insert_command_1.png) 666 | 667 | ![insert_command_2.png](src/insert_command_2.png) 668 | 669 | #### Update 670 | 671 | ![update_command.png](src/update_command.png) 672 | 673 | comandos 674 | 675 | ```sql 676 | UPDATE people SET last_name = 'Chavez', city = 'Merida' 677 | WHERE person_id = 1; 678 | ``` 679 | 680 | ![update_command_1.png](src/update_command_1.png) 681 | 682 | ![update_command_2.png](src/update_command_2.png) 683 | 684 | #### Delete 685 | 686 | ```sql 687 | DELETE FROM people WHERE person_id = 1; 688 | ``` 689 | 690 | ![delete__command_1.png](src/delete__command_1.png) 691 | 692 | #### Select 693 | 694 | ![select_command.png](src/select_command.png) 695 | 696 | ```sql 697 | SELECT first_name, last_name FROM people; 698 | ``` 699 | 700 | ![select_command_1.png](src/select_command_1.png) 701 | 702 | ### Clase 24 Que tan standard es SQL 703 | 704 | La utilidad más grande de SQL fue unificar la forma en la que pensamos y hacemos preguntas a un repositorio de datos. Ahora que nacen nuevas bases de datos igualmente siguen tomando elementos de SQL. 705 | 706 | Practicamos lo anterior como repaso. 707 | 708 | ```sql 709 | CREATE TABLE people( 710 | person_id int, 711 | last_name VARCHAR(255), 712 | first_name VARCHAR(255), 713 | address VARCHAR(255), 714 | city VARCHAR(255) 715 | ); 716 | 717 | INSERT INTO people (last_name, first_name, address, city) 718 | VALUES (‘Hernandez’, ‘Laura’, ‘Calle 21’, ‘Monterrey’); 719 | . 720 | 721 | SELECT first_name, last_name FROM people; 722 | 723 | 724 | DROP TABLE people; 725 | ``` 726 | 727 | Realizamos lo mismo en una instancia de postgre gcloud 728 | 729 | Tal cual pegamos crear tabla 730 | 731 | ```sql 732 | CREATE TABLE people( 733 | person_id int, 734 | last_name VARCHAR(255), 735 | first_name VARCHAR(255), 736 | address VARCHAR(255), 737 | city VARCHAR(255) 738 | ); 739 | ``` 740 | 741 | revisamos las tablas con 742 | 743 | ```sql 744 | \dt 745 | ``` 746 | 747 | Hacemos las operaciones anteriores 748 | 749 | ```sql 750 | 751 | INSERT INTO people (last_name, first_name, address, city) 752 | VALUES (‘Hernandez’, ‘Laura’, ‘Calle 21’, ‘Monterrey’); 753 | . 754 | 755 | SELECT first_name, last_name FROM people; 756 | 757 | 758 | DROP TABLE people; 759 | ``` 760 | 761 | El DDL y DML en ambos motores de bases de datos es estandar, cambian solo funciones internas. 762 | 763 | ### Clase 25 Creando Platziblog: tablas independientes 764 | 765 | - Una buena práctica es comenzar creando las entidades que no tienen una llave foránea. 766 | - Generalmente en los nombres de bases de datos se evita usar eñes o acentos para evitar problemas en los manejadores de las bases de datos. 767 | 768 | ![diagrama_fisico_paso_2](src/diagrama_fisico_paso_2.png) 769 | 770 | Creamos el schema `platziblog` y seleccionamos como default y creamos las siguientes tablas 771 | 772 | - categorías 773 | 774 | ![platziblog_tabla_etiquetas_1](src/platziblog_tabla_caracteristicas_1.png) 775 | 776 | ![platziblog_tabla_caracteristicas_2](src/platziblog_tabla_caracteristicas_2.png) 777 | 778 | Creamos de igual forma la tabla Etiquetas 779 | 780 | ![platziblog_tabla_etiquetas_1](src/platziblog_tabla_etiquetas_1.png) 781 | 782 | ![platziblog_tabla_etiquetas_2](src/platziblog_tabla_etiquetas_2.png) 783 | 784 | Tabla Usuarios 785 | 786 | ![platziblog_tabla_usuarios_1.png](src/platziblog_tabla_usuarios_1.png) 787 | 788 | ![platziblog_tabla_usuarios_2.png](src/platziblog_tabla_usuarios_2.png) 789 | 790 | ### Clase 26 Creando Platziblog: tablas transitivas 791 | 792 | Creando Platziblog: tablas dependientes 793 | El comando **“cascade”** sirve para que cada que se haga un update en la tabla principal, se refleje también en la tabla en la que estamos creando la relación. 794 | 795 | ![platziblog_tabla_post_1.png](src/platziblog_tabla_post_1.png) 796 | 797 | ![platziblog_tabla_post_2.png](src/platziblog_tabla_post_2.png) 798 | 799 | Vamos a la pestaña Foreign Key y asignamos las relaciones. 800 | 801 | Asignamos la llave foranea del usuario_id 802 | 803 | ![platziblog_tabla_post_fk_usuario_id.png](src/platziblog_tabla_post_fk_usuario_id.png) 804 | 805 | ![platziblog_tabla_post_fk_categorias_id.png](src/platziblog_tabla_post_fk_categorias_id.png) 806 | 807 | ![platziblog_tabla_post_fk_categorias_id_1.png](src/platziblog_tabla_post_fk_categorias_id_1.png) 808 | 809 | ### Clase 27 Creando Platziblog: tablas transitivas 810 | 811 | - Las tablas transitivas sirven como puente para unir dos tablas. No tienen contenido semántico. 812 | 813 | - **Reverse Engineer** nos reproduce el esquema del cual nos basamos para crear nuestras tablas. Es útil cuando llegas a un nuevo trabajo y quieres entender cuál fue la mentalidad que tuvieron al momento de crear las bases de datos. 814 | 815 | Creamos la tabla comentarios. 816 | 817 | ![platziblog_tabla_comentarios.png](src/platziblog_tabla_comentarios.png) 818 | 819 | ![platziblog_tabla_comentarios_1.png](src/platziblog_tabla_comentarios_1.png) 820 | 821 | Creamos las llaves foráneas para los comentarios de los usuarios 822 | 823 | ![platziblog_tabla_comentarios_usuarios_fk_1.png](src/platziblog_tabla_comentarios_usuarios_fk_1.png) 824 | 825 | ![platziblog_tabla_comentarios_usuarios_fk_2.png](src/platziblog_tabla_comentarios_usuarios_fk_2.png) 826 | 827 | Creamos las llaves foráneas para los comentarios de los posts 828 | 829 | ![platziblog_tabla_comentarios_usuarios_fk_1.png](src/platziblog_tabla_comentarios_usuarios_fk_1.png) 830 | 831 | ![platziblog_tabla_comentarios_usuarios_fk_2.png](src/platziblog_tabla_comentarios_usuarios_fk_2.png) 832 | 833 | Ahora solo nos queda crear la tabla intermedia para romper la relacion muchos a muchos. 834 | 835 | ![diagrama_fisico_paso_3_N_N.png](src/diagrama_fisico_paso_3_N_N.png) 836 | 837 | Para ello creamos la tabla intermedia post_etiquetas 838 | 839 | ![platziblog_tabla_post_etiquetas.png](src/platziblog_tabla_post_etiquetas.png) 840 | 841 | ![platziblog_tabla_post_etiquetas_1.png](src/platziblog_tabla_post_etiquetas_1.png) 842 | 843 | Ligamos las llaves foráneas para post_id 844 | 845 | ![platziblog_tabla_post_etiquetas_fk_1.png](src/platziblog_tabla_post_etiquetas_fk_1.png) 846 | 847 | ![platziblog_tabla_post_etiquetas_fk_2.png](src/platziblog_tabla_post_etiquetas_fk_2.png) 848 | 849 | Ligamos las llaves foráneas para etiquetas_id 850 | 851 | ![platziblog_tabla_post_etiquetas_etiquetas_fk_1.png](src/platziblog_tabla_post_etiquetas_etiquetas_fk_1.png) 852 | 853 | ![platziblog_tabla_post_etiquetas_etiquetas_fk_2.png](src/platziblog_tabla_post_etiquetas_etiquetas_fk_2.png) 854 | 855 | #### Reverse Engineer 856 | 857 | Seleccionamos la opción Database para acceder a reverse engineer 858 | ![reverse_engineer_1](src/reverse_engineer_1.png) 859 | 860 | ![reverse_engineer_2](src/reverse_engineer_2.png) 861 | 862 | ![reverse_engineer_3](src/reverse_engineer_3.png) 863 | 864 | ![reverse_engineer_4](src/reverse_engineer_4.png) 865 | 866 | ![reverse_engineer_5](src/reverse_engineer_5.png) 867 | 868 | ![reverse_engineer_6](src/reverse_engineer_6.png) 869 | 870 | ![reverse_engineer_7](src/reverse_engineer_7.png) 871 | 872 | ### Clase 28 Por qué las consultas son tan importantes 873 | 874 | Las consultas o queries a una base de datos son una parte fundamental ya que esto podría salvar un negocio o empresa. 875 | Alrededor de las consultas a las bases de datos se han creado varias especialidades como ETL o transformación de datos, business intelligence e incluso machine learning. 876 | 877 | ### Clase 29 Estructura básica de un Query 878 | 879 | Los queries son la forma en la que estructuramos las preguntas que se harán a la base de datos. Transforma preguntas en sintaxis. 880 | 881 | El query tiene básicamente 2 partes: SELECT y FROM y puede aparecer una tercera como WHERE. 882 | 883 | La estrellita o asterisco (*) quiere decir que vamos a seleccionar todo sin filtrar campos. 884 | 885 | Antes de iniciar la clase corre este script 886 | 887 | ```sql 888 | Script de la base datos platziblog 889 | 890 | --creamos la base datos :platziblog 891 | 892 | -- nos ubicamos en la base datos platziblog 893 | use platziblog; 894 | 895 | -- CREACIONES DE TABLAS 896 | -- Eliminacion de tablas, va en ese orden por los FK 897 | drop table comentarios; 898 | drop table posts_etiquetas; 899 | drop table posts; 900 | drop table etiquetas; 901 | drop table usuarios; 902 | drop table categorias; 903 | 904 | 905 | -- CREACIONES DE TABLAS 906 | -- Creación de la tabla usuarios 907 | CREATE TABLE `usuarios` ( 908 | `id` int(11) NOT NULL AUTO_INCREMENT, 909 | `login` varchar(30) NOT NULL, 910 | `password` varchar(32) NOT NULL, 911 | `nickname` varchar(40) NOT NULL, 912 | `email` varchar(40) NOT NULL, 913 | PRIMARY KEY (`id`), 914 | UNIQUE KEY`email_UNIQUE` (`email`) 915 | ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; 916 | 917 | 918 | -- Creación de la tabla categorias 919 | CREATE TABLE `categorias` ( 920 | `id` int(11) NOT NULL AUTO_INCREMENT, 921 | `nombre_categoria`varchar(30) NOT NULL, 922 | PRIMARY KEY (`id`) 923 | ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; 924 | 925 | 926 | -- Creación de la tabla etiquetas 927 | CREATE TABLE`etiquetas` ( 928 | `id`int(11) NOT NULL AUTO_INCREMENT, 929 | `nombre_etiqueta`varchar(30) NOT NULL, 930 | PRIMARY KEY (`id`) 931 | ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; 932 | 933 | 934 | -- Creación de la tabla posts 935 | CREATE TABLE `posts` ( 936 | `id` int(11) NOT NULL AUTO_INCREMENT, 937 | `titulo` varchar(130) NOT NULL, 938 | `fecha_publicacion` timestamp NULL DEFAULT NULL, 939 | `contenido` text NOT NULL, 940 | `estatus` char(8) DEFAULT 'activo', 941 | `usuario_id` int(11) DEFAULT NULL, 942 | `categoria_id` int(11) DEFAULT NULL, 943 | PRIMARY KEY (`id`), 944 | KEY `posts_usuarios_idx` (`usuario_id`), 945 | KEY `posts_categorias_idx` (`categoria_id`), 946 | CONSTRAINT `posts_categorias` FOREIGN KEY (`categoria_id`) REFERENCES `categorias` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, 947 | CONSTRAINT `posts_usuarios` FOREIGN KEY (`usuario_id`) REFERENCES `usuarios` (`id`) ON DELETE NO ACTION ON UPDATE CASCADE 948 | ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; 949 | 950 | -- Creación de la tabla comentarios 951 | CREATE TABLE `comentarios` ( 952 | `id` int(11) NOT NULL AUTO_INCREMENT, 953 | `cuerpo_comentario` text NOT NULL, 954 | `usuario_id` int(11) NOT NULL, 955 | `post_id` int(11) NOT NULL, 956 | PRIMARY KEY (`id`), 957 | KEY `comentarios_usuario_idx` (`usuario_id`), 958 | KEY `comentarios_post_idx` (`post_id`), 959 | CONSTRAINT `comentarios_post` FOREIGN KEY (`post_id`) REFERENCES `posts` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, 960 | CONSTRAINT `comentarios_usuario` FOREIGN KEY (`usuario_id`) REFERENCES `usuarios` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION 961 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 962 | 963 | 964 | -- Creación de la tabla posts_etiquetas 965 | CREATE TABLE `posts_etiquetas` ( 966 | `id` int(11) NOT NULL AUTO_INCREMENT, 967 | `post_id` int(11) NOT NULL, 968 | `etiqueta_id` int(11) NOT NULL, 969 | PRIMARY KEY (`id`), 970 | KEY `postsetiquetas_post_idx` (`post_id`), 971 | KEY `postsetiquetas_etiquetas_idx` (`etiqueta_id`), 972 | CONSTRAINT `postsetiquetas_etiquetas` FOREIGN KEY (`etiqueta_id`) REFERENCES `etiquetas` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, 973 | CONSTRAINT `postsetiquetas_post` FOREIGN KEY (`post_id`) REFERENCES `posts` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION 974 | ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; 975 | 976 | 977 | -- INSERCIÓN DE VALORES A LAS TABLAS 978 | -- Insert en la tabla usuarios 979 | INSERT INTO usuarios (login,password,nickname,email) VALUES ('israel','1234','israel','israel@platziblog.com'); 980 | INSERT INTO usuarios (login,password,nickname,email) VALUES ('monica','1234','Moni','monica@platziblog.com'); 981 | INSERT INTO usuarios (login,password,nickname,email) VALUES ('laura','1234','Lau','laura@platziblog.com'); 982 | INSERT INTO usuarios (login,password,nickname,email) VALUES ('edgar','5678','Ed','edgar@platziblog.com'); 983 | INSERT INTO usuarios (login,password,nickname,email) VALUES ('perezoso','5678','Oso Pérez','perezoso@platziblog.com'); 984 | 985 | -- Insert en la tabla categorias 986 | INSERT INTO categorias (nombre_categoria) VALUES ('Ciencia'); 987 | INSERT INTO categorias (nombre_categoria) VALUES ('Tecnología'); 988 | INSERT INTO categorias (nombre_categoria) VALUES ('Deportes'); 989 | INSERT INTO categorias (nombre_categoria) VALUES ('Espectáculos'); 990 | INSERT INTO categorias (nombre_categoria) VALUES ('Economía'); 991 | 992 | -- Insert en la tabla etiquetas 993 | INSERT INTO etiquetas (nombre_etiqueta) VALUES ('Robótica'); 994 | INSERT INTO etiquetas (nombre_etiqueta) VALUES ('Computación'); 995 | INSERT INTO etiquetas (nombre_etiqueta) VALUES ('Teléfonos Móviles'); 996 | INSERT INTO etiquetas (nombre_etiqueta) VALUES ('Automovilismo'); 997 | INSERT INTO etiquetas (nombre_etiqueta) VALUES ('Campeonatos'); 998 | INSERT INTO etiquetas (nombre_etiqueta) VALUES ('Equipos'); 999 | INSERT INTO etiquetas (nombre_etiqueta) VALUES ('Bolsa de valores'); 1000 | INSERT INTO etiquetas (nombre_etiqueta) VALUES ('Inversiones'); 1001 | INSERT INTO etiquetas (nombre_etiqueta) VALUES ('Brokers'); 1002 | INSERT INTO etiquetas (nombre_etiqueta) VALUES ('Celebridades'); 1003 | INSERT INTO etiquetas (nombre_etiqueta) VALUES ('Eventos'); 1004 | INSERT INTO etiquetas (nombre_etiqueta) VALUES ('Moda'); 1005 | INSERT INTO etiquetas (nombre_etiqueta) VALUES ('Avances'); 1006 | INSERT INTO etiquetas (nombre_etiqueta) VALUES ('Nobel'); 1007 | INSERT INTO etiquetas (nombre_etiqueta) VALUES ('Matemáticas'); 1008 | INSERT INTO etiquetas (nombre_etiqueta) VALUES ('Química'); 1009 | INSERT INTO etiquetas (nombre_etiqueta) VALUES ('Física'); 1010 | INSERT INTO etiquetas (nombre_etiqueta) VALUES ('Largo plazo'); 1011 | INSERT INTO etiquetas (nombre_etiqueta) VALUES ('Bienes Raíces'); 1012 | INSERT INTO etiquetas (nombre_etiqueta) VALUES ('Estilo'); 1013 | 1014 | -- Insert en la tabla posts 1015 | INSERT INTO posts (id, titulo, fecha_publicacion, contenido, estatus, usuario_id, categoria_id) 1016 | VALUES (1,'Se presenta el nuevo teléfono móvil en evento', '2030-04-05 00:00:00', 'Phasellus laoreet eros nec vestibulum varius. Nunc id efficitur lacus, non imperdiet quam. Aliquam porta, tellus at porta semper, felis velit congue mauris, eu pharetra felis sem vitae tortor. Curabitur bibendum vehicula dolor, nec accumsan tortor ultrices ac. Vivamus nec tristique orci. Nullam fringilla eros magna, vitae imperdiet nisl mattis et. Ut quis malesuada felis. Proin at dictum eros, eget sodales libero. Sed egestas tristique nisi et tempor. Ut cursus sapien eu pellentesque posuere. Etiam eleifend varius cursus.\n\nNullam viverra quam porta orci efficitur imperdiet. Quisque magna erat, dignissim nec velit sit amet, hendrerit mollis mauris. Mauris sapien magna, consectetur et vulputate a, iaculis eget nisi. Nunc est diam, aliquam quis turpis ac, porta mattis neque. Quisque consequat dolor sit amet velit commodo sagittis. Donec commodo pulvinar odio, ut gravida velit pellentesque vitae. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.\n\nMorbi vulputate ante quis elit pretium, ut blandit felis aliquet. Aenean a massa a leo tristique malesuada. Curabitur posuere, elit sed consectetur blandit, massa mauris tristique ante, in faucibus elit justo quis nisi. Ut viverra est et arcu egestas fringilla. Mauris condimentum, lorem id viverra placerat, libero lacus ultricies est, id volutpat metus sapien non justo. Nulla facilisis, sapien ut vehicula tristique, mauris lectus porta massa, sit amet malesuada dolor justo id lectus. Suspendisse sit amet tempor ligula. Nam sit amet nisl non magna lacinia finibus eget nec augue. Aliquam ornare cursus dapibus. Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n\nDonec ornare sem eget massa pharetra rhoncus. Donec tempor sapien at posuere porttitor. Morbi sodales efficitur felis eu scelerisque. Quisque ultrices nunc ut dignissim vehicula. Donec id imperdiet orci, sed porttitor turpis. Etiam volutpat elit sed justo lobortis, tincidunt imperdiet velit pretium. Ut convallis elit sapien, ac egestas ipsum finibus a. Morbi sed odio et dui tincidunt rhoncus tempor id turpis.\n\nProin fringilla consequat imperdiet. Ut accumsan velit ac augue sollicitudin porta. Phasellus finibus porttitor felis, a feugiat purus tempus vel. Etiam vitae vehicula ex. Praesent ut tellus tellus. Fusce felis nunc, congue ac leo in, elementum vulputate nisi. Duis diam nulla, consequat ac mauris quis, viverra gravida urna.', 'activo', 1, 1); 1017 | INSERT INTO posts (titulo,fecha_publicacion,contenido,estatus,usuario_id,categoria_id) 1018 | VALUES ('Tenemos un nuevo auto inteligepostsnte','2025-05-04 00:00:00','Phasellus laoreet eros nec vestibulum varius. Nunc id efficitur lacus, non imperdiet quam. Aliquam porta, tellus at porta semper, felis velit congue mauris, eu pharetra felis sem vitae tortor. Curabitur bibendum vehicula dolor, nec accumsan tortor ultrices ac. Vivamus nec tristique orci. Nullam fringilla eros magna, vitae imperdiet nisl mattis et. Ut quis malesuada felis. Proin at dictum eros, eget sodales libero. Sed egestas tristique nisi et tempor. Ut cursus sapien eu pellentesque posuere. Etiam eleifend varius cursus.\n\nNullam viverra quam porta orci efficitur imperdiet. Quisque magna erat, dignissim nec velit sit amet, hendrerit mollis mauris. Mauris sapien magna, consectetur et vulputate a, iaculis eget nisi. Nunc est diam, aliquam quis turpis ac, porta mattis neque. Quisque consequat dolor sit amet velit commodo sagittis. Donec commodo pulvinar odio, ut gravida velit pellentesque vitae. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.\n\nMorbi vulputate ante quis elit pretium, ut blandit felis aliquet. Aenean a massa a leo tristique malesuada. Curabitur posuere, elit sed consectetur blandit, massa mauris tristique ante, in faucibus elit justo quis nisi. Ut viverra est et arcu egestas fringilla. Mauris condimentum, lorem id viverra placerat, libero lacus ultricies est, id volutpat metus sapien non justo. Nulla facilisis, sapien ut vehicula tristique, mauris lectus porta massa, sit amet malesuada dolor justo id lectus. Suspendisse sit amet tempor ligula. Nam sit amet nisl non magna lacinia finibus eget nec augue. Aliquam ornare cursus dapibus. Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n\nDonec ornare sem eget massa pharetra rhoncus. Donec tempor sapien at posuere porttitor. Morbi sodales efficitur felis eu scelerisque. Quisque ultrices nunc ut dignissim vehicula. Donec id imperdiet orci, sed porttitor turpis. Etiam volutpat elit sed justo lobortis, tincidunt imperdiet velit pretium. Ut convallis elit sapien, ac egestas ipsum finibus a. Morbi sed odio et dui tincidunt rhoncus tempor id turpis.\n\nProin fringilla consequat imperdiet. Ut accumsan velit ac augue sollicitudin porta. Phasellus finibus porttitor felis, a feugiat purus tempus vel. Etiam vitae vehicula ex. Praesent ut tellus tellus. Fusce felis nunc, congue ac leo in, elementum vulputate nisi. Duis diam nulla, consequat ac mauris quis, viverra gravida urna.','activo',2,2); 1019 | INSERT INTO posts (titulo,fecha_publicacion,contenido,estatus,usuario_id,categoria_id) 1020 | VALUES ('Ganador del premio Nobel por trabajo en genética','2023-12-22 00:00:00','Phasellus laoreet eros nec vestibulum varius. Nunc id efficitur lacus, non imperdiet quam. Aliquam porta, tellus at porta semper, felis velit congue mauris, eu pharetra felis sem vitae tortor. Curabitur bibendum vehicula dolor, nec accumsan tortor ultrices ac. Vivamus nec tristique orci. Nullam fringilla eros magna, vitae imperdiet nisl mattis et. Ut quis malesuada felis. Proin at dictum eros, eget sodales libero. Sed egestas tristique nisi et tempor. Ut cursus sapien eu pellentesque posuere. Etiam eleifend varius cursus.\n\nNullam viverra quam porta orci efficitur imperdiet. Quisque magna erat, dignissim nec velit sit amet, hendrerit mollis mauris. Mauris sapien magna, consectetur et vulputate a, iaculis eget nisi. Nunc est diam, aliquam quis turpis ac, porta mattis neque. Quisque consequat dolor sit amet velit commodo sagittis. Donec commodo pulvinar odio, ut gravida velit pellentesque vitae. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.\n\nMorbi vulputate ante quis elit pretium, ut blandit felis aliquet. Aenean a massa a leo tristique malesuada. Curabitur posuere, elit sed consectetur blandit, massa mauris tristique ante, in faucibus elit justo quis nisi. Ut viverra est et arcu egestas fringilla. Mauris condimentum, lorem id viverra placerat, libero lacus ultricies est, id volutpat metus sapien non justo. Nulla facilisis, sapien ut vehicula tristique, mauris lectus porta massa, sit amet malesuada dolor justo id lectus. Suspendisse sit amet tempor ligula. Nam sit amet nisl non magna lacinia finibus eget nec augue. Aliquam ornare cursus dapibus. Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n\nDonec ornare sem eget massa pharetra rhoncus. Donec tempor sapien at posuere porttitor. Morbi sodales efficitur felis eu scelerisque. Quisque ultrices nunc ut dignissim vehicula. Donec id imperdiet orci, sed porttitor turpis. Etiam volutpat elit sed justo lobortis, tincidunt imperdiet velit pretium. Ut convallis elit sapien, ac egestas ipsum finibus a. Morbi sed odio et dui tincidunt rhoncus tempor id turpis.\n\nProin fringilla consequat imperdiet. Ut accumsan velit ac augue sollicitudin porta. Phasellus finibus porttitor felis, a feugiat purus tempus vel. Etiam vitae vehicula ex. Praesent ut tellus tellus. Fusce felis nunc, congue ac leo in, elementum vulputate nisi. Duis diam nulla, consequat ac mauris quis, viverra gravida urna.','activo',3,3); 1021 | INSERT INTO posts (titulo,fecha_publicacion,contenido,estatus,usuario_id,categoria_id) 1022 | VALUES ('Los mejores vestidos en la alfombra roja','2021-12-22 00:00:00','Phasellus laoreet eros nec vestibulum varius. Nunc id efficitur lacus, non imperdiet quam. Aliquam porta, tellus at porta semper, felis velit congue mauris, eu pharetra felis sem vitae tortor. Curabitur bibendum vehicula dolor, nec accumsan tortor ultrices ac. Vivamus nec tristique orci. Nullam fringilla eros magna, vitae imperdiet nisl mattis et. Ut quis malesuada felis. Proin at dictum eros, eget sodales libero. Sed egestas tristique nisi et tempor. Ut cursus sapien eu pellentesque posuere. Etiam eleifend varius cursus.\n\nNullam viverra quam porta orci efficitur imperdiet. Quisque magna erat, dignissim nec velit sit amet, hendrerit mollis mauris. Mauris sapien magna, consectetur et vulputate a, iaculis eget nisi. Nunc est diam, aliquam quis turpis ac, porta mattis neque. Quisque consequat dolor sit amet velit commodo sagittis. Donec commodo pulvinar odio, ut gravida velit pellentesque vitae. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.\n\nMorbi vulputate ante quis elit pretium, ut blandit felis aliquet. Aenean a massa a leo tristique malesuada. Curabitur posuere, elit sed consectetur blandit, massa mauris tristique ante, in faucibus elit justo quis nisi. Ut viverra est et arcu egestas fringilla. Mauris condimentum, lorem id viverra placerat, libero lacus ultricies est, id volutpat metus sapien non justo. Nulla facilisis, sapien ut vehicula tristique, mauris lectus porta massa, sit amet malesuada dolor justo id lectus. Suspendisse sit amet tempor ligula. Nam sit amet nisl non magna lacinia finibus eget nec augue. Aliquam ornare cursus dapibus. Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n\nDonec ornare sem eget massa pharetra rhoncus. Donec tempor sapien at posuere porttitor. Morbi sodales efficitur felis eu scelerisque. Quisque ultrices nunc ut dignissim vehicula. Donec id imperdiet orci, sed porttitor turpis. Etiam volutpat elit sed justo lobortis, tincidunt imperdiet velit pretium. Ut convallis elit sapien, ac egestas ipsum finibus a. Morbi sed odio et dui tincidunt rhoncus tempor id turpis.\n\nProin fringilla consequat imperdiet. Ut accumsan velit ac augue sollicitudin porta. Phasellus finibus porttitor felis, a feugiat purus tempus vel. Etiam vitae vehicula ex. Praesent ut tellus tellus. Fusce felis nunc, congue ac leo in, elementum vulputate nisi. Duis diam nulla, consequat ac mauris quis, viverra gravida urna.','activo',4,4); 1023 | INSERT INTO posts (titulo,fecha_publicacion,contenido,estatus,usuario_id,categoria_id) 1024 | VALUES ('Los paparatzi captan escándalo en cámara','2025-01-09 00:00:00','Phasellus laoreet eros nec vestibulum varius. Nunc id efficitur lacus, non imperdiet quam. Aliquam porta, tellus at porta semper, felis velit congue mauris, eu pharetra felis sem vitae tortor. Curabitur bibendum vehicula dolor, nec accumsan tortor ultrices ac. Vivamus nec tristique orci. Nullam fringilla eros magna, vitae imperdiet nisl mattis et. Ut quis malesuada felis. Proin at dictum eros, eget sodales libero. Sed egestas tristique nisi et tempor. Ut cursus sapien eu pellentesque posuere. Etiam eleifend varius cursus.\n\nNullam viverra quam porta orci efficitur imperdiet. Quisque magna erat, dignissim nec velit sit amet, hendrerit mollis mauris. Mauris sapien magna, consectetur et vulputate a, iaculis eget nisi. Nunc est diam, aliquam quis turpis ac, porta mattis neque. Quisque consequat dolor sit amet velit commodo sagittis. Donec commodo pulvinar odio, ut gravida velit pellentesque vitae. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.\n\nMorbi vulputate ante quis elit pretium, ut blandit felis aliquet. Aenean a massa a leo tristique malesuada. Curabitur posuere, elit sed consectetur blandit, massa mauris tristique ante, in faucibus elit justo quis nisi. Ut viverra est et arcu egestas fringilla. Mauris condimentum, lorem id viverra placerat, libero lacus ultricies est, id volutpat metus sapien non justo. Nulla facilisis, sapien ut vehicula tristique, mauris lectus porta massa, sit amet malesuada dolor justo id lectus. Suspendisse sit amet tempor ligula. Nam sit amet nisl non magna lacinia finibus eget nec augue. Aliquam ornare cursus dapibus. Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n\nDonec ornare sem eget massa pharetra rhoncus. Donec tempor sapien at posuere porttitor. Morbi sodales efficitur felis eu scelerisque. Quisque ultrices nunc ut dignissim vehicula. Donec id imperdiet orci, sed porttitor turpis. Etiam volutpat elit sed justo lobortis, tincidunt imperdiet velit pretium. Ut convallis elit sapien, ac egestas ipsum finibus a. Morbi sed odio et dui tincidunt rhoncus tempor id turpis.\n\nProin fringilla consequat imperdiet. Ut accumsan velit ac augue sollicitudin porta. Phasellus finibus porttitor felis, a feugiat purus tempus vel. Etiam vitae vehicula ex. Praesent ut tellus tellus. Fusce felis nunc, congue ac leo in, elementum vulputate nisi. Duis diam nulla, consequat ac mauris quis, viverra gravida urna.','inactivo',4,5); 1025 | INSERT INTO posts (titulo,fecha_publicacion,contenido,estatus,usuario_id,categoria_id) 1026 | VALUES ('Se mejora la conducción autónoma de vehículos','2022-05-23 00:00:00','Phasellus laoreet eros nec vestibulum varius. Nunc id efficitur lacus, non imperdiet quam. Aliquam porta, tellus at porta semper, felis velit congue mauris, eu pharetra felis sem vitae tortor. Curabitur bibendum vehicula dolor, nec accumsan tortor ultrices ac. Vivamus nec tristique orci. Nullam fringilla eros magna, vitae imperdiet nisl mattis et. Ut quis malesuada felis. Proin at dictum eros, eget sodales libero. Sed egestas tristique nisi et tempor. Ut cursus sapien eu pellentesque posuere. Etiam eleifend varius cursus.\n\nNullam viverra quam porta orci efficitur imperdiet. Quisque magna erat, dignissim nec velit sit amet, hendrerit mollis mauris. Mauris sapien magna, consectetur et vulputate a, iaculis eget nisi. Nunc est diam, aliquam quis turpis ac, porta mattis neque. Quisque consequat dolor sit amet velit commodo sagittis. Donec commodo pulvinar odio, ut gravida velit pellentesque vitae. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.\n\nMorbi vulputate ante quis elit pretium, ut blandit felis aliquet. Aenean a massa a leo tristique malesuada. Curabitur posuere, elit sed consectetur blandit, massa mauris tristique ante, in faucibus elit justo quis nisi. Ut viverra est et arcu egestas fringilla. Mauris condimentum, lorem id viverra placerat, libero lacus ultricies est, id volutpat metus sapien non justo. Nulla facilisis, sapien ut vehicula tristique, mauris lectus porta massa, sit amet malesuada dolor justo id lectus. Suspendisse sit amet tempor ligula. Nam sit amet nisl non magna lacinia finibus eget nec augue. Aliquam ornare cursus dapibus. Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n\nDonec ornare sem eget massa pharetra rhoncus. Donec tempor sapien at posuere porttitor. Morbi sodales efficitur felis eu scelerisque. Quisque ultrices nunc ut dignissim vehicula. Donec id imperdiet orci, sed porttitor turpis. Etiam volutpat elit sed justo lobortis, tincidunt imperdiet velit pretium. Ut convallis elit sapien, ac egestas ipsum finibus a. Morbi sed odio et dui tincidunt rhoncus tempor id turpis.\n\nProin fringilla consequat imperdiet. Ut accumsan velit ac augue sollicitudin porta. Phasellus finibus porttitor felis, a feugiat purus tempus vel. Etiam vitae vehicula ex. Praesent ut tellus tellus. Fusce felis nunc, congue ac leo in, elementum vulputate nisi. Duis diam nulla, consequat ac mauris quis, viverra gravida urna.','activo',1,5); 1027 | INSERT INTO posts (titulo,fecha_publicacion,contenido,estatus,usuario_id,categoria_id) 1028 | VALUES ('Se descubre nueva partícula del modelo estandar','2023-01-10 00:00:00','Phasellus laoreet eros nec vestibulum varius. Nunc id efficitur lacus, non imperdiet quam. Aliquam porta, tellus at porta semper, felis velit congue mauris, eu pharetra felis sem vitae tortor. Curabitur bibendum vehicula dolor, nec accumsan tortor ultrices ac. Vivamus nec tristique orci. Nullam fringilla eros magna, vitae imperdiet nisl mattis et. Ut quis malesuada felis. Proin at dictum eros, eget sodales libero. Sed egestas tristique nisi et tempor. Ut cursus sapien eu pellentesque posuere. Etiam eleifend varius cursus.\n\nNullam viverra quam porta orci efficitur imperdiet. Quisque magna erat, dignissim nec velit sit amet, hendrerit mollis mauris. Mauris sapien magna, consectetur et vulputate a, iaculis eget nisi. Nunc est diam, aliquam quis turpis ac, porta mattis neque. Quisque consequat dolor sit amet velit commodo sagittis. Donec commodo pulvinar odio, ut gravida velit pellentesque vitae. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.\n\nMorbi vulputate ante quis elit pretium, ut blandit felis aliquet. Aenean a massa a leo tristique malesuada. Curabitur posuere, elit sed consectetur blandit, massa mauris tristique ante, in faucibus elit justo quis nisi. Ut viverra est et arcu egestas fringilla. Mauris condimentum, lorem id viverra placerat, libero lacus ultricies est, id volutpat metus sapien non justo. Nulla facilisis, sapien ut vehicula tristique, mauris lectus porta massa, sit amet malesuada dolor justo id lectus. Suspendisse sit amet tempor ligula. Nam sit amet nisl non magna lacinia finibus eget nec augue. Aliquam ornare cursus dapibus. Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n\nDonec ornare sem eget massa pharetra rhoncus. Donec tempor sapien at posuere porttitor. Morbi sodales efficitur felis eu scelerisque. Quisque ultrices nunc ut dignissim vehicula. Donec id imperdiet orci, sed porttitor turpis. Etiam volutpat elit sed justo lobortis, tincidunt imperdiet velit pretium. Ut convallis elit sapien, ac egestas ipsum finibus a. Morbi sed odio et dui tincidunt rhoncus tempor id turpis.\n\nProin fringilla consequat imperdiet. Ut accumsan velit ac augue sollicitudin porta. Phasellus finibus porttitor felis, a feugiat purus tempus vel. Etiam vitae vehicula ex. Praesent ut tellus tellus. Fusce felis nunc, congue ac leo in, elementum vulputate nisi. Duis diam nulla, consequat ac mauris quis, viverra gravida urna.','activo',2,4); 1029 | INSERT INTO posts (titulo,fecha_publicacion,contenido,estatus,usuario_id,categoria_id) 1030 | VALUES ('Químicos descubren nanomaterial','2026-06-04 00:00:00','Phasellus laoreet eros nec vestibulum varius. Nunc id efficitur lacus, non imperdiet quam. Aliquam porta, tellus at porta semper, felis velit congue mauris, eu pharetra felis sem vitae tortor. Curabitur bibendum vehicula dolor, nec accumsan tortor ultrices ac. Vivamus nec tristique orci. Nullam fringilla eros magna, vitae imperdiet nisl mattis et. Ut quis malesuada felis. Proin at dictum eros, eget sodales libero. Sed egestas tristique nisi et tempor. Ut cursus sapien eu pellentesque posuere. Etiam eleifend varius cursus.\n\nNullam viverra quam porta orci efficitur imperdiet. Quisque magna erat, dignissim nec velit sit amet, hendrerit mollis mauris. Mauris sapien magna, consectetur et vulputate a, iaculis eget nisi. Nunc est diam, aliquam quis turpis ac, porta mattis neque. Quisque consequat dolor sit amet velit commodo sagittis. Donec commodo pulvinar odio, ut gravida velit pellentesque vitae. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.\n\nMorbi vulputate ante quis elit pretium, ut blandit felis aliquet. Aenean a massa a leo tristique malesuada. Curabitur posuere, elit sed consectetur blandit, massa mauris tristique ante, in faucibus elit justo quis nisi. Ut viverra est et arcu egestas fringilla. Mauris condimentum, lorem id viverra placerat, libero lacus ultricies est, id volutpat metus sapien non justo. Nulla facilisis, sapien ut vehicula tristique, mauris lectus porta massa, sit amet malesuada dolor justo id lectus. Suspendisse sit amet tempor ligula. Nam sit amet nisl non magna lacinia finibus eget nec augue. Aliquam ornare cursus dapibus. Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n\nDonec ornare sem eget massa pharetra rhoncus. Donec tempor sapien at posuere porttitor. Morbi sodales efficitur felis eu scelerisque. Quisque ultrices nunc ut dignissim vehicula. Donec id imperdiet orci, sed porttitor turpis. Etiam volutpat elit sed justo lobortis, tincidunt imperdiet velit pretium. Ut convallis elit sapien, ac egestas ipsum finibus a. Morbi sed odio et dui tincidunt rhoncus tempor id turpis.\n\nProin fringilla consequat imperdiet. Ut accumsan velit ac augue sollicitudin porta. Phasellus finibus porttitor felis, a feugiat purus tempus vel. Etiam vitae vehicula ex. Praesent ut tellus tellus. Fusce felis nunc, congue ac leo in, elementum vulputate nisi. Duis diam nulla, consequat ac mauris quis, viverra gravida urna.','activo',2,3); 1031 | INSERT INTO posts (titulo,fecha_publicacion,contenido,estatus,usuario_id,categoria_id) 1032 | VALUES ('La bolsa cae estrepitosamente','2024-04-03 00:00:00','Phasellus laoreet eros nec vestibulum varius. Nunc id efficitur lacus, non imperdiet quam. Aliquam porta, tellus at porta semper, felis velit congue mauris, eu pharetra felis sem vitae tortor. Curabitur bibendum vehicula dolor, nec accumsan tortor ultrices ac. Vivamus nec tristique orci. Nullam fringilla eros magna, vitae imperdiet nisl mattis et. Ut quis malesuada felis. Proin at dictum eros, eget sodales libero. Sed egestas tristique nisi et tempor. Ut cursus sapien eu pellentesque posuere. Etiam eleifend varius cursus.\n\nNullam viverra quam porta orci efficitur imperdiet. Quisque magna erat, dignissim nec velit sit amet, hendrerit mollis mauris. Mauris sapien magna, consectetur et vulputate a, iaculis eget nisi. Nunc est diam, aliquam quis turpis ac, porta mattis neque. Quisque consequat dolor sit amet velit commodo sagittis. Donec commodo pulvinar odio, ut gravida velit pellentesque vitae. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.\n\nMorbi vulputate ante quis elit pretium, ut blandit felis aliquet. Aenean a massa a leo tristique malesuada. Curabitur posuere, elit sed consectetur blandit, massa mauris tristique ante, in faucibus elit justo quis nisi. Ut viverra est et arcu egestas fringilla. Mauris condimentum, lorem id viverra placerat, libero lacus ultricies est, id volutpat metus sapien non justo. Nulla facilisis, sapien ut vehicula tristique, mauris lectus porta massa, sit amet malesuada dolor justo id lectus. Suspendisse sit amet tempor ligula. Nam sit amet nisl non magna lacinia finibus eget nec augue. Aliquam ornare cursus dapibus. Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n\nDonec ornare sem eget massa pharetra rhoncus. Donec tempor sapien at posuere porttitor. Morbi sodales efficitur felis eu scelerisque. Quisque ultrices nunc ut dignissim vehicula. Donec id imperdiet orci, sed porttitor turpis. Etiam volutpat elit sed justo lobortis, tincidunt imperdiet velit pretium. Ut convallis elit sapien, ac egestas ipsum finibus a. Morbi sed odio et dui tincidunt rhoncus tempor id turpis.\n\nProin fringilla consequat imperdiet. Ut accumsan velit ac augue sollicitudin porta. Phasellus finibus porttitor felis, a feugiat purus tempus vel. Etiam vitae vehicula ex. Praesent ut tellus tellus. Fusce felis nunc, congue ac leo in, elementum vulputate nisi. Duis diam nulla, consequat ac mauris quis, viverra gravida urna.','activo',2,2); 1033 | INSERT INTO posts (titulo,fecha_publicacion,contenido,estatus,usuario_id,categoria_id) 1034 | VALUES ('Bienes raices más baratos que nunca','2025-04-11 00:00:00','Phasellus laoreet eros nec vestibulum varius. Nunc id efficitur lacus, non imperdiet quam. Aliquam porta, tellus at porta semper, felis velit congue mauris, eu pharetra felis sem vitae tortor. Curabitur bibendum vehicula dolor, nec accumsan tortor ultrices ac. Vivamus nec tristique orci. Nullam fringilla eros magna, vitae imperdiet nisl mattis et. Ut quis malesuada felis. Proin at dictum eros, eget sodales libero. Sed egestas tristique nisi et tempor. Ut cursus sapien eu pellentesque posuere. Etiam eleifend varius cursus.\n\nNullam viverra quam porta orci efficitur imperdiet. Quisque magna erat, dignissim nec velit sit amet, hendrerit mollis mauris. Mauris sapien magna, consectetur et vulputate a, iaculis eget nisi. Nunc est diam, aliquam quis turpis ac, porta mattis neque. Quisque consequat dolor sit amet velit commodo sagittis. Donec commodo pulvinar odio, ut gravida velit pellentesque vitae. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.\n\nMorbi vulputate ante quis elit pretium, ut blandit felis aliquet. Aenean a massa a leo tristique malesuada. Curabitur posuere, elit sed consectetur blandit, massa mauris tristique ante, in faucibus elit justo quis nisi. Ut viverra est et arcu egestas fringilla. Mauris condimentum, lorem id viverra placerat, libero lacus ultricies est, id volutpat metus sapien non justo. Nulla facilisis, sapien ut vehicula tristique, mauris lectus porta massa, sit amet malesuada dolor justo id lectus. Suspendisse sit amet tempor ligula. Nam sit amet nisl non magna lacinia finibus eget nec augue. Aliquam ornare cursus dapibus. Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n\nDonec ornare sem eget massa pharetra rhoncus. Donec tempor sapien at posuere porttitor. Morbi sodales efficitur felis eu scelerisque. Quisque ultrices nunc ut dignissim vehicula. Donec id imperdiet orci, sed porttitor turpis. Etiam volutpat elit sed justo lobortis, tincidunt imperdiet velit pretium. Ut convallis elit sapien, ac egestas ipsum finibus a. Morbi sed odio et dui tincidunt rhoncus tempor id turpis.\n\nProin fringilla consequat imperdiet. Ut accumsan velit ac augue sollicitudin porta. Phasellus finibus porttitor felis, a feugiat purus tempus vel. Etiam vitae vehicula ex. Praesent ut tellus tellus. Fusce felis nunc, congue ac leo in, elementum vulputate nisi. Duis diam nulla, consequat ac mauris quis, viverra gravida urna.','inactivo',2,1); 1035 | INSERT INTO posts (titulo,fecha_publicacion,contenido,estatus,usuario_id,categoria_id) 1036 | VALUES ('Se fortalece el peso frente al dolar','2021-10-09 00:00:00','Phasellus laoreet eros nec vestibulum varius. Nunc id efficitur lacus, non imperdiet quam. Aliquam porta, tellus at porta semper, felis velit congue mauris, eu pharetra felis sem vitae tortor. Curabitur bibendum vehicula dolor, nec accumsan tortor ultrices ac. Vivamus nec tristique orci. Nullam fringilla eros magna, vitae imperdiet nisl mattis et. Ut quis malesuada felis. Proin at dictum eros, eget sodales libero. Sed egestas tristique nisi et tempor. Ut cursus sapien eu pellentesque posuere. Etiam eleifend varius cursus.\n\nNullam viverra quam porta orci efficitur imperdiet. Quisque magna erat, dignissim nec velit sit amet, hendrerit mollis mauris. Mauris sapien magna, consectetur et vulputate a, iaculis eget nisi. Nunc est diam, aliquam quis turpis ac, porta mattis neque. Quisque consequat dolor sit amet velit commodo sagittis. Donec commodo pulvinar odio, ut gravida velit pellentesque vitae. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.\n\nMorbi vulputate ante quis elit pretium, ut blandit felis aliquet. Aenean a massa a leo tristique malesuada. Curabitur posuere, elit sed consectetur blandit, massa mauris tristique ante, in faucibus elit justo quis nisi. Ut viverra est et arcu egestas fringilla. Mauris condimentum, lorem id viverra placerat, libero lacus ultricies est, id volutpat metus sapien non justo. Nulla facilisis, sapien ut vehicula tristique, mauris lectus porta massa, sit amet malesuada dolor justo id lectus. Suspendisse sit amet tempor ligula. Nam sit amet nisl non magna lacinia finibus eget nec augue. Aliquam ornare cursus dapibus. Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n\nDonec ornare sem eget massa pharetra rhoncus. Donec tempor sapien at posuere porttitor. Morbi sodales efficitur felis eu scelerisque. Quisque ultrices nunc ut dignissim vehicula. Donec id imperdiet orci, sed porttitor turpis. Etiam volutpat elit sed justo lobortis, tincidunt imperdiet velit pretium. Ut convallis elit sapien, ac egestas ipsum finibus a. Morbi sed odio et dui tincidunt rhoncus tempor id turpis.\n\nProin fringilla consequat imperdiet. Ut accumsan velit ac augue sollicitudin porta. Phasellus finibus porttitor felis, a feugiat purus tempus vel. Etiam vitae vehicula ex. Praesent ut tellus tellus. Fusce felis nunc, congue ac leo in, elementum vulputate nisi. Duis diam nulla, consequat ac mauris quis, viverra gravida urna.','activo',1,1); 1037 | INSERT INTO posts (titulo,fecha_publicacion,contenido,estatus,usuario_id,categoria_id) 1038 | VALUES ('Tenemos ganador de la formula e','2022-11-11 00:00:00','Phasellus laoreet eros nec vestibulum varius. Nunc id efficitur lacus, non imperdiet quam. Aliquam porta, tellus at porta semper, felis velit congue mauris, eu pharetra felis sem vitae tortor. Curabitur bibendum vehicula dolor, nec accumsan tortor ultrices ac. Vivamus nec tristique orci. Nullam fringilla eros magna, vitae imperdiet nisl mattis et. Ut quis malesuada felis. Proin at dictum eros, eget sodales libero. Sed egestas tristique nisi et tempor. Ut cursus sapien eu pellentesque posuere. Etiam eleifend varius cursus.\n\nNullam viverra quam porta orci efficitur imperdiet. Quisque magna erat, dignissim nec velit sit amet, hendrerit mollis mauris. Mauris sapien magna, consectetur et vulputate a, iaculis eget nisi. Nunc est diam, aliquam quis turpis ac, porta mattis neque. Quisque consequat dolor sit amet velit commodo sagittis. Donec commodo pulvinar odio, ut gravida velit pellentesque vitae. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.\n\nMorbi vulputate ante quis elit pretium, ut blandit felis aliquet. Aenean a massa a leo tristique malesuada. Curabitur posuere, elit sed consectetur blandit, massa mauris tristique ante, in faucibus elit justo quis nisi. Ut viverra est et arcu egestas fringilla. Mauris condimentum, lorem id viverra placerat, libero lacus ultricies est, id volutpat metus sapien non justo. Nulla facilisis, sapien ut vehicula tristique, mauris lectus porta massa, sit amet malesuada dolor justo id lectus. Suspendisse sit amet tempor ligula. Nam sit amet nisl non magna lacinia finibus eget nec augue. Aliquam ornare cursus dapibus. Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n\nDonec ornare sem eget massa pharetra rhoncus. Donec tempor sapien at posuere porttitor. Morbi sodales efficitur felis eu scelerisque. Quisque ultrices nunc ut dignissim vehicula. Donec id imperdiet orci, sed porttitor turpis. Etiam volutpat elit sed justo lobortis, tincidunt imperdiet velit pretium. Ut convallis elit sapien, ac egestas ipsum finibus a. Morbi sed odio et dui tincidunt rhoncus tempor id turpis.\n\nProin fringilla consequat imperdiet. Ut accumsan velit ac augue sollicitudin porta. Phasellus finibus porttitor felis, a feugiat purus tempus vel. Etiam vitae vehicula ex. Praesent ut tellus tellus. Fusce felis nunc, congue ac leo in, elementum vulputate nisi. Duis diam nulla, consequat ac mauris quis, viverra gravida urna.','activo',1,2); 1039 | INSERT INTO posts (titulo,fecha_publicacion,contenido,estatus,usuario_id,categoria_id) 1040 | VALUES ('Ganan partido frente a visitantes','2023-12-10 00:00:00','Phasellus laoreet eros nec vestibulum varius. Nunc id efficitur lacus, non imperdiet quam. Aliquam porta, tellus at porta semper, felis velit congue mauris, eu pharetra felis sem vitae tortor. Curabitur bibendum vehicula dolor, nec accumsan tortor ultrices ac. Vivamus nec tristique orci. Nullam fringilla eros magna, vitae imperdiet nisl mattis et. Ut quis malesuada felis. Proin at dictum eros, eget sodales libero. Sed egestas tristique nisi et tempor. Ut cursus sapien eu pellentesque posuere. Etiam eleifend varius cursus.\n\nNullam viverra quam porta orci efficitur imperdiet. Quisque magna erat, dignissim nec velit sit amet, hendrerit mollis mauris. Mauris sapien magna, consectetur et vulputate a, iaculis eget nisi. Nunc est diam, aliquam quis turpis ac, porta mattis neque. Quisque consequat dolor sit amet velit commodo sagittis. Donec commodo pulvinar odio, ut gravida velit pellentesque vitae. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.\n\nMorbi vulputate ante quis elit pretium, ut blandit felis aliquet. Aenean a massa a leo tristique malesuada. Curabitur posuere, elit sed consectetur blandit, massa mauris tristique ante, in faucibus elit justo quis nisi. Ut viverra est et arcu egestas fringilla. Mauris condimentum, lorem id viverra placerat, libero lacus ultricies est, id volutpat metus sapien non justo. Nulla facilisis, sapien ut vehicula tristique, mauris lectus porta massa, sit amet malesuada dolor justo id lectus. Suspendisse sit amet tempor ligula. Nam sit amet nisl non magna lacinia finibus eget nec augue. Aliquam ornare cursus dapibus. Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n\nDonec ornare sem eget massa pharetra rhoncus. Donec tempor sapien at posuere porttitor. Morbi sodales efficitur felis eu scelerisque. Quisque ultrices nunc ut dignissim vehicula. Donec id imperdiet orci, sed porttitor turpis. Etiam volutpat elit sed justo lobortis, tincidunt imperdiet velit pretium. Ut convallis elit sapien, ac egestas ipsum finibus a. Morbi sed odio et dui tincidunt rhoncus tempor id turpis.\n\nProin fringilla consequat imperdiet. Ut accumsan velit ac augue sollicitudin porta. Phasellus finibus porttitor felis, a feugiat purus tempus vel. Etiam vitae vehicula ex. Praesent ut tellus tellus. Fusce felis nunc, congue ac leo in, elementum vulputate nisi. Duis diam nulla, consequat ac mauris quis, viverra gravida urna.','activo',2,3); 1041 | INSERT INTO posts (titulo,fecha_publicacion,contenido,estatus,usuario_id,categoria_id) 1042 | VALUES ('Equipo veterano da un gran espectaculo','2023-12-01 00:00:00','Phasellus laoreet eros nec vestibulum varius. Nunc id efficitur lacus, non imperdiet quam. Aliquam porta, tellus at porta semper, felis velit congue mauris, eu pharetra felis sem vitae tortor. Curabitur bibendum vehicula dolor, nec accumsan tortor ultrices ac. Vivamus nec tristique orci. Nullam fringilla eros magna, vitae imperdiet nisl mattis et. Ut quis malesuada felis. Proin at dictum eros, eget sodales libero. Sed egestas tristique nisi et tempor. Ut cursus sapien eu pellentesque posuere. Etiam eleifend varius cursus.\n\nNullam viverra quam porta orci efficitur imperdiet. Quisque magna erat, dignissim nec velit sit amet, hendrerit mollis mauris. Mauris sapien magna, consectetur et vulputate a, iaculis eget nisi. Nunc est diam, aliquam quis turpis ac, porta mattis neque. Quisque consequat dolor sit amet velit commodo sagittis. Donec commodo pulvinar odio, ut gravida velit pellentesque vitae. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.\n\nMorbi vulputate ante quis elit pretium, ut blandit felis aliquet. Aenean a massa a leo tristique malesuada. Curabitur posuere, elit sed consectetur blandit, massa mauris tristique ante, in faucibus elit justo quis nisi. Ut viverra est et arcu egestas fringilla. Mauris condimentum, lorem id viverra placerat, libero lacus ultricies est, id volutpat metus sapien non justo. Nulla facilisis, sapien ut vehicula tristique, mauris lectus porta massa, sit amet malesuada dolor justo id lectus. Suspendisse sit amet tempor ligula. Nam sit amet nisl non magna lacinia finibus eget nec augue. Aliquam ornare cursus dapibus. Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n\nDonec ornare sem eget massa pharetra rhoncus. Donec tempor sapien at posuere porttitor. Morbi sodales efficitur felis eu scelerisque. Quisque ultrices nunc ut dignissim vehicula. Donec id imperdiet orci, sed porttitor turpis. Etiam volutpat elit sed justo lobortis, tincidunt imperdiet velit pretium. Ut convallis elit sapien, ac egestas ipsum finibus a. Morbi sed odio et dui tincidunt rhoncus tempor id turpis.\n\nProin fringilla consequat imperdiet. Ut accumsan velit ac augue sollicitudin porta. Phasellus finibus porttitor felis, a feugiat purus tempus vel. Etiam vitae vehicula ex. Praesent ut tellus tellus. Fusce felis nunc, congue ac leo in, elementum vulputate nisi. Duis diam nulla, consequat ac mauris quis, viverra gravida urna.','inactivo',2,4); 1043 | INSERT INTO posts (titulo,fecha_publicacion,contenido,estatus,usuario_id,categoria_id) 1044 | VALUES ('Escándalo con el boxeador del momento','2025-03-05 00:00:00','Phasellus laoreet eros nec vestibulum varius. Nunc id efficitur lacus, non imperdiet quam. Aliquam porta, tellus at porta semper, felis velit congue mauris, eu pharetra felis sem vitae tortor. Curabitur bibendum vehicula dolor, nec accumsan tortor ultrices ac. Vivamus nec tristique orci. Nullam fringilla eros magna, vitae imperdiet nisl mattis et. Ut quis malesuada felis. Proin at dictum eros, eget sodales libero. Sed egestas tristique nisi et tempor. Ut cursus sapien eu pellentesque posuere. Etiam eleifend varius cursus.\n\nNullam viverra quam porta orci efficitur imperdiet. Quisque magna erat, dignissim nec velit sit amet, hendrerit mollis mauris. Mauris sapien magna, consectetur et vulputate a, iaculis eget nisi. Nunc est diam, aliquam quis turpis ac, porta mattis neque. Quisque consequat dolor sit amet velit commodo sagittis. Donec commodo pulvinar odio, ut gravida velit pellentesque vitae. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.\n\nMorbi vulputate ante quis elit pretium, ut blandit felis aliquet. Aenean a massa a leo tristique malesuada. Curabitur posuere, elit sed consectetur blandit, massa mauris tristique ante, in faucibus elit justo quis nisi. Ut viverra est et arcu egestas fringilla. Mauris condimentum, lorem id viverra placerat, libero lacus ultricies est, id volutpat metus sapien non justo. Nulla facilisis, sapien ut vehicula tristique, mauris lectus porta massa, sit amet malesuada dolor justo id lectus. Suspendisse sit amet tempor ligula. Nam sit amet nisl non magna lacinia finibus eget nec augue. Aliquam ornare cursus dapibus. Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n\nDonec ornare sem eget massa pharetra rhoncus. Donec tempor sapien at posuere porttitor. Morbi sodales efficitur felis eu scelerisque. Quisque ultrices nunc ut dignissim vehicula. Donec id imperdiet orci, sed porttitor turpis. Etiam volutpat elit sed justo lobortis, tincidunt imperdiet velit pretium. Ut convallis elit sapien, ac egestas ipsum finibus a. Morbi sed odio et dui tincidunt rhoncus tempor id turpis.\n\nProin fringilla consequat imperdiet. Ut accumsan velit ac augue sollicitudin porta. Phasellus finibus porttitor felis, a feugiat purus tempus vel. Etiam vitae vehicula ex. Praesent ut tellus tellus. Fusce felis nunc, congue ac leo in, elementum vulputate nisi. Duis diam nulla, consequat ac mauris quis, viverra gravida urna.','activo',4,5); 1045 | INSERT INTO posts (titulo,fecha_publicacion,contenido,estatus,usuario_id,categoria_id) 1046 | VALUES ('Fuccia OS sacude al mundo','2028-10-10 00:00:00','Phasellus laoreet eros nec vestibulum varius. Nunc id efficitur lacus, non imperdiet quam. Aliquam porta, tellus at porta semper, felis velit congue mauris, eu pharetra felis sem vitae tortor. Curabitur bibendum vehicula dolor, nec accumsan tortor ultrices ac. Vivamus nec tristique orci. Nullam fringilla eros magna, vitae imperdiet nisl mattis et. Ut quis malesuada felis. Proin at dictum eros, eget sodales libero. Sed egestas tristique nisi et tempor. Ut cursus sapien eu pellentesque posuere. Etiam eleifend varius cursus.\n\nNullam viverra quam porta orci efficitur imperdiet. Quisque magna erat, dignissim nec velit sit amet, hendrerit mollis mauris. Mauris sapien magna, consectetur et vulputate a, iaculis eget nisi. Nunc est diam, aliquam quis turpis ac, porta mattis neque. Quisque consequat dolor sit amet velit commodo sagittis. Donec commodo pulvinar odio, ut gravida velit pellentesque vitae. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.\n\nMorbi vulputate ante quis elit pretium, ut blandit felis aliquet. Aenean a massa a leo tristique malesuada. Curabitur posuere, elit sed consectetur blandit, massa mauris tristique ante, in faucibus elit justo quis nisi. Ut viverra est et arcu egestas fringilla. Mauris condimentum, lorem id viverra placerat, libero lacus ultricies est, id volutpat metus sapien non justo. Nulla facilisis, sapien ut vehicula tristique, mauris lectus porta massa, sit amet malesuada dolor justo id lectus. Suspendisse sit amet tempor ligula. Nam sit amet nisl non magna lacinia finibus eget nec augue. Aliquam ornare cursus dapibus. Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n\nDonec ornare sem eget massa pharetra rhoncus. Donec tempor sapien at posuere porttitor. Morbi sodales efficitur felis eu scelerisque. Quisque ultrices nunc ut dignissim vehicula. Donec id imperdiet orci, sed porttitor turpis. Etiam volutpat elit sed justo lobortis, tincidunt imperdiet velit pretium. Ut convallis elit sapien, ac egestas ipsum finibus a. Morbi sed odio et dui tincidunt rhoncus tempor id turpis.\n\nProin fringilla consequat imperdiet. Ut accumsan velit ac augue sollicitudin porta. Phasellus finibus porttitor felis, a feugiat purus tempus vel. Etiam vitae vehicula ex. Praesent ut tellus tellus. Fusce felis nunc, congue ac leo in, elementum vulputate nisi. Duis diam nulla, consequat ac mauris quis, viverra gravida urna.','activo',1,5); 1047 | INSERT INTO posts (titulo,fecha_publicacion,contenido,estatus,usuario_id,categoria_id) 1048 | VALUES ('U.S. Robotics presenta hallazgo','2029-01-10 00:00:00','Phasellus laoreet eros nec vestibulum varius. Nunc id efficitur lacus, non imperdiet quam. Aliquam porta, tellus at porta semper, felis velit congue mauris, eu pharetra felis sem vitae tortor. Curabitur bibendum vehicula dolor, nec accumsan tortor ultrices ac. Vivamus nec tristique orci. Nullam fringilla eros magna, vitae imperdiet nisl mattis et. Ut quis malesuada felis. Proin at dictum eros, eget sodales libero. Sed egestas tristique nisi et tempor. Ut cursus sapien eu pellentesque posuere. Etiam eleifend varius cursus.\n\nNullam viverra quam porta orci efficitur imperdiet. Quisque magna erat, dignissim nec velit sit amet, hendrerit mollis mauris. Mauris sapien magna, consectetur et vulputate a, iaculis eget nisi. Nunc est diam, aliquam quis turpis ac, porta mattis neque. Quisque consequat dolor sit amet velit commodo sagittis. Donec commodo pulvinar odio, ut gravida velit pellentesque vitae. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.\n\nMorbi vulputate ante quis elit pretium, ut blandit felis aliquet. Aenean a massa a leo tristique malesuada. Curabitur posuere, elit sed consectetur blandit, massa mauris tristique ante, in faucibus elit justo quis nisi. Ut viverra est et arcu egestas fringilla. Mauris condimentum, lorem id viverra placerat, libero lacus ultricies est, id volutpat metus sapien non justo. Nulla facilisis, sapien ut vehicula tristique, mauris lectus porta massa, sit amet malesuada dolor justo id lectus. Suspendisse sit amet tempor ligula. Nam sit amet nisl non magna lacinia finibus eget nec augue. Aliquam ornare cursus dapibus. Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n\nDonec ornare sem eget massa pharetra rhoncus. Donec tempor sapien at posuere porttitor. Morbi sodales efficitur felis eu scelerisque. Quisque ultrices nunc ut dignissim vehicula. Donec id imperdiet orci, sed porttitor turpis. Etiam volutpat elit sed justo lobortis, tincidunt imperdiet velit pretium. Ut convallis elit sapien, ac egestas ipsum finibus a. Morbi sed odio et dui tincidunt rhoncus tempor id turpis.\n\nProin fringilla consequat imperdiet. Ut accumsan velit ac augue sollicitudin porta. Phasellus finibus porttitor felis, a feugiat purus tempus vel. Etiam vitae vehicula ex. Praesent ut tellus tellus. Fusce felis nunc, congue ac leo in, elementum vulputate nisi. Duis diam nulla, consequat ac mauris quis, viverra gravida urna.\n','activo',1,4); 1049 | INSERT INTO posts (titulo,fecha_publicacion,contenido,estatus,usuario_id,categoria_id) 1050 | VALUES ('Cierra campeonato mundial de football de manera impresionante','2023-04-10 00:00:00','Phasellus laoreet eros nec vestibulum varius. Nunc id efficitur lacus, non imperdiet quam. Aliquam porta, tellus at porta semper, felis velit congue mauris, eu pharetra felis sem vitae tortor. Curabitur bibendum vehicula dolor, nec accumsan tortor ultrices ac. Vivamus nec tristique orci. Nullam fringilla eros magna, vitae imperdiet nisl mattis et. Ut quis malesuada felis. Proin at dictum eros, eget sodales libero. Sed egestas tristique nisi et tempor. Ut cursus sapien eu pellentesque posuere. Etiam eleifend varius cursus.\n\nNullam viverra quam porta orci efficitur imperdiet. Quisque magna erat, dignissim nec velit sit amet, hendrerit mollis mauris. Mauris sapien magna, consectetur et vulputate a, iaculis eget nisi. Nunc est diam, aliquam quis turpis ac, porta mattis neque. Quisque consequat dolor sit amet velit commodo sagittis. Donec commodo pulvinar odio, ut gravida velit pellentesque vitae. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.\n\nMorbi vulputate ante quis elit pretium, ut blandit felis aliquet. Aenean a massa a leo tristique malesuada. Curabitur posuere, elit sed consectetur blandit, massa mauris tristique ante, in faucibus elit justo quis nisi. Ut viverra est et arcu egestas fringilla. Mauris condimentum, lorem id viverra placerat, libero lacus ultricies est, id volutpat metus sapien non justo. Nulla facilisis, sapien ut vehicula tristique, mauris lectus porta massa, sit amet malesuada dolor justo id lectus. Suspendisse sit amet tempor ligula. Nam sit amet nisl non magna lacinia finibus eget nec augue. Aliquam ornare cursus dapibus. Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n\nDonec ornare sem eget massa pharetra rhoncus. Donec tempor sapien at posuere porttitor. Morbi sodales efficitur felis eu scelerisque. Quisque ultrices nunc ut dignissim vehicula. Donec id imperdiet orci, sed porttitor turpis. Etiam volutpat elit sed justo lobortis, tincidunt imperdiet velit pretium. Ut convallis elit sapien, ac egestas ipsum finibus a. Morbi sed odio et dui tincidunt rhoncus tempor id turpis.\n\nProin fringilla consequat imperdiet. Ut accumsan velit ac augue sollicitudin porta. Phasellus finibus porttitor felis, a feugiat purus tempus vel. Etiam vitae vehicula ex. Praesent ut tellus tellus. Fusce felis nunc, congue ac leo in, elementum vulputate nisi. Duis diam nulla, consequat ac mauris quis, viverra gravida urna.\n','activo',2,3); 1051 | INSERT INTO posts (titulo,fecha_publicacion,contenido,estatus,usuario_id,categoria_id) 1052 | VALUES ('Escándalo en el mundo de la moda','2022-04-11 00:00:00','Phasellus laoreet eros nec vestibulum varius. Nunc id efficitur lacus, non imperdiet quam. Aliquam porta, tellus at porta semper, felis velit congue mauris, eu pharetra felis sem vitae tortor. Curabitur bibendum vehicula dolor, nec accumsan tortor ultrices ac. Vivamus nec tristique orci. Nullam fringilla eros magna, vitae imperdiet nisl mattis et. Ut quis malesuada felis. Proin at dictum eros, eget sodales libero. Sed egestas tristique nisi et tempor. Ut cursus sapien eu pellentesque posuere. Etiam eleifend varius cursus.\n\nNullam viverra quam porta orci efficitur imperdiet. Quisque magna erat, dignissim nec velit sit amet, hendrerit mollis mauris. Mauris sapien magna, consectetur et vulputate a, iaculis eget nisi. Nunc est diam, aliquam quis turpis ac, porta mattis neque. Quisque consequat dolor sit amet velit commodo sagittis. Donec commodo pulvinar odio, ut gravida velit pellentesque vitae. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.\n\nMorbi vulputate ante quis elit pretium, ut blandit felis aliquet. Aenean a massa a leo tristique malesuada. Curabitur posuere, elit sed consectetur blandit, massa mauris tristique ante, in faucibus elit justo quis nisi. Ut viverra est et arcu egestas fringilla. Mauris condimentum, lorem id viverra placerat, libero lacus ultricies est, id volutpat metus sapien non justo. Nulla facilisis, sapien ut vehicula tristique, mauris lectus porta massa, sit amet malesuada dolor justo id lectus. Suspendisse sit amet tempor ligula. Nam sit amet nisl non magna lacinia finibus eget nec augue. Aliquam ornare cursus dapibus. Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n\nDonec ornare sem eget massa pharetra rhoncus. Donec tempor sapien at posuere porttitor. Morbi sodales efficitur felis eu scelerisque. Quisque ultrices nunc ut dignissim vehicula. Donec id imperdiet orci, sed porttitor turpis. Etiam volutpat elit sed justo lobortis, tincidunt imperdiet velit pretium. Ut convallis elit sapien, ac egestas ipsum finibus a. Morbi sed odio et dui tincidunt rhoncus tempor id turpis.\n\nProin fringilla consequat imperdiet. Ut accumsan velit ac augue sollicitudin porta. Phasellus finibus porttitor felis, a feugiat purus tempus vel. Etiam vitae vehicula ex. Praesent ut tellus tellus. Fusce felis nunc, congue ac leo in, elementum vulputate nisi. Duis diam nulla, consequat ac mauris quis, viverra gravida urna.\n','activo',4,2); 1053 | INSERT INTO posts (titulo,fecha_publicacion,contenido,estatus,usuario_id,categoria_id) 1054 | VALUES ('Tenemos campeona del mundial de volleiball','2024-09-09 00:00:00','Phasellus laoreet eros nec vestibulum varius. Nunc id efficitur lacus, non imperdiet quam. Aliquam porta, tellus at porta semper, felis velit congue mauris, eu pharetra felis sem vitae tortor. Curabitur bibendum vehicula dolor, nec accumsan tortor ultrices ac. Vivamus nec tristique orci. Nullam fringilla eros magna, vitae imperdiet nisl mattis et. Ut quis malesuada felis. Proin at dictum eros, eget sodales libero. Sed egestas tristique nisi et tempor. Ut cursus sapien eu pellentesque posuere. Etiam eleifend varius cursus.\n\nNullam viverra quam porta orci efficitur imperdiet. Quisque magna erat, dignissim nec velit sit amet, hendrerit mollis mauris. Mauris sapien magna, consectetur et vulputate a, iaculis eget nisi. Nunc est diam, aliquam quis turpis ac, porta mattis neque. Quisque consequat dolor sit amet velit commodo sagittis. Donec commodo pulvinar odio, ut gravida velit pellentesque vitae. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.\n\nMorbi vulputate ante quis elit pretium, ut blandit felis aliquet. Aenean a massa a leo tristique malesuada. Curabitur posuere, elit sed consectetur blandit, massa mauris tristique ante, in faucibus elit justo quis nisi. Ut viverra est et arcu egestas fringilla. Mauris condimentum, lorem id viverra placerat, libero lacus ultricies est, id volutpat metus sapien non justo. Nulla facilisis, sapien ut vehicula tristique, mauris lectus porta massa, sit amet malesuada dolor justo id lectus. Suspendisse sit amet tempor ligula. Nam sit amet nisl non magna lacinia finibus eget nec augue. Aliquam ornare cursus dapibus. Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n\nDonec ornare sem eget massa pharetra rhoncus. Donec tempor sapien at posuere porttitor. Morbi sodales efficitur felis eu scelerisque. Quisque ultrices nunc ut dignissim vehicula. Donec id imperdiet orci, sed porttitor turpis. Etiam volutpat elit sed justo lobortis, tincidunt imperdiet velit pretium. Ut convallis elit sapien, ac egestas ipsum finibus a. Morbi sed odio et dui tincidunt rhoncus tempor id turpis.\n\nProin fringilla consequat imperdiet. Ut accumsan velit ac augue sollicitudin porta. Phasellus finibus porttitor felis, a feugiat purus tempus vel. Etiam vitae vehicula ex. Praesent ut tellus tellus. Fusce felis nunc, congue ac leo in, elementum vulputate nisi. Duis diam nulla, consequat ac mauris quis, viverra gravida urna.\n','inactivo',2,1); 1055 | INSERT INTO posts (titulo,fecha_publicacion,contenido,estatus,usuario_id,categoria_id) 1056 | VALUES ('Se descubre la unión entre astrofísica y fisica cuántica','2022-05-03 00:00:00','Phasellus laoreet eros nec vestibulum varius. Nunc id efficitur lacus, non imperdiet quam. Aliquam porta, tellus at porta semper, felis velit congue mauris, eu pharetra felis sem vitae tortor. Curabitur bibendum vehicula dolor, nec accumsan tortor ultrices ac. Vivamus nec tristique orci. Nullam fringilla eros magna, vitae imperdiet nisl mattis et. Ut quis malesuada felis. Proin at dictum eros, eget sodales libero. Sed egestas tristique nisi et tempor. Ut cursus sapien eu pellentesque posuere. Etiam eleifend varius cursus.\n\nNullam viverra quam porta orci efficitur imperdiet. Quisque magna erat, dignissim nec velit sit amet, hendrerit mollis mauris. Mauris sapien magna, consectetur et vulputate a, iaculis eget nisi. Nunc est diam, aliquam quis turpis ac, porta mattis neque. Quisque consequat dolor sit amet velit commodo sagittis. Donec commodo pulvinar odio, ut gravida velit pellentesque vitae. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.\n\nMorbi vulputate ante quis elit pretium, ut blandit felis aliquet. Aenean a massa a leo tristique malesuada. Curabitur posuere, elit sed consectetur blandit, massa mauris tristique ante, in faucibus elit justo quis nisi. Ut viverra est et arcu egestas fringilla. Mauris condimentum, lorem id viverra placerat, libero lacus ultricies est, id volutpat metus sapien non justo. Nulla facilisis, sapien ut vehicula tristique, mauris lectus porta massa, sit amet malesuada dolor justo id lectus. Suspendisse sit amet tempor ligula. Nam sit amet nisl non magna lacinia finibus eget nec augue. Aliquam ornare cursus dapibus. Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n\nDonec ornare sem eget massa pharetra rhoncus. Donec tempor sapien at posuere porttitor. Morbi sodales efficitur felis eu scelerisque. Quisque ultrices nunc ut dignissim vehicula. Donec id imperdiet orci, sed porttitor turpis. Etiam volutpat elit sed justo lobortis, tincidunt imperdiet velit pretium. Ut convallis elit sapien, ac egestas ipsum finibus a. Morbi sed odio et dui tincidunt rhoncus tempor id turpis.\n\nProin fringilla consequat imperdiet. Ut accumsan velit ac augue sollicitudin porta. Phasellus finibus porttitor felis, a feugiat purus tempus vel. Etiam vitae vehicula ex. Praesent ut tellus tellus. Fusce felis nunc, congue ac leo in, elementum vulputate nisi. Duis diam nulla, consequat ac mauris quis, viverra gravida urna.\n','inactivo',3,5); 1057 | INSERT INTO posts (titulo,fecha_publicacion,contenido,estatus,usuario_id,categoria_id) 1058 | VALUES ('El post que se quedó huérfano','2029-08-08 00:00:00','\'Phasellus laoreet eros nec vestibulum varius. Nunc id efficitur lacus, non imperdiet quam. Aliquam porta, tellus at porta semper, felis velit congue mauris, eu pharetra felis sem vitae tortor. Curabitur bibendum vehicula dolor, nec accumsan tortor ultrices ac. Vivamus nec tristique orci. Nullam fringilla eros magna, vitae imperdiet nisl mattis et. Ut quis malesuada felis. Proin at dictum eros, eget sodales libero. Sed egestas tristique nisi et tempor. Ut cursus sapien eu pellentesque posuere. Etiam eleifend varius cursus.\n\nNullam viverra quam porta orci efficitur imperdiet. Quisque magna erat, dignissim nec velit sit amet, hendrerit mollis mauris. Mauris sapien magna, consectetur et vulputate a, iaculis eget nisi. Nunc est diam, aliquam quis turpis ac, porta mattis neque. Quisque consequat dolor sit amet velit commodo sagittis. Donec commodo pulvinar odio, ut gravida velit pellentesque vitae. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.\n\nMorbi vulputate ante quis elit pretium, ut blandit felis aliquet. Aenean a massa a leo tristique malesuada. Curabitur posuere, elit sed consectetur blandit, massa mauris tristique ante, in faucibus elit justo quis nisi. Ut viverra est et arcu egestas fringilla. Mauris condimentum, lorem id viverra placerat, libero lacus ultricies est, id volutpat metus sapien non justo. Nulla facilisis, sapien ut vehicula tristique, mauris lectus porta massa, sit amet malesuada dolor justo id lectus. Suspendisse sit amet tempor ligula. Nam sit amet nisl non magna lacinia finibus eget nec augue. Aliquam ornare cursus dapibus. Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n\nDonec ornare sem eget massa pharetra rhoncus. Donec tempor sapien at posuere porttitor. Morbi sodales efficitur felis eu scelerisque. Quisque ultrices nunc ut dignissim vehicula. Donec id imperdiet orci, sed porttitor turpis. Etiam volutpat elit sed justo lobortis, tincidunt imperdiet velit pretium. Ut convallis elit sapien, ac egestas ipsum finibus a. Morbi sed odio et dui tincidunt rhoncus tempor id turpis.\n\nProin fringilla consequat imperdiet. Ut accumsan velit ac augue sollicitudin porta. Phasellus finibus porttitor felis, a feugiat purus tempus vel. Etiam vitae vehicula ex. Praesent ut tellus tellus. Fusce felis nunc, congue ac leo in, elementum vulputate nisi. Duis diam nulla, consequat ac mauris quis, viverra gravida urna.\n\'','activo',2,3); 1059 | 1060 | -- Insert en la tabla posts_etiquetas 1061 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (1,43,3); 1062 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (2,43,11); 1063 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (3,44,2); 1064 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (4,44,4); 1065 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (5,45,14); 1066 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (6,45,13); 1067 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (7,46,10); 1068 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (8,46,11); 1069 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (9,46,12); 1070 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (10,46,20); 1071 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (11,47,10); 1072 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (12,48,1); 1073 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (13,48,2); 1074 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (14,48,4); 1075 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (15,48,13); 1076 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (16,49,13); 1077 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (17,49,14); 1078 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (18,49,17); 1079 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (19,50,13); 1080 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (20,50,14); 1081 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (21,50,16); 1082 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (22,51,7); 1083 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (23,51,8); 1084 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (24,51,9); 1085 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (25,51,18); 1086 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (26,52,8); 1087 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (27,52,18); 1088 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (28,53,7); 1089 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (29,53,8); 1090 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (30,54,4); 1091 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (31,54,5); 1092 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (32,55,5); 1093 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (33,55,6); 1094 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (34,56,5); 1095 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (35,56,6); 1096 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (36,56,10); 1097 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (37,58,2); 1098 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (38,58,3); 1099 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (39,58,13); 1100 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (40,59,1); 1101 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (41,59,13); 1102 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (42,57,10); 1103 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (43,60,5); 1104 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (44,60,6); 1105 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (45,61,10); 1106 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (46,61,12); 1107 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (47,61,20); 1108 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (48,62,5); 1109 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (49,62,10); 1110 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (50,63,13); 1111 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (51,63,14); 1112 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (52,63,17); 1113 | INSERT INTO `platziblog.posts_etiquetas` (`id`,`post_id`,`etiqueta_id`) VALUES (53,52,19); 1114 | 1115 | ``` 1116 | 1117 | #### Primer Consulta 1118 | 1119 | ```sql 1120 | SELECT* 1121 | FROM posts 1122 | WHERE fecha_publicacion < '2024' 1123 | ``` 1124 | 1125 | ### Clase 30 SELECT 1126 | 1127 | **SELECT** se encarga de proyectar o mostrar datos. 1128 | 1129 | - El nombre de las columnas o campos que estamos consultando puede ser cambiado utilizando AS después del nombre del campo y poniendo el nuevo que queremos tener: 1130 | 1131 | ```sql 1132 | SELECT titulo AS encabezado 1133 | FROM posts; 1134 | ``` 1135 | 1136 | Existe una función de SELECT para poder contar la cantidad de registros. Esa información (un número) será el resultado del query: 1137 | 1138 | ```sql 1139 | SELECT COUNT(*) 1140 | FROM posts; 1141 | ``` 1142 | 1143 | Queries de la clase 1144 | 1145 | ```sql 1146 | 1147 | SELECT titulo, fecha_publicacion, estatus 1148 | FROM posts 1149 | ``` 1150 | 1151 | Usando AS para asignar un alias 1152 | 1153 | ```sql 1154 | SELECT titulo, fecha_publicacion AS publicado_en, estatus AS estado 1155 | FROM posts; 1156 | ``` 1157 | 1158 | Contar los registros 1159 | 1160 | ```sql 1161 | SELECT COUNT(*) AS numero_post 1162 | FROM posts; 1163 | ``` 1164 | 1165 | ### Clase 31 FROM 1166 | 1167 | **FROM** indica de dónde se deben traer los datos y puede ayudar a hacer sentencias y filtros complejos cuando se quieren unir tablas. La sentencia compañera que nos ayuda con este proceso es **JOIN**. 1168 | 1169 | Los diagramas de Venn son círculos que se tocan en algún punto para ver dónde está la intersección de conjuntos. Ayudan mucho para poder formular la sentencia **JOIN** de la manera adecuada dependiendo del query que se quiere hacer. 1170 | 1171 | ![teoria_conjuntos](src/Teoria_conjuntos.jpg) 1172 | 1173 | ![teoria_conjuntos_sentencias](src/teoria_conjuntos_sentencias.jpg) 1174 | 1175 | ### Clase 32 Utilizando la sentencia FROM 1176 | 1177 | Comandos de la clase 1178 | 1179 | Left Join trae todos los usuarios (tabla A), tengan o no tengan algún Post (tabla b) 1180 | 1181 | ```sql 1182 | SELECT * 1183 | FROM usuarios 1184 | LEFT JOIN posts ON usuarios.id = posts.usuario_id; 1185 | ``` 1186 | 1187 | Left Join sin intersección 1188 | 1189 | ```sql 1190 | SELECT * 1191 | FROM usuarios 1192 | LEFT JOIN posts ON usuarios.id = posts.usuario_id 1193 | WHERE posts.usuario_id IS NULL; 1194 | ``` 1195 | 1196 | Left Join trae todos los Post (tabla B), tengan o no tengan algún Usuario (tabla A) 1197 | 1198 | ```sql 1199 | SELECT * 1200 | FROM usuarios 1201 | RIGHT JOIN posts ON usuarios.id = posts.usuario_id; 1202 | ``` 1203 | 1204 | Right Join sin intersección 1205 | 1206 | ```sql 1207 | SELECT * 1208 | FROM usuarios 1209 | RIGHT JOIN posts ON usuarios.id = posts.usuario_id 1210 | WHERE posts.usuario_id IS NULL; 1211 | ``` 1212 | 1213 | Inner Join 1214 | 1215 | ```sql 1216 | SELECT * 1217 | FROM usuarios 1218 | INNER JOIN posts ON usuarios.id = posts.usuario_id; 1219 | ``` 1220 | 1221 | Full Join 1222 | 1223 | ```sql 1224 | SELECT * 1225 | FROM usuarios 1226 | LEFT JOIN posts ON usuarios.id = posts.usuario_id 1227 | UNION 1228 | SELECT * 1229 | FROM usuarios 1230 | RIGHT JOIN posts ON usuarios.id = posts.usuario_id; 1231 | ``` 1232 | 1233 | Diferencia Asimétrica 1234 | 1235 | ```sql 1236 | SELECT * 1237 | FROM usuarios 1238 | LEFT JOIN posts ON usuarios.id = posts.usuario_id 1239 | WHERE posts.usuario_id IS NULL 1240 | UNION 1241 | SELECT * 1242 | FROM usuarios 1243 | RIGHT JOIN posts ON usuarios.id = posts.usuario_id 1244 | WHERE posts.usuario_id IS NULL; 1245 | ``` 1246 | 1247 | ### Clase 33 WHERE 1248 | 1249 | **WHERE** es la sentencia que nos ayuda a filtrar tuplas o registros dependiendo de las características que elegimos. 1250 | 1251 | - La propiedad **LIKE** nos ayuda a traer registros de los cuales conocemos sólo una parte de la información. 1252 | - La propiedad **BETWEEN** nos sirve para arrojar registros que estén en el medio de dos. Por ejemplo los registros con id entre 20 y 30 1253 | 1254 | Queries de la clase 1255 | 1256 | Filtrando de forma numérica 1257 | 1258 | ```sql 1259 | SELECT * 1260 | FROM posts 1261 | WHERE id <= 10 ; 1262 | ``` 1263 | 1264 | Filtrando con strings 1265 | 1266 | ```sql 1267 | SELECT * 1268 | FROM posts 1269 | WHERE estatus = 'activo' ; 1270 | ``` 1271 | 1272 | ```sql 1273 | SELECT * 1274 | FROM posts 1275 | WHERE estatus != 'activo' ; 1276 | ``` 1277 | 1278 | Utilizando LIKE % es un wildcard 1279 | 1280 | ```sql 1281 | -- todos los post con la palabra 1282 | SELECT * 1283 | FROM posts 1284 | WHERE titulo LIKE '%escandalo%' ; 1285 | ``` 1286 | 1287 | ```sql 1288 | -- todos los post que inicien con la palabra 1289 | SELECT * 1290 | FROM posts 1291 | WHERE titulo LIKE 'escandalo%' ; 1292 | ``` 1293 | 1294 | ```sql 1295 | -- todos los post que terminen con la palabra 1296 | SELECT * 1297 | FROM posts 1298 | WHERE titulo LIKE '%roja' ; 1299 | ``` 1300 | 1301 | Usando WHERE con fechas 1302 | 1303 | ```sql 1304 | SELECT * 1305 | FROM posts 1306 | WHERE fecha_publicacion > "2025-01-01"; 1307 | ``` 1308 | 1309 | ```sql 1310 | SELECT * 1311 | FROM posts 1312 | WHERE fecha_publicacion < "2025-01-01"; 1313 | ``` 1314 | 1315 | Usando BETWEEN para definir un rangos 1316 | 1317 | ```sql 1318 | SELECT * 1319 | FROM posts 1320 | WHERE fecha_publicacion BETWEEN "2025-01-01" AND "2025-12-31"; 1321 | ``` 1322 | 1323 | ```sql 1324 | SELECT * 1325 | FROM posts 1326 | WHERE id BETWEEN 5 AND 10; 1327 | ``` 1328 | 1329 | Otros filtros con fechas 1330 | 1331 | ```sql 1332 | SELECT * 1333 | FROM posts 1334 | WHERE YEAR(fecha_publicacion) BETWEEN "2023" AND "2024"; 1335 | ``` 1336 | 1337 | ```sql 1338 | SELECT * 1339 | FROM posts 1340 | WHERE MONTH(fecha_publicacion) = "04"; 1341 | ``` 1342 | 1343 | ### Clase 34 Utilizando la sentencia WHERE nulo y no nulo 1344 | 1345 | El valor nulo en una tabla generalmente es su valor por defecto cuando nadie le asignó algo diferente. La sintaxis para hacer búsquedas de datos nulos es **IS NULL**. La sintaxis para buscar datos que no son nulos es **IS NOT NULL** 1346 | 1347 | Para posts sin usuario 1348 | 1349 | ```sql 1350 | SELECT * 1351 | FROM posts 1352 | WHERE usuario_id IS NULL; 1353 | ; 1354 | ``` 1355 | 1356 | Para posts con usuario 1357 | 1358 | ```sql 1359 | SELECT * 1360 | FROM posts 1361 | WHERE usuario_id IS NOT NULL; 1362 | ; 1363 | ``` 1364 | 1365 | Para posts con usuario y activo, el uso de AND agrega condiciones de tipo filtro como usar excel 1366 | 1367 | ```sql 1368 | SELECT * 1369 | FROM posts 1370 | WHERE usuario_id IS NOT NULL 1371 | AND estatus ='activo' 1372 | AND id < 20 1373 | AND categoria_id = 2 1374 | AND year(fecha_publicacion) = '2025' 1375 | ; 1376 | 1377 | ``` 1378 | 1379 | ### Clase 35 GROUP BY 1380 | 1381 | **GROUP BY** tiene que ver con agrupación. Indica a la base de datos qué criterios debe tener en cuenta para agrupar. 1382 | 1383 | Gruop by te permite agrupar estilo pivot tables, e informes. 1384 | 1385 | ```sql 1386 | SELECT estatus, COUNT(*) AS post_quantity 1387 | FROM posts 1388 | GROUP BY estatus 1389 | ; 1390 | ``` 1391 | 1392 | Ejemplo 2 Agrupando por Año 1393 | 1394 | ```sql 1395 | SELECT YEAR(fecha_publicacion) AS post_year, COUNT(*) AS post_quantity 1396 | FROM posts 1397 | GROUP BY post_year 1398 | ; 1399 | ``` 1400 | 1401 | Ejemplo 3 Agrupando por Mes 1402 | 1403 | ```sql 1404 | SELECT MONTHNAME(fecha_publicacion) AS post_month, COUNT(*) AS post_quantity 1405 | FROM posts 1406 | GROUP BY post_month 1407 | ; 1408 | ``` 1409 | 1410 | Ejemplo 4 Agrupando por Mes y estatus 1411 | 1412 | ```sql 1413 | SELECT estatus, MONTHNAME(fecha_publicacion) AS post_month, COUNT(*) AS post_quantity 1414 | FROM posts 1415 | GROUP BY estatus, post_month 1416 | ; 1417 | ``` 1418 | 1419 | ### Clase 36 ORDER BY y HAVING 1420 | 1421 | La sentencia **ORDER BY** tiene que ver con el ordenamiento de los datos dependiendo de los criterios que quieras usar. 1422 | 1423 | - **ASC** sirve para ordenar de forma ascendente. 1424 | - **DESC** sirve para ordenar de forma descendente. 1425 | - **LIMIT** se usa para limitar la cantidad de resultados que arroja el query. 1426 | - **HAVING** tiene una similitud muy grande con **WHERE**, sin embargo el uso de ellos depende del orden. Cuando se quiere seleccionar tuplas agrupadas únicamente se puede hacer con **HAVING**. 1427 | 1428 | Ejemplo Order by ascendente default 1429 | 1430 | ```sql 1431 | SELECT * 1432 | FROM posts 1433 | ORDER BY fecha_publicacion 1434 | ; 1435 | ``` 1436 | 1437 | Ejemplo Order by ascendente explicito 1438 | 1439 | ```sql 1440 | SELECT * 1441 | FROM posts 1442 | ORDER BY fecha_publicacion ASC 1443 | ; 1444 | ``` 1445 | 1446 | Ejemplo Order by descendente 1447 | 1448 | ```sql 1449 | SELECT * 1450 | FROM posts 1451 | ORDER BY fecha_publicacion DESC 1452 | ; 1453 | ``` 1454 | 1455 | Ordenando con strings se toma el orden alfabetico. 1456 | 1457 | ```sql 1458 | SELECT * 1459 | FROM posts 1460 | ORDER BY titulo ASC 1461 | ; 1462 | ``` 1463 | 1464 | Ejemplo Order by ascendente explicito y limite de 5 registros 1465 | 1466 | ```sql 1467 | SELECT * 1468 | FROM posts 1469 | ORDER BY fecha_publicacion ASC 1470 | LIMIT 5 1471 | ; 1472 | ``` 1473 | 1474 | **HAVING** es similar a **WHERE** aunque no muy utilizada, pero es necesaria cuando quieres hacer un filtro con datos agrupados por un ORDER BY, **HAVING** siempre va despues del **GROUP BY** 1475 | 1476 | ```sql 1477 | SELECT MONTHNAME(fecha_publicacion) AS post_month, estatus, COUNT(*) AS post_quantity 1478 | FROM posts 1479 | GROUP BY estatus, post_month 1480 | HAVING post_quantity > 1 1481 | ORDER BY post_month 1482 | ; 1483 | ``` 1484 | 1485 | ### Clase 37 El interminable agujero de conejo (Nested queries) 1486 | 1487 | Los **Nested queries** significan que dentro de un query podemos hacer otro query. Esto sirve para hacer join de tablas, estando una en memoria. También teniendo un query como condicional del otro. 1488 | 1489 | Este proceso puede ser tan profundo como quieras, teniendo infinitos queries anidados. 1490 | Se le conoce como un *producto cartesiano* ya que se multiplican todos los registros de una tabla con todos los del nuevo query. Esto provoca que el query sea difícil de procesar por lo pesado que puede resultar, y se considera como no escalable. 1491 | 1492 | Ejemplo 1 1493 | 1494 | ```sql 1495 | SELECT new_table_projection.date, COUNT(*) AS posts_count 1496 | FROM ( 1497 | SELECT DATE(MIN(fecha_publicacion)) AS date, year(fecha_publicacion) AS post_year 1498 | FROM posts 1499 | GROUP BY post_year 1500 | ) AS new_table_projection 1501 | GROUP BY new_table_projection.date 1502 | ORDER BY new_table_projection.date 1503 | ``` 1504 | 1505 | Ejemplo 2 1506 | 1507 | ```sql 1508 | SELECT * 1509 | FROM posts 1510 | WHERE fecha_publicacion = ( 1511 | SELECT MAX(fecha_publicacion) 1512 | FROM posts 1513 | ); 1514 | ``` 1515 | 1516 | ### Clase 38 Como convertir una pregunta en un query SQL 1517 | 1518 | #### De pregunta a Query 1519 | 1520 | **SELECT:** Lo que quieres mostrar 1521 | **FROM:** De dónde voy a tomar los datos (tablas unicas o con joins) 1522 | **WHERE:** Los filtros de los datos que quieres mostrar 1523 | **GROUP BY:** Los rubros por los que me interesa agrupar la información 1524 | **ORDER BY:** El orden en que quiero presentar mi información 1525 | **HAVING:** Los filtros que quiero que mis datos agrupados tengan 1526 | 1527 | 1528 | 1529 | ### Clase 39 Preguntandole a la base de datos 1530 | 1531 | **GROUP_CONCAT** toma el resultado del query y lo pone como campo separado por comas. 1532 | 1533 | Criterios. 1534 | 1535 | **DISTINCT:** Evita duplicidad en los valores. 1536 | **ORDER BY:** Sirve para decidir el orden de concatenación del campo. 1537 | **:** Es el separador a utilizar para separar los valores (por defecto, el separador es una coma “,”). 1538 | 1539 | Preguna 1 Cuantas etiquetas estan ligadas a los blogposts 1540 | 1541 | ```sql 1542 | SELECT posts.titulo, COUNT(*) num_etiquetas 1543 | FROM posts 1544 | INNER JOIN posts_etiquetas ON posts.id = posts_etiquetas.post_id 1545 | INNER JOIN etiquetas ON etiquetas.id = posts_etiquetas.etiqueta_id 1546 | GROUP BY posts.id 1547 | ORDER BY num_etiquetas DESC 1548 | ; 1549 | ``` 1550 | 1551 | Usando GROUP_CONCAT para tener campos separados por comas 1552 | 1553 | ```sql 1554 | SELECT posts.titulo, GROUP_CONCAT(nombre_etiqueta) 1555 | FROM posts 1556 | INNER JOIN posts_etiquetas ON posts.id = posts_etiquetas.post_id 1557 | INNER JOIN etiquetas ON etiquetas.id = posts_etiquetas.etiqueta_id 1558 | GROUP BY posts.id 1559 | ; 1560 | ``` 1561 | 1562 | ![GROUP_CONCAT](src/GROUP_CONCAT.png) 1563 | 1564 | Saber que posts no tienen etiquetas 1565 | 1566 | ```sql 1567 | SELECT * 1568 | FROM etiquetas 1569 | LEFT JOIN posts_etiquetas ON etiquetas.id = posts_etiquetas.etiqueta_id 1570 | WHERE posts_etiquetas.etiqueta_id IS NULL 1571 | ; 1572 | ``` 1573 | 1574 | ### Clase 40 Consultando PlatziBlog 1575 | 1576 | Puedes usar una abreviación para evitar escribir lo mismo cada vez. 1577 | Ejemplo: 1578 | 1579 | FROM categorias AS c 1580 | 1581 | Pregunta: Que categoria tiene mas posts escritos 1582 | 1583 | ```sql 1584 | SELECT c.nombre_categoria, COUNT(*) AS cant_posts 1585 | FROM categorias AS c 1586 | INNER JOIN posts AS p ON c.id = p.categoria_id 1587 | GROUP BY c.id 1588 | ORDER BY cant_posts DESC 1589 | LIMIT 1 1590 | ; 1591 | ``` 1592 | 1593 | Pregunta: Que persona tiene mas posts escritos 1594 | 1595 | ```sql 1596 | SELECT u.nickname, COUNT(*) AS cant_posts 1597 | FROM usuarios AS u 1598 | INNER JOIN posts AS p ON u.id = p.usuario_id 1599 | GROUP BY u.id 1600 | ORDER BY cant_posts DESC 1601 | ; 1602 | ``` 1603 | 1604 | ```sql 1605 | SELECT u.nickname, COUNT(*) AS cant_posts, GROUP_CONCAT(nombre_categoria) 1606 | FROM usuarios AS u 1607 | INNER JOIN posts AS p ON u.id = p.usuario_id 1608 | INNER JOIN categorias AS c ON c.id = p.categoria_id 1609 | GROUP BY u.id 1610 | ORDER BY cant_posts DESC 1611 | ; 1612 | ``` 1613 | 1614 | Que usuarios no han escrito nada 1615 | 1616 | ```sql 1617 | SELECT * 1618 | FROM usuarios 1619 | LEFT JOIN posts ON usuarios.id = posts.usuario_id 1620 | WHERE posts.usuario_id IS NULL 1621 | ; 1622 | ``` 1623 | 1624 | ## Modulo 4 Introduccion a la bases de datos NO relacionales 1625 | 1626 | ### Clase 41 Que son y cuales son los tipos de bases de datos no relacionales 1627 | 1628 | Respecto a las bases de datos no relacionales, no existe un solo tipo aunque se engloben en una sola categoría. 1629 | 1630 | #### Tipos de bases de datos no relacionales: 1631 | 1632 | - **Clave - valor:** Son ideales para almacenar y extraer datos con una clave única. Manejan los diccionarios de manera excepcional. Ejemplos: **DynamoDB, Cassandra**. 1633 | - **Basadas en documentos:** Son una implementación de clave valor que varía en la forma semiestructurada en que se trata la información. Ideal para almacenar datos JSON y XML. Ejemplos: **MongoDB, Firestore**. 1634 | - **Basadas en grafos:** Basadas en teoría de grafos, sirven para entidades que se encuentran interconectadas por múltiples relaciones. Ideales para almacenar relaciones complejas. Ejemplos: **neo4j, TITAN**. 1635 | - **En memoria:** Pueden ser de estructura variada, pero su ventaja radica en la velocidad, ya que al vivir en memoria la extracción de datos es casi inmediata. Ejemplos: **Memcached, Redis**. 1636 | - **Optimizadas para búsquedas:** Pueden ser de diversas estructuras, su ventaja radica en que se pueden hacer queries y búsquedas complejas de manera sencilla. Ejemplos: **BigQuery, Elasticsearch**. 1637 | 1638 | Cada base de datos de este tipo soluciona un problema en particular, pero es mala para todo lo demas dada la gran cantidad de datos. 1639 | 1640 | ### Clase 42 Servicios administrados y jerarquía de datos 1641 | 1642 | **Firebase** es un servicio de Google donde puedes tercerizar muchos elementos en la nube. 1643 | **Jerarquía de datos**: 1644 | 1645 | **1. Base de Datos:** Contiene toda la información que se quiere guardar. 1646 | **2. Colección:** Es igual a las tablas en las bases de datos relacionales. Son objetos que agrupan (Documentos) la información que se desea guardar. 1647 | **3. Documento:** Es la información que se quiere guardar. Se guarda en un formato muy parecido al formato JSON (es un lenguaje que se utiliza para comunicarse con diferentes lenguajes o aplicaciones). Los documentos dentro de ellos contienen datos. 1648 | 1649 | ![jerarquia_firestore](src/jerarquia_firestore.png) 1650 | 1651 | ## Modulo 5 Manejo de modelos de datos en bases de datos no relacionales 1652 | 1653 | ### Clase 43 Top level collection con Firebase 1654 | 1655 | El modelo de bases de datos no relacionales es un poco más cercano al mundo real en su comportamiento. 1656 | 1657 | - Las top level collections son las colecciones que se tienen de inmediato o entrada en el proyecto. 1658 | - **Firebase** es un servicio que tiene múltiples opciones y está pensado principalmente para aplicaciones móviles y web. 1659 | 1660 | Para esta clase creamos una bd en firebase 1661 | 1662 | Seguimos los pasos sencillos de la pagina para crear nuestra base de datos "platziblog" 1663 | 1664 | Creamos proyecto 1665 | 1666 | ![firebase_intro_1](src/firebase_intro_1.png) 1667 | 1668 | ![firebase_intro_2](src/firebase_intro_2.png) 1669 | 1670 | ![firebase_intro_3](src/firebase_intro_3.png) 1671 | 1672 | Panel Inicial 1673 | 1674 | ![firebase_intro_4](src/firebase_intro_4.png) 1675 | 1676 | Para crear una Top level collection (las que estan a nivel de la ruta principal) damos en simbolo plus, y creamos /people 1677 | 1678 | ![firebase_intro_5](src/firebase_intro_5.png) 1679 | 1680 | ![firebase_intro_6](src/firebase_intro_6.png) 1681 | 1682 | ![firebase_intro_7](src/firebase_intro_7.png) 1683 | 1684 | ### Clase 44 Creando y borrando documentos en Firestore 1685 | 1686 | Jugamos con la interface observamos los tipos de datos: 1687 | 1688 | - **string:** (absorve text, varchar, etc) 1689 | - **number:** (int,float) 1690 | - **Map:** permite hacer un arreglo dentro de otro arreglo (inception) 1691 | - **Timestamp:** para datos de tiempo 1692 | - **Geopoint** latitud y longitud. 1693 | - **Reference:**, hace referencia a otro documento o coleccion 1694 | 1695 | Ejemplos 1696 | 1697 | ![firebase_tipos_datos_1](src/firebase_tipos_datos_1.png) 1698 | 1699 | ![firebase_tipos_datos_2](src/firebase_tipos_datos_2.png) 1700 | 1701 | ![firebase_tipos_datos_3](src/firebase_tipos_datos_3.png) 1702 | 1703 | ![firebase_tipos_datos_4](src/firebase_tipos_datos_4.png) 1704 | 1705 | ### Clase 45 Colecciones vs subcolecciones 1706 | 1707 | La particularidad de las top level collections es que existen en el primer nivel de manera intrínseca. Las subcolecciones ya no vivirán al inicio de la base de datos. 1708 | 1709 | Si tienes una entidad separada que vas a referenciar desde muchos lugares es recomendado usar un top level collection. Por el otro lado si se necesita hacer algo intrínseco al documento es aconsejable usar subcolecciones. 1710 | 1711 | Creamos la coleccion posts 1712 | 1713 | ![colecciones_vs_subcolecciones_1](src/colecciones_vs_subcolecciones_1.png) 1714 | 1715 | ![colecciones_vs_subcolecciones_2](src/colecciones_vs_subcolecciones_2.png) 1716 | 1717 | ![colecciones_vs_subcolecciones_3](src/colecciones_vs_subcolecciones_3.png) 1718 | 1719 | ![colecciones_vs_subcolecciones_4](src/colecciones_vs_subcolecciones_4.png) 1720 | 1721 | ![colecciones_vs_subcolecciones_5](src/colecciones_vs_subcolecciones_5.png) 1722 | 1723 | ![colecciones_vs_subcolecciones_6](src/colecciones_vs_subcolecciones_6.png) 1724 | 1725 | ### Clase 46 Recreando Platziblog 1726 | 1727 | Firestore, es una base de datos basada en documentos, pensada en lo siguiente: 1728 | 1729 | Mantener el estado de tu aplicación. 1730 | En como se verán reflejados los datos en el frontend para el usuario. 1731 | Podemos hacer consultas sencillas en base a las top level collecttion. Ahora si queremos hacer consultas mas complejas podríamos usar big query, que es un data wharehouse. 1732 | 1733 | ### Clase 47 Construyendo Platziblog en Firestore 1734 | 1735 | Construimos categorias "espectaculos","deportes" y "ciencia" como top level collection 1736 | 1737 | ![Platziblog_firebase_1](src/Platziblog_firebase_1.png) 1738 | 1739 | ![Platziblog_firebase_2](src/Platziblog_firebase_2.png) 1740 | 1741 | Creamosen top level la coleccion usuarios 1742 | 1743 | ![Platziblog_firebase_3](src/Platziblog_firebase_3.png) 1744 | 1745 | Creamos la top level posts con dos articulos 1746 | 1747 | ![Platziblog_firebase_4](src/Platziblog_firebase_4.png) 1748 | 1749 | ![Platziblog_firebase_5](src/Platziblog_firebase_5.png) 1750 | 1751 | Ahora hacemos la relacion del top level collection del usuario /usuarios/qK7F62sQY8bKI8o9w5RY agregando un campo en un documento posts usando el campo reference agregando el usuario 1752 | 1753 | ![Platziblog_firebase_6](src/Platziblog_firebase_6.png) 1754 | 1755 | ![Platziblog_firebase_7](src/Platziblog_firebase_7.png) 1756 | 1757 | Agregamos las referencias para las categorias 1758 | 1759 | ![Platziblog_firebase_8](src/Platziblog_firebase_8.png) 1760 | 1761 | ![Platziblog_firebase_9](src/Platziblog_firebase_9.png) 1762 | 1763 | Finalmente agregamos las subcolecciones etiquetas a los posts en agregar coleccion 1764 | 1765 | ![Platziblog_firebase_10](src/Platziblog_firebase_10.png) 1766 | 1767 | ### Clase 48 Proyecto final: transformando tu proyecto en una db no relacional 1768 | 1769 | Dentro de las bases de datos relacionales tenemos diferentes niveles de datos. En primer lugar tenemos las Bases de Datos o Esquemas como repositorios donde vivirán los datos que nos interesa guardar. Dentro del esquema existen las Tablas que provienen del concepto de entidades; y a su vez dentro de las tablas tenemos las tuplas o renglones. 1770 | 1771 | Cuando trabajamos con bases de datos basadas en documentos como Firestore, aún existe la figura de la base de datos, sin embargo cambiaremos las tablas en favor de las colecciones y las tuplas en lugar de los documentos. 1772 | 1773 | Recuerda: 1774 | 1775 | Tabla -> Colección 1776 | 1777 | Tupla -> Documento 1778 | 1779 | Dentro de las Colecciones existen 2 grandes tipos. Las Top level collection o colecciones de nivel superior y las subcollections o subcolecciones. Estas últimas viven únicamente dentro de un documento padre. 1780 | 1781 | ¿Cómo saber cuál escoger? 1782 | 1783 | Para determinar si tu colección debe ser top level o subcolección no hay una regla escrita en piedra y más bien tiene que ver con el caso de uso en particular y con la experiencia que hayas ganado como desarrollador. 1784 | 1785 | Lo cierto es que no hay una sola forma de estructurar nuestra DB basada en documentos, y por tanto no existe una respuesta correcta, sin embargo a continuación te ofrezco un par de reglas guía que puedes utilizar para transformar tu proyecto que ya trabajaste en bases de datos relacionales en un proyecto no relacional. 1786 | 1787 | #### Regla 1. Piensa en la vista de tu aplicación 1788 | 1789 | La primera pista que te puedo dar es que pienses en un inicio en la manera en que los datos serán extraídos. En el caso de una aplicación, la mejor forma de pensarlo es en términos de las vistas que vas a mostrar a un momento determinado en la aplicación. 1790 | 1791 | Es decir, al armar la estructura en la base de datos que sea un espejo o que al menos contenga todos los datos necesarios para llenar las necesidades que tiene nuestra parte visual en la aplicación. 1792 | 1793 | En el caso de Platziblog por ejemplo si tienes una vista de un blog post individual, generalmente conviene mostrar además de los datos inherentes al post como el contenido, datos adicionales como las etiquetas que tiene o por ejemplo el autor (o autores si es colaborativo), en este caso tal vez convenga guardar estas dos “entidades” (autores y etiquetas) como subcolecciones de cada documento blog post. 1794 | 1795 | Regla 2. La colección tiene vida propia 1796 | 1797 | Esta regla se refiere a que la excepción a la regla 1 es cuando tenemos un caso en que la “entidad” que tiene necesidad de vivir y modificarse constantemente de manera independiente a las otras colecciones. Por ejemplo en Platziblog podemos en el ejemplo anterior hacer una excepción a autores porque nos conviene tenerlas como top level collection en el sentido que se añadan, borren, cambien o listen los usuarios sin depender del blog post. 1798 | 1799 | Experimenta aplicando estas dos reglas a un proyecto que ya conozcas en una base de datos relacional y trata de convertirla en un proyecto de Firestore y comentanos los retos a los que te enfrentaste. 1800 | 1801 | ## Modulo 6 Bases de datos en la vida real 1802 | 1803 | ### Clase 49 Bases de datos en la vida real 1804 | 1805 | Para datos historicos, queries complejos usar bigquery optimizado para datawherehouse 1806 | 1807 | Para datos del estado de nuestra aplicacion usa colecciones con mongo o firebase. 1808 | 1809 | Puedes usar dos bases de datos en un mismo proyecto, guardar datos de mongo, convertirlos pasarlos a bigquery y hacer analisis sobre ellos. 1810 | 1811 | ### Clase 50 Big Data 1812 | 1813 | **Big Data** es un concepto que nace de la necesidad de manejar grandes cantidades de datos. La tendencia comenzó con compañías como **YouTube** al tener la necesidad de guardar y consultar mucha información de manera rápida. 1814 | 1815 | Es un gran movimiento que consiste en el uso de diferentes tipos de bases de datos. 1816 | 1817 | Un ejemplo es cassandra pero tiene ciertos tipos de desventaja, su ventaja manejar datos masivos a gran velocidad 1818 | 1819 | ### Clase 51 Data warehouse 1820 | 1821 | **Data Warehouse** trata de guardar cantidades masivas de datos para la posteridad. Allí se guarda todo lo que no está viviendo en la aplicación pero es necesario tenerlo. 1822 | Debe servir para guardar datos por un largo periodo de tiempo y estos datos se deben poder usar para poder encontrar cuestiones interesantes para el negocio. 1823 | 1824 | Google usa **BigTable**, usa una sola tabla, pero no sirve tanto para hacer consultas 1825 | 1826 | **Data Warehouse** es un archivo historico, archivo muerto, en otra base de datos. Sirve para dos actividades principales: 1827 | 1828 | - Guarda una gran cantidad de datos de forma "eterna". 1829 | - Poder extraer los datos para hacer analitica. 1830 | 1831 | BigQuery es muy utilizado 1832 | 1833 | ### Clase 52 Data mining 1834 | 1835 | El **Data Mining** se dedica a minar datos, a extraerlos de donde sea que estén (archivos muertos, base de datos actual, etc…) y hacer sentido de ellos para darles un uso. 1836 | 1837 | ### Clase 53 ETL 1838 | 1839 | **ETL** son las siglas de Extract, Transform, Load (extraer, transformar y cargar). Se trata de tomar datos de archivos muertos y convertirlos en algo que sea de utilidad para el negocio. 1840 | También ayuda a tomar los datos vivos de la aplicación, transformarlos y guardarlos en un data warehouse periódicamente. 1841 | 1842 | ### Clase 54 Business intelligence 1843 | 1844 | **Business Intelligence** es una parte muy importante de las carreras de datos ya que es el punto final del manejo de estos. Su razón de ser es tener la información lista, clara y que tenga todos los elementos para tomar decisiones en una empresa. 1845 | Es necesario tener una buena sensibilidad por entender el negocio, sus necesidades y la información que puede llevar a tomar decisiones en el momento adecuado al momento de realizar business intelligence. 1846 | 1847 | ### Clase 55 Machine Learning 1848 | 1849 | **Machine Learning** tiene significados que varían. Es una serie de técnicas que involucran la inteligencia artificial y la detección de patrones. 1850 | Machine learning para datos tiene un gran campo de acción y es un paso más allá del business intelligence. 1851 | Nos ayuda a hacer modelos que encuentran patrones fortuitos encontrando correlaciones inesperadas. 1852 | 1853 | **Tiene dos casos de uso particulares:** 1854 | 1855 | - Clasificación 1856 | - Predicción 1857 | 1858 | ### Clase 56 Data Science 1859 | 1860 | **Data Science** es aplicar todas las técnicas de procesamiento de datos. En su manera más pura tiene que ver con gente con un background de estadísticas y ciencias duras. 1861 | 1862 | ### Clase 57 Por que aprender bases de datos hoy 1863 | 1864 | ¡Has concluido el curso! Ahora tienes potentes herramientas y posibilidades para ingresar en este apasionante campo. 1865 | 1866 | Llevaste diagramas a bases de datos, exploraste un poco el mundo de las bases de datos no relacionales, hicimos un proyecto en firestore y transformamos Platzi blog de una base de datos relacional en una base de datos de documentos. 1867 | 1868 | Dentro de las posibilidades que tienes hoy en día puedes hacer: Machine learning, ETL, Data Warehouse, Data mining, entre otros. 1869 | 1870 | Recuerda practicar mucho con el proyecto. Te invito a que tomes el examen y verifiques tus conocimientos. ¡Exitos! 1871 | 1872 | ## Bonus 1873 | 1874 | ### Clase 58 Bases de datos relacionales vs no relacionales 1875 | 1876 | Las bases de datos relacionales han estado entre nosotros durante un largo tiempo y han sido usadas por grandes como Google, Amazon, entre otros. Aún son usadas por bancos, aseguradoras, etc. 1877 | 1878 | Las bases de datos no relacionales surgen cuando las grandes empresas sintieron necesidad de guardar y extraer grandes cantidades de datos en muy cortos periodos de tiempo, como YouTube. 1879 | -------------------------------------------------------------------------------- /Notas/src/Atributos-rdb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/Atributos-rdb.png -------------------------------------------------------------------------------- /Notas/src/GROUP_CONCAT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/GROUP_CONCAT.png -------------------------------------------------------------------------------- /Notas/src/Instalador_mysql_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/Instalador_mysql_1.png -------------------------------------------------------------------------------- /Notas/src/Instalador_mysql_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/Instalador_mysql_2.png -------------------------------------------------------------------------------- /Notas/src/Instalador_mysql_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/Instalador_mysql_3.png -------------------------------------------------------------------------------- /Notas/src/Platziblog_firebase_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/Platziblog_firebase_1.png -------------------------------------------------------------------------------- /Notas/src/Platziblog_firebase_10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/Platziblog_firebase_10.png -------------------------------------------------------------------------------- /Notas/src/Platziblog_firebase_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/Platziblog_firebase_2.png -------------------------------------------------------------------------------- /Notas/src/Platziblog_firebase_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/Platziblog_firebase_3.png -------------------------------------------------------------------------------- /Notas/src/Platziblog_firebase_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/Platziblog_firebase_4.png -------------------------------------------------------------------------------- /Notas/src/Platziblog_firebase_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/Platziblog_firebase_5.png -------------------------------------------------------------------------------- /Notas/src/Platziblog_firebase_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/Platziblog_firebase_6.png -------------------------------------------------------------------------------- /Notas/src/Platziblog_firebase_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/Platziblog_firebase_7.png -------------------------------------------------------------------------------- /Notas/src/Platziblog_firebase_8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/Platziblog_firebase_8.png -------------------------------------------------------------------------------- /Notas/src/Platziblog_firebase_9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/Platziblog_firebase_9.png -------------------------------------------------------------------------------- /Notas/src/SQL_create.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/SQL_create.png -------------------------------------------------------------------------------- /Notas/src/SQL_create_database.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/SQL_create_database.png -------------------------------------------------------------------------------- /Notas/src/Teoria_conjuntos.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/Teoria_conjuntos.jpg -------------------------------------------------------------------------------- /Notas/src/Teoria_conjuntos.jpg:Zone.Identifier: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/Teoria_conjuntos.jpg:Zone.Identifier -------------------------------------------------------------------------------- /Notas/src/alter_table_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/alter_table_1.png -------------------------------------------------------------------------------- /Notas/src/alter_table_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/alter_table_2.png -------------------------------------------------------------------------------- /Notas/src/alter_table_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/alter_table_3.png -------------------------------------------------------------------------------- /Notas/src/alter_table_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/alter_table_4.png -------------------------------------------------------------------------------- /Notas/src/badge.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/badge.webp -------------------------------------------------------------------------------- /Notas/src/badge.webp:Zone.Identifier: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/badge.webp:Zone.Identifier -------------------------------------------------------------------------------- /Notas/src/cardinalidad_0_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/cardinalidad_0_1.png -------------------------------------------------------------------------------- /Notas/src/cardinalidad_0_N.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/cardinalidad_0_N.png -------------------------------------------------------------------------------- /Notas/src/cardinalidad_1_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/cardinalidad_1_1.png -------------------------------------------------------------------------------- /Notas/src/cardinalidad_1_N.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/cardinalidad_1_N.png -------------------------------------------------------------------------------- /Notas/src/cardinalidad_N_N.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/cardinalidad_N_N.png -------------------------------------------------------------------------------- /Notas/src/colecciones_vs_subcolecciones_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/colecciones_vs_subcolecciones_1.png -------------------------------------------------------------------------------- /Notas/src/colecciones_vs_subcolecciones_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/colecciones_vs_subcolecciones_2.png -------------------------------------------------------------------------------- /Notas/src/colecciones_vs_subcolecciones_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/colecciones_vs_subcolecciones_3.png -------------------------------------------------------------------------------- /Notas/src/colecciones_vs_subcolecciones_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/colecciones_vs_subcolecciones_4.png -------------------------------------------------------------------------------- /Notas/src/colecciones_vs_subcolecciones_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/colecciones_vs_subcolecciones_5.png -------------------------------------------------------------------------------- /Notas/src/colecciones_vs_subcolecciones_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/colecciones_vs_subcolecciones_6.png -------------------------------------------------------------------------------- /Notas/src/create_table_slide.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/create_table_slide.png -------------------------------------------------------------------------------- /Notas/src/create_view1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/create_view1.png -------------------------------------------------------------------------------- /Notas/src/create_view2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/create_view2.png -------------------------------------------------------------------------------- /Notas/src/create_view3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/create_view3.png -------------------------------------------------------------------------------- /Notas/src/create_view4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/create_view4.png -------------------------------------------------------------------------------- /Notas/src/delete__command_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/delete__command_1.png -------------------------------------------------------------------------------- /Notas/src/diagrama_ER.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/diagrama_ER.png -------------------------------------------------------------------------------- /Notas/src/diagrama_fisico_1N.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/diagrama_fisico_1N.png -------------------------------------------------------------------------------- /Notas/src/diagrama_fisico_2N.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/diagrama_fisico_2N.png -------------------------------------------------------------------------------- /Notas/src/diagrama_fisico_3N.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/diagrama_fisico_3N.png -------------------------------------------------------------------------------- /Notas/src/diagrama_fisico_4N.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/diagrama_fisico_4N.png -------------------------------------------------------------------------------- /Notas/src/diagrama_fisico_paso_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/diagrama_fisico_paso_1.png -------------------------------------------------------------------------------- /Notas/src/diagrama_fisico_paso_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/diagrama_fisico_paso_2.png -------------------------------------------------------------------------------- /Notas/src/diagrama_fisico_paso_2_N_N.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/diagrama_fisico_paso_2_N_N.png -------------------------------------------------------------------------------- /Notas/src/diagrama_fisico_paso_3_N_N.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/diagrama_fisico_paso_3_N_N.png -------------------------------------------------------------------------------- /Notas/src/diagrama_fisico_sin_normalizar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/diagrama_fisico_sin_normalizar.png -------------------------------------------------------------------------------- /Notas/src/drop_column_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/drop_column_1.png -------------------------------------------------------------------------------- /Notas/src/drop_column_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/drop_column_2.png -------------------------------------------------------------------------------- /Notas/src/drop_schema_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/drop_schema_1.png -------------------------------------------------------------------------------- /Notas/src/drop_schema_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/drop_schema_2.png -------------------------------------------------------------------------------- /Notas/src/drop_schema_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/drop_schema_3.png -------------------------------------------------------------------------------- /Notas/src/drop_schema_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/drop_schema_4.png -------------------------------------------------------------------------------- /Notas/src/drop_table.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/drop_table.png -------------------------------------------------------------------------------- /Notas/src/drop_table_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/drop_table_1.png -------------------------------------------------------------------------------- /Notas/src/drop_table_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/drop_table_2.png -------------------------------------------------------------------------------- /Notas/src/drop_table_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/drop_table_3.png -------------------------------------------------------------------------------- /Notas/src/entidades_debiles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/entidades_debiles.png -------------------------------------------------------------------------------- /Notas/src/entidades_debiles_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/entidades_debiles_2.png -------------------------------------------------------------------------------- /Notas/src/entidades_platziblog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/entidades_platziblog.png -------------------------------------------------------------------------------- /Notas/src/entidades_platziblog_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/entidades_platziblog_2.png -------------------------------------------------------------------------------- /Notas/src/entidades_platziblog_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/entidades_platziblog_3.png -------------------------------------------------------------------------------- /Notas/src/firebase_intro_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/firebase_intro_1.png -------------------------------------------------------------------------------- /Notas/src/firebase_intro_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/firebase_intro_2.png -------------------------------------------------------------------------------- /Notas/src/firebase_intro_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/firebase_intro_3.png -------------------------------------------------------------------------------- /Notas/src/firebase_intro_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/firebase_intro_4.png -------------------------------------------------------------------------------- /Notas/src/firebase_intro_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/firebase_intro_5.png -------------------------------------------------------------------------------- /Notas/src/firebase_intro_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/firebase_intro_6.png -------------------------------------------------------------------------------- /Notas/src/firebase_intro_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/firebase_intro_7.png -------------------------------------------------------------------------------- /Notas/src/firebase_tipos_datos_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/firebase_tipos_datos_1.png -------------------------------------------------------------------------------- /Notas/src/firebase_tipos_datos_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/firebase_tipos_datos_2.png -------------------------------------------------------------------------------- /Notas/src/firebase_tipos_datos_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/firebase_tipos_datos_3.png -------------------------------------------------------------------------------- /Notas/src/firebase_tipos_datos_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/firebase_tipos_datos_4.png -------------------------------------------------------------------------------- /Notas/src/insert_command.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/insert_command.png -------------------------------------------------------------------------------- /Notas/src/insert_command_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/insert_command_1.png -------------------------------------------------------------------------------- /Notas/src/insert_command_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/insert_command_2.png -------------------------------------------------------------------------------- /Notas/src/jerarquia_firestore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/jerarquia_firestore.png -------------------------------------------------------------------------------- /Notas/src/platziblog_tabla_caracteristicas_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/platziblog_tabla_caracteristicas_1.png -------------------------------------------------------------------------------- /Notas/src/platziblog_tabla_caracteristicas_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/platziblog_tabla_caracteristicas_2.png -------------------------------------------------------------------------------- /Notas/src/platziblog_tabla_comentarios.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/platziblog_tabla_comentarios.png -------------------------------------------------------------------------------- /Notas/src/platziblog_tabla_comentarios_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/platziblog_tabla_comentarios_1.png -------------------------------------------------------------------------------- /Notas/src/platziblog_tabla_comentarios_post_fk_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/platziblog_tabla_comentarios_post_fk_1.png -------------------------------------------------------------------------------- /Notas/src/platziblog_tabla_comentarios_post_fk_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/platziblog_tabla_comentarios_post_fk_2.png -------------------------------------------------------------------------------- /Notas/src/platziblog_tabla_comentarios_usuarios_fk_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/platziblog_tabla_comentarios_usuarios_fk_1.png -------------------------------------------------------------------------------- /Notas/src/platziblog_tabla_comentarios_usuarios_fk_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/platziblog_tabla_comentarios_usuarios_fk_2.png -------------------------------------------------------------------------------- /Notas/src/platziblog_tabla_etiquetas_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/platziblog_tabla_etiquetas_1.png -------------------------------------------------------------------------------- /Notas/src/platziblog_tabla_etiquetas_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/platziblog_tabla_etiquetas_2.png -------------------------------------------------------------------------------- /Notas/src/platziblog_tabla_post_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/platziblog_tabla_post_1.png -------------------------------------------------------------------------------- /Notas/src/platziblog_tabla_post_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/platziblog_tabla_post_2.png -------------------------------------------------------------------------------- /Notas/src/platziblog_tabla_post_etiquetas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/platziblog_tabla_post_etiquetas.png -------------------------------------------------------------------------------- /Notas/src/platziblog_tabla_post_etiquetas_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/platziblog_tabla_post_etiquetas_1.png -------------------------------------------------------------------------------- /Notas/src/platziblog_tabla_post_etiquetas_etiquetas_fk_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/platziblog_tabla_post_etiquetas_etiquetas_fk_1.png -------------------------------------------------------------------------------- /Notas/src/platziblog_tabla_post_etiquetas_etiquetas_fk_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/platziblog_tabla_post_etiquetas_etiquetas_fk_2.png -------------------------------------------------------------------------------- /Notas/src/platziblog_tabla_post_etiquetas_fk_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/platziblog_tabla_post_etiquetas_fk_1.png -------------------------------------------------------------------------------- /Notas/src/platziblog_tabla_post_etiquetas_fk_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/platziblog_tabla_post_etiquetas_fk_2.png -------------------------------------------------------------------------------- /Notas/src/platziblog_tabla_post_etiquetas_post_fk_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/platziblog_tabla_post_etiquetas_post_fk_2.png -------------------------------------------------------------------------------- /Notas/src/platziblog_tabla_post_fk_categorias_id.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/platziblog_tabla_post_fk_categorias_id.png -------------------------------------------------------------------------------- /Notas/src/platziblog_tabla_post_fk_categorias_id_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/platziblog_tabla_post_fk_categorias_id_1.png -------------------------------------------------------------------------------- /Notas/src/platziblog_tabla_post_fk_usuario_id.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/platziblog_tabla_post_fk_usuario_id.png -------------------------------------------------------------------------------- /Notas/src/platziblog_tabla_usuarios_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/platziblog_tabla_usuarios_1.png -------------------------------------------------------------------------------- /Notas/src/platziblog_tabla_usuarios_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/platziblog_tabla_usuarios_2.png -------------------------------------------------------------------------------- /Notas/src/relaciones.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/relaciones.png -------------------------------------------------------------------------------- /Notas/src/reverse_engineer_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/reverse_engineer_1.png -------------------------------------------------------------------------------- /Notas/src/reverse_engineer_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/reverse_engineer_2.png -------------------------------------------------------------------------------- /Notas/src/reverse_engineer_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/reverse_engineer_3.png -------------------------------------------------------------------------------- /Notas/src/reverse_engineer_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/reverse_engineer_4.png -------------------------------------------------------------------------------- /Notas/src/reverse_engineer_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/reverse_engineer_5.png -------------------------------------------------------------------------------- /Notas/src/reverse_engineer_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/reverse_engineer_6.png -------------------------------------------------------------------------------- /Notas/src/reverse_engineer_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/reverse_engineer_7.png -------------------------------------------------------------------------------- /Notas/src/select_command.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/select_command.png -------------------------------------------------------------------------------- /Notas/src/select_command_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/select_command_1.png -------------------------------------------------------------------------------- /Notas/src/teoria_conjuntos_sentencias.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/teoria_conjuntos_sentencias.jpg -------------------------------------------------------------------------------- /Notas/src/teoria_conjuntos_sentencias.jpg:Zone.Identifier: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/teoria_conjuntos_sentencias.jpg:Zone.Identifier -------------------------------------------------------------------------------- /Notas/src/update_command.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/update_command.png -------------------------------------------------------------------------------- /Notas/src/update_command_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/update_command_1.png -------------------------------------------------------------------------------- /Notas/src/update_command_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/update_command_2.png -------------------------------------------------------------------------------- /Notas/src/worckbench_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/worckbench_1.png -------------------------------------------------------------------------------- /Notas/src/worckbench_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/worckbench_2.png -------------------------------------------------------------------------------- /Notas/src/worckbench_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/worckbench_3.png -------------------------------------------------------------------------------- /Notas/src/worckbench_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/worckbench_4.png -------------------------------------------------------------------------------- /Notas/src/worckbench_default_schema.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/worckbench_default_schema.png -------------------------------------------------------------------------------- /Notas/src/worckbench_new_table_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/worckbench_new_table_1.png -------------------------------------------------------------------------------- /Notas/src/worckbench_new_table_2_apply.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/worckbench_new_table_2_apply.png -------------------------------------------------------------------------------- /Notas/src/worckbench_new_table_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/worckbench_new_table_3.png -------------------------------------------------------------------------------- /Notas/src/workbench_create_view.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rb-one/Notas-fundamentos-bases-de-datos/286d317f04e866114cc4ca95ce3cea2df2bb5dd8/Notas/src/workbench_create_view.png --------------------------------------------------------------------------------