Free YouTube Transcribe

Video transcript

NORMALIZACIÓN en BASES DE DATOS | MASTER CLASSS ¡Con Ejercicio!

TodoCode · 6,178 words · 29 min read

Want to search this transcript, jump the video from any line, or download it as TXT, SRT, or VTT?

Open in the transcript tool

Full transcript

Introducción

0:00Hola gente, ¿cómo andan? Espero que muy

0:02bien. Yo con frío, ya verán por mis

0:04guantes, típico de eh persona

0:06informática. Tengo que tener los dedos

0:07para poder teclar, pero acá aguantando

0:10el frío. Como pueden ver en el título

0:11del video, van a ver que vamos a

0:13trabajar hoy con un tema que me pidieron

0:15muchísimo ustedes, que es el de

0:17normalización de base de datos. Es un

0:19tema que me pidieron muchísimo y que en

0:21el actual curso que les voy a dejar acá

0:23de introducción a las bases de datos que

0:25tenemos en la academia, que lo grabé

0:26hace varios años, no está tenido en

0:29cuenta. Por lo cual dije, "Okay, hago un

0:32video nuevo, un video exclusivo para que

0:33ustedes puedan tener este tema y además

0:36para que se acuerden que estamos

0:37haciendo un remasterizado de ese curso

0:39original con nueva calidad, nuevos

0:41ejercicios, algunos temas extras y demás

0:43que va a estar dentro de poco acá en

0:45YouTube y también subido a la academia

0:48luego que ahora sí va a tener este tema

0:50también de normalización muy pedido por

0:53ustedes. No vamos a dar muchas vueltas

0:54ya en la explicación y vamos a ir

0:56derecho a lo que es el contenido teórico

0:58práctico, porque esta va a ser una

0:59master class. Vamos a dar todo lo que

1:03corresponde a la clase desde la forma

1:05cero normal cuando tenemos una base de

1:07datos no normalizada hasta la tercera y

1:10luego cuarta y demás formas normales que

1:12les voy a explicar en qué situaciones

1:14conviene utilizarlas o no. Así que sin

1:16dar más vueltas, si les gusta este

1:17contenido, no se olviden de darle a me

1:19gusta, suscribirse, darle click a la

1:20campanita y compartirlo con quien crea

1:23que les pueda servir. Vamos a eso, mi

¿Qué es la normalización?

1:25gente. Arrancamos entonces con lo que es

1:26el concepto de normalización. Si es la

1:28primera vez que están escuchando este

1:30concepto, no se asusten que les voy a

1:31explicar desde cero, ¿okay? Básicamente

1:34es un proceso que se hace dentro de la

1:36informática en el campo de las bases de

1:38datos cuando estamos diseñando, es

1:40decir, cuando estamos planificando bases

1:42de datos relacionales. Lo que busca la

1:45normalización son tres puntos

1:48principales, que son los tres que pueden

1:50ver acá, que son eliminar la redundancia

1:52de datos, es decir, evitar que haya

1:54datos repetidos, que los datos estén en

1:56lo posible una sola vez y de forma

1:59accesible y fácil. Sí, evitar anomalías,

2:02es decir, cosas que no correspondan o

2:05que puedan ser confusas o que dupliquen

2:07datos y demás. Cuando hacemos

2:09inserciones, es decir, altas

2:11actualizaciones, es decir,

2:12modificaciones o eliminaciones de datos

2:14en la base de datos. Y lo que busca es

2:16garantizar la integridad de los datos.

2:19¿Qué significa que los datos sean

2:20íntegros? que tengan sentido, ¿no? Que

2:23por ejemplo tenga guardado dos veces a

2:25una misma persona y que en un lugar diga

2:27que tiene 40 años y en otro lado diga

2:29que tenga 35. Eso no cumple la

2:31integridad de datos. Sí, además de que

2:33tengo datos duplicados, no son íntegros,

2:36ya que me dan información diferente. Por

2:38decir un ejemplo de varios que pueden

Formas Normales

2:40darse. Vamos a arrancar entonces, gente,

2:41con las formas normales. Primero y

2:44principal vamos a suponer, lo voy a

2:45explicar con un ejemplo práctico, ¿okay?

2:47Y vamos a arrancar con la cero forma

2:50normal o forma normal cero, lo pueden

2:53decir de cualquiera de las dos formas,

2:55donde tenemos una tabla en cuestión que

2:58no está para nada normalizada, es decir,

3:00puede tener datos repetidos, puede

3:02entrar un montón de cuestiones que van a

3:04hacer que justamente nosotros tengamos

3:06que optimizar nuestra tabla. Fíjense en

3:09esta que tenemos, tenemos una ID

3:10empleado, tenemos tres empleados,

3:12tenemos departamentos y tenemos idiomas.

3:15Fíjense, ya haciendo un análisis rápido

3:18de esta tabla que tenemos acá, ya

3:20podemos ver cosas que hm pueden llegar a

3:23ser duplicadas. Por ejemplo, vemos que

3:25los idiomas ya están duplicados en

3:27varias ocasiones, ¿no? Fíjense, al mismo

3:30tiempo vemos que los idiomas son listas,

3:32cuándo tranquilamente podríamos

3:34asociarlos en otra tabla, tener una

3:37tabla exclusiva de idiomas y demás

3:38cuestiones. Y lo mismo pasa con los

3:41departamentos. ¿Qué pasa si después

3:43llega un nuevo empleado y también es de

3:44marketing o de recursos humanos de

3:46sistemas? Voy a tener datos duplicados.

3:49Entonces ahí ya cuando empezamos a

3:50analizar podemos ver de que podemos ir

3:53mejorando esta tabla. Entonces si nos

1era Forma Normal (1FN)

3:55damos cuenta de eso, podemos ir a la

3:57primera forma normal. La primera forma

4:00normal, como les conté recién, busca que

4:02los atributos, es decir, cada uno de los

4:04campos de las tablas de mi base de datos

4:06sean atómicos y que no sean repetidos o

4:10multivaluados. Es decir, que tengan un

4:12solo valor, ¿si? Y que no pueda ser este

4:15valor repetido. ¿Okay? Esto establece de

4:18que no tienen que haber listas ni

4:20conjuntos como valores. ¿Qué pasaba en

4:22la cero forma normal? Fíjense,

4:24inglés, francés, esto es una lista. Acá

4:27tenemos inglés solo, pero acá tenemos

4:28alemán, inglés, portugués. Son listas de

4:31datos. Entonces, la primera forma normal

4:33lo que busca es la atomicidad. lo que

4:35busca es hacer ahora que en nuestra

4:38tabla haya un solo valor, en este caso,

4:41por ejemplo, de idioma. Pero, ¿qué va a

4:43pasar acá? Si aplicamos la primera forma

4:45normal y separamos, vamos a tener Ana

4:48Gómez de recursos humanos, que sabe

4:50inglés, pero después vamos a tener de

4:52vuelta a Ana Gómez de recursos humanos,

4:54que sabe francés. Después tenemos a Juan

4:57Pérez, que sabe inglés y después tenemos

4:58a Laura Díaz tres veces porque sabe tres

5:02idiomas: alemán, inglés y portugués.

5:04Fíjense que acá estaba todo ordenadito,

5:07pero teníamos un montón de datos

5:09acumulados en una sola columna, los

5:11idiomas, en forma de lista. Sí. Acá lo

5:14que hicimos fue separarlo, que es la

5:15primera forma normal, pero seguimos

5:18teniendo redundancia de datos. Entonces,

5:20¿qué pasa? ¿Cuáles son los problemas?

5:22Tenemos la redundancia tanto en el

5:25nombre de la persona como en el

5:27departamento al que pertenece. están

5:29duplicados y hasta triplicados en este

5:31caso. Entonces esto hace de que tengamos

5:34una escalabilidad limitada, es decir,

5:36que no pueda seguir creciendo nuestra

5:38tabla, porque si llegamos a agregar un

5:41nuevo empleado que sabe cinco idiomas,

5:42que vamos a tener cinco registros nuevos

5:44y esto no es para nada eficiente. Y es

5:47ahí donde tenemos que pasar a la segunda

5:49forma normal. Bien, gente, la segunda

5:51forma normal, lo primero que tenemos que

5:53tener en cuenta es que se pueda aplicar

5:55solo si ya aplicamos anteriormente a la

5:57tabla en cuestión con la que estamos

5:59trabajando, la primera forma normal, es

6:02decir, ya tiene que estar normalizada al

6:04primer nivel. Si no podemos eh

6:07establecer la segunda forma normal si

6:09todavía no establecimos la primera.

6:11¿Okay? ¿Qué busca la segunda forma

6:14normal? En este caso, fíjese que lo que

6:17hace es exigir que todos los atributos

6:21dependia,

6:24no de parte ello. ¿Qué pasaba? ¿Se

6:26acuerdan que miren el caso anterior,

6:29nuestra clave primaria, ¿qué pasaba?

6:30teníamos dos clave primaria uno con

6:33distintos valores. Después teníamos la

6:35clave primaria tres tres veces y con

2da Forma Normal (2FN)

6:38distintos valores. Lo que dice la

6:39segunda forma normal es, okay, busca la

6:42forma de que la clave primaria sí no se

6:47duplique. Entonces, lo que busca es

6:48eliminar dependencias parciales si la

6:50clave es compuesta. La clave es

6:52compuesta cuando sucede esto que les

6:53acabo de contar. Entonces, ¿qué pasa con

6:56esto? Si nosotros tenemos lo que más se

6:59repite son los idiomas y los

7:01departamentos, nosotros podemos decir,

7:03"Epa, acá tengo una posibilidad de

7:06dividir en tablas diferentes." Entonces,

7:08por ejemplo, idioma, yo lo puedo sacar

7:11en una nueva tabla y es lo que hacemos

7:13en esta segunda forma normal. Entonces,

7:15lo que yo tengo o puedo hacer es

7:18mantener todo prolijo y hermoso en mi

7:21tabla original de empleados con cada uno

7:24de los nombres, sin duplicar con su

7:26departamento y crear una nueva tabla que

7:30lo que mantenga sean cada una de las IDs

7:33de los empleados y los idiomas que saben

7:37cada uno. Entonces, de esa manera,

7:39fíjense que mi tabla empleados cumple

7:42con la segunda forma normal. Sin

7:44embargo, ojo con esta segunda tabla que

7:47creamos. Sí, estamos enfocados en que

7:49normalizamos esta tabla, pero después

7:53vamos a ver que hay oportunidad de

7:54mejora en las tablas nuevas que creamos

7:56a partir de la normalización. Entonces,

7:58por ejemplo, si yo quiero saber qué

8:00idioma sabe Ana Gómez, yo vengo a la

8:02tabla de idiomas y digo, "Okay, Ana

8:04Gómez sabe inglés y francés." Y después

8:06digo, "¿Qué idioma sabe Laura Díaz?

8:08¿Sabe alemán, inglés y portugués?" Sin

8:10embargo, ojo que acá sigue habiendo

8:13redundancia de datos, que ya vamos a ver

8:15un detalle eso, ¿okay? ¿Qué mejoras

8:18implementamos acá? Eliminamos la

8:20duplicación, ¿sí?, de nombres y

8:22departamentos. Ya los departamentos no

8:24se duplican, ¿sí? Y tampoco se duplican

8:28los nombres de un golazo. Pero, ¿cuáles

8:30son los problemas que tenemos ahora? que

8:33hay una dependencia transitiva

8:36en el nombre del departamento y el

8:39nombre del departamento no tiene que

8:42depender directamente de la clave

8:44empleado. Eso es justamente una

8:47dependencia transitiva. Les explico

8:48ahora en mayor detalle. Una dependencia

¿Qué es una dependencia transitiva?

8:51transitiva, gente, establece en

8:53matemáticas, por ejemplo, que si yo

8:55tengo una relación entre una A y una B y

8:59una B también se relaciona con una C, la

9:02dependencia transitiva dice, "Okay, si A

9:04es B y B es C, entonces automáticamente

9:06A también puede ser C." ¿Sí? Esto en

9:09base de datos se podría decir como que

9:12si un atributo determina a otro

9:15atributo, ¿sí? y ese otro atributo

9:18determina un tercero, en este caso un C,

9:21entonces yo puedo decir que el atributo

9:23A determina el C de manera indirecta.

9:25Eso es una dependencia transitiva. En

9:28nuestro ejemplo, ¿qué es lo que daría?

9:30diría esto, que el ID empleado está

9:32asociado al departamento. Sí, yo voy a

9:35tener ID empleado uno asociado al

9:37departamento recursos humanos, por lo

9:39cual yo automáticamente puedo decir,

9:41"Okay, el departamento está asociado al

9:45nombre del departamento." O sea, mi

9:47campo departamento está asociado al

9:49nombre del departamento, por lo cual yo

9:51tranquilamente puedo decir, "Okay, la ID

9:53del empleado está asociado al nombre del

9:55departamento." Sin embargo, sin embargo,

9:58si yo agrego una nueva persona acá abajo

10:01y también es de recursos humanos, se

10:03rompe esto. ¿Por qué? Porque voy a tener

10:06una ID4 y también voy a tener recursos

10:08humanos, lo cual no tiene una no debería

10:12de tener una dependencia. El nombre del

10:14departamento no tiene que depender de la

10:16ID del empleado. Son dos cosas que no

10:18tienen nada que ver una con la otra.

10:21Entonces, lo que nosotros podemos darnos

10:23cuenta acá es que no se cumple la

10:25tercera forma normal, que es lo que les

10:28voy a mostrar a continuación. Bien,

3era Forma Normal (3FN)

10:30gente, llegamos a la tercera forma

10:31normal. ¿Y qué tenemos en cuenta? La

10:33tercera forma normal, que se aplica

10:35tablas que ya estén en la segunda forma

10:38normal. ¿Okay? Es decir, ya tuvo que

10:40haber pasado por la primera, por la

10:43segunda y ahora recién en base a eso

10:45puedo aplicar la tercera. No puedo

10:46aplicar de una si no están aplicadas las

10:48dos anteriores primero. ¿Okay?

10:51¿Qué tenemos que hacernos eh o qué

10:53tenemos que exigir en esta forma normal?

10:55Que no haya esa dependencia transitiva

10:57como el caso que les conté recién.

10:59Entonces, ¿qué hacemos? Eliminamos eso.

11:01¿Cómo lo eliminamos? Okay, nos habíamos

11:03dado cuenta de que un empleado estaba

11:06asociado directamente un departamento,

11:08por lo cual decimos, bueno, los

11:09departamentos pueden ser una tabla

11:11aparte, pueden estar almacenados en una

11:14tabla aparte y los puedo asociar por la

11:16ID, por la Primary Key y una foreign

11:18key. Entonces, yo puedo crear

11:20tranquilamente una nueva tabla que sea

11:23departamentos, por ejemplo, y hago que

11:26cada departamento tenga una ID única.

11:30Por ejemplo, recursos humanos, sistemas

11:32marketing, tienen cada uno su ID única,

11:341, dos y tres. ¿Y qué hago? Hago la

11:37asociación de que Ana Gómez pertenece al

11:40departamento uno. Si busco en la otra

11:42tabla, ¿a dónde pertenece? Recursos

11:44humanos. Juan Pérez pertenece al

11:46departamento dos. Si busco en la tabla

11:49de apartamentos, efectivamente es en

11:50sistemas. Me oficina, pero quedó igual a

11:53la anterior que era esta, pero en una

11:56tabla nueva, ¿qué sentido tiene? Tiene

11:59mucho sentido. Si yo agrego, por

12:01ejemplo,

12:02dos nuevos empleados, ¿qué pasa?

12:05Fíjense, si yo agrego ahora a Martín

12:07López, que es de sistemas, yo únicamente

12:11voy a poner el dos. ¿Qué va a hacer

12:14esto? me va a llevar a la tabla

12:16departamentos y tengo sistemas, no está

12:19duplicada el nombre acá la información,

12:21dos veces sistemas, tres veces sistemas,

12:23sino que directamente lo que se repite

12:25es la clave foránea que me va a llevar a

12:27la clave primaria en la otra tabla.

12:30Entonces, esto queda mucho más ordenado

12:32y sin redundancia. De igual manera, si

12:34le agrego a Sofía Ramírez, que es de

12:36recursos humanos, no voy a tener acá de

12:38vuelta RRHH, sino que voy a tener la

12:41clave en cuestión y la voy a asociar al

12:44departamento que corresponde. Entonces,

12:46además ahora de tener la tabla de

12:48idiomas, también tengo la tabla de

12:51departamentos y ya la primera tabla

12:54original que tenía ya la separé en tres

12:56partes y como pueden ver fui

12:59relacionando cada una de ellas. ¿Qué

13:02mejores hicimos? que si agregamos un

13:04nuevo empleado no se va a repetir el

13:06nombre departamento, ya queda de forma

13:08única. Hasta ahí son conceptos bastante

¿Hasta donde normalizar?

13:10complejos, gente. De última, vayan

13:12mirando paso a paso, pueden ir sacando

13:15captura de cada forma normal y comparen

13:17las imágenes de cómo va cambiando la

13:19tabla y demás para poder ir entendiendo,

13:21porque estos son conceptos teórico

13:23prácticos que por ahí si es la primera

13:25vez que los están viendo les puede volar

13:27un poco la cabeza, pero créanme que con

13:29la práctica después ya van a crear base

13:32de datos ya normalizadas de una, que es

13:33como les suelo explicar en mis cursos.

13:35Bien, ahora hay un detalle. Yo les

13:38expliqué la forma normal cero, que es

13:40cuando no está normalizada, la segunda,

13:42la la primera, la segunda y la tercera

13:44forma normal. Y también existen más

13:46formas normales. Existe cuarta, quinta,

13:50sexta, hasta formas normales especiales.

13:52Pero acá viene la pregunta, ¿hasta dónde

13:55conviene normalizar? Y acá les voy a

13:57explicar en detalle hasta dónde. Por

13:59convención y por estándar, la mayoría de

14:02las bases de datos comunes y corrientes

14:04que no van a tener un uso extremo o para

14:07un, vamos a decir, dominio en

14:09particular,

14:10tienen como recomendación llegar hasta

14:12la tercera forma normal. ¿Okay? Es el

14:15estándar que se utiliza en todos lados a

14:17nivel mundial y que ya se ha establecido

14:20para lo que son base de datos

14:21relacionales. ¿Por qué? porque elimina

14:23las redundancias innecesarias, es decir,

14:25los datos repetidos. Sí, previene las

14:27anomalías, los que les conté al

14:28principio, de inserción, eliminación y

14:30actualización y mantiene el equilibrio

14:33entre que los datos sean íntegros, que

14:35no sean repetidos o que no tengan

14:36sentido, lo que les expliqué hace un

14:37ratito, y el rendimiento de la base de

14:40datos. ¿Okay? Hay un equilibrio entre

14:42todo esto. Pero, ¿qué pasa con la cuarta

14:46forma normal, la quinta, la sexta? o si

14:49hay formas normales especiales. ¿Cómo sé

14:51si tengo que aplicar alguna de esas o

14:53no? Bien, podemos tener en cuenta esto.

14:56Sí se aplican esas formas normales

14:58especiales. Sí, hay relaciones

15:00multivaluadas independientes. Si

15:02necesitamos un diseño que sea tal cual

15:04como dice acá, muy riguroso, muy limpio,

15:07muy muy pulclo, como en aplicaciones que

15:09son muy críticas. por ejemplo,

15:11aplicaciones bancarias, aplicaciones de

15:13impuestos, aplicaciones de salud, suelen

15:16ser algunas en las que por ahí tiene que

15:17haber un diseño muy muy específico para

15:20que no haya ningún tipo de confusión de

15:22datos y también cuando se busca un

15:24modelo académicamente correcto, me

15:26refiero a cuando hay trabajos de

15:27investigación, base datos

15:28investigativas, de datos que después se

15:30van a utilizar para ciertas tomas de

15:32decisiones y en ciertas cuestiones que

15:33por ahí es justamente que se pide algo

15:37muy preciso, ¿sí? como por ejemplo, si

15:39vamos a hacer automatización, luego ahí

15:41se necesita de que sea algo muy preciso

15:44y específico, pero no es necesario

15:47aplicar en estos casos que les muestro

15:48acá. Sí, si necesitamos rendimiento, es

15:51decir, rapidez de respuesta y no importa

15:53tanto los datos íntegros, por ejemplo,

15:55si tenemos que hacer reportes donde

15:56necesamos traer rápido los datos y

15:58demás, ahí no es necesario hacer formas

16:01normales, cuarta, quinta, sexta, no es

16:03necesario tampoco. Si hay, por ejemplo,

16:06ciertos joints que son muy heavis, muy

16:09pesados, pero que hay redundancia de

16:12datos, pero pueden ser, como dice acá en

16:13la teoría, controladas, no hay ningún

16:15problema porque podemos llevar hasta la

16:17tercera forma normal y si hay algún tipo

16:19de redundancia decimos, "Okay, no hay

16:21problema, podemos utilizar igual esa

16:24redundancia no me va a afectar en el

16:25resultado de las consultas y me aumenta

16:27el rendimiento." ¿Sí? Y acá es muy

16:30importante esto. Si estamos en un

16:31entorno donde estamos leyendo datos

16:33constantemente y estamos disponibilidad

16:35a todo el tiempo y rapidez, muchas veces

16:37normalizar puede quitarnos este

16:39rendimiento que necesitamos, como por

16:41ejemplo lo que les digo, donde hay un

16:43data warehouse, donde pasa esto, a veces

16:46es mejor incluso que la base de datos

16:47esté de normalizada o utilizar base de

16:50datos no relacionales que utilizar base

16:52de datos relacionales y normalizadas.

16:55Por eso les digo, va a depender siempre

16:57del contexto y del tipo de sistema.

Resumen

16:59Ahora, ¿cuál es el resumen de todo esto?

17:02Vamos a la primera parte, que es la más

17:04importante. La forma normal es de la a

17:07la tres. La cero, por supuesto, cuando

17:08está no normalizada. De la uno a la

17:11tres, tenemos este resumen. La primera

17:13forma normal, eliminamos las listas y

17:15los multivalores. Tienen que haber

17:17valores atómicos, ¿okay? Lo que hicimos

17:19de separar los idiomas en distintas e

17:23distintos atributos. Sí, que no estén

17:25todos en una misma línea. ¿Qué hicimos

17:27de la segunda forma normal? Se eliminan

17:29las dependencias parciales o las claves

17:31compuestas. Los que les conté que no

17:33puede haber esto de que hayan

17:36repeticiones de varios elementos que nos

17:39pasa tanto en departamentos como en

17:42idiomas asociadas a la misma clave

17:44primaria. Esto no puede pasar. Y en la

17:47tercera forma normal lo que se hace son

17:48se eliminan las dependencias

17:49transitivas. los que les conté que en el

17:52caso departamento, por ejemplo, ya se

17:54asociaba que la ID1 del empleado estaba

17:57asociado a un departamento, por lo cual

17:58automáticamente al nombre del

18:00departamento. Eso estaba mal porque si

18:02después agre un nuevo empleado, ¿qué

18:03pasaba? Tenía que estar automáticamente

18:05en ese departamento por la ID o crear un

18:08departamento nuevo, lo cual no tenía

18:10sentido si pertenecía al mismo. ¿Cuándo

18:12se usa cada una de la primera a la

18:14tercera forma normal? Siempre. Sí,

18:17porque es la base del diseño o

18:19prácticamente siempre.

18:20Ahora, cuarta y quinta forma normal solo

18:23en casos especiales, ¿okay? Sexta forma

18:27normal para lo que es investigación,

18:29cuestiones teóricas, académicas o big

18:32data, donde estamos manejando gran

18:33cantidad de datos. Y nos queda uno para

18:35mencionar, que es la voice code normal

18:39form o también forma normal de voice

18:41cod, que básicamente es como una tercera

18:42forma normal pero un poquito más

18:44estricta, donde si hay claves candidatas

18:47mal distribuidas como es acá, lo podemos

18:50mejorar aún más. Es como una, digamos,

18:52tercera forma normal plus, pero no se

18:54utiliza demasiado. Es tal como la cuarta

18:57y quinta forma normal para casos

18:59especiales o muy puntuales, como les

19:00mencioné anterior. Ahora me van a decir,

19:02"Luisin, esto me acaba de volar la

19:03cabeza. Si bien les expliqué con un

19:05ejemplo práctico, a veces es difícil de

19:07darnos cuenta cómo pasamos a las

19:09distintas formas normales. Acá les voy a

19:11decir una cosa y les voy a dejar una

19:12tarea también para ustedes. Aplicamos

19:14las formas normales sobre la tabla

19:16empleados. Sí, quedó bien prolija.

19:19Creamos la tabla departamentos y la

19:21tabla idiomas. Pero fíjense que la tabla

19:23idiomas, si van un poquito más atrás en

19:25el video, vuelvan, recorran, no quedó

19:28muy bien luego que aplicamos las formas

19:29normales, porque ahora tocaría aplicar

19:32sobre esa tabla idiomas. Podríamos

19:34aplicar las formas normales también y se

19:36van a dar cuenta que probablemente haya

19:38que hacer una separación más y que haya

19:40una tabla intermedia de más cuestiones,

19:42depende del tipo de relación que haya

19:43ahí. Así que les hago notar eso, a ver

19:47si quieren hacerlo como tareíta que

19:49apliquen las formas normales sobre

Ejercicio Práctico Normalización

19:51idiomas. Pero ahora, pero ahora para ser

19:53más práctico todavía, pues esto es una

19:54masterclass. Ya después de haber visto

19:55todos los las ejemplos teórico

19:58prácticos, porque vimos la teoría, pero

19:59también la práctica, vamos a hacer un

20:01ejercicio práctico. Les voy a mostrar

20:03una tabla en cuestión que va a ser la

20:05que vamos a tener que normalizar y les

20:07voy a ir mostrando qué tenemos que tener

20:08en cuenta para normalizarla. Así que

20:10vamos a eso. Bien, gente, como pueden

20:12ver estamos en Excel. Luisina, vamos a

20:14hacer un ejercicio de base de datos en

20:16Excel. Sí, porque tiene el diseño

20:18justamente que necesitamos de tablas

20:19para ir mostrándoles de forma gráfica

20:22cómo podemos ir transformando las

20:23tablas, ¿okay? No significa que Exceles

20:26va a dar. No confundamos, lo estoy

20:28ocupando simplemente como herramienta

20:29gráfica para que para ustedes sea mucho

20:31más sencillo. ¿Okay? Como pueden ver,

20:33tenemos una tabla que no está

20:35normalizada, que básicamente tiene

20:37distintos pilotos de Fórmula 1. Ni se

20:40nota que Luisina empezó a mirar Fórmula

20:411 por con la pinta hace un tiempo, que

20:43tiene distintos pilotos de la Fórmula 1

20:45que están aprendiendo distintos

20:46lenguajes de programación, que tienen

20:48distintos instructores dependiendo del

20:51curso en el que están y que tienen las

20:53clases en distintas aulas. Las aulas son

20:56cada uno de los espacios de clase, por

20:59así decir. Bien, como vemos está en la

21:02forma normal cero y vamos a hacer lo

21:05necesario para pasar a la primera forma

21:08normal, porque nos damos cuenta que esta

21:10tabla no está normalizada. ¿Cómo nos

21:11damos cuenta? Porque tenemos atributos

21:14acá que están repetidos. Java, fíjense,

21:18aparece las cuatro veces. Todos están

21:20aprendiendo Java. son inteligentes,

21:22están aprendiendo Java en la academia de

21:23todo code. Pónganle. Sí. Y el problema

21:27que tenemos acá también que García, el

21:29instructor que están teniendo, se repite

21:31cuatro veces. Sabemos que hay

21:32redundancia, lo mismo el aula A1. Y de

21:35igual manera también esto está como

21:38listas, es decir, hay más de un valor

21:40para un atributo. Y lo que busca la

21:42primera forma normal es que los

21:44atributos multivaluados sean atómicos,

21:47es decir, que tengan un solo atributo

21:51por cada asociación. Entonces, partiendo

21:53de eso, ¿cómo hacemos para pasar a la

21:56primera forma normal? Voy a copiar lo

21:59que va a ser nuestra tabla y tenemos,

22:00vamos a tener el mismo piloto, el uno

22:03que es Maxpen. Vamos a tenerlo, ¿cuántas

22:06veces? Tiene dos lenguajes que son Java

22:09y Python. Así que tenemos dos veces. Uno

22:12para Java, vamos a anotar bien, Java, y

22:16otro para Python. No se preocupen que

22:17ahora pongo para que quede el mismo

22:20formato y demás. Bien, ¿qué otro valor

22:23tiene repetido que tiene a dos profes, a

22:26García y a Fernán? A García lo tiene

22:30asociado a Java porque es el primer

22:31valor y a Fernán con

22:34Python. Perfecto. Lo mismo con las

22:37aulas. Tiene aula A1 y tiene aula B2.

22:42Fíjense como acá ya logramos la

22:44atomicidad. Sí, voy a copiar el formato

22:47para que acá sea todo igual. Ahí está.

22:49Perfecto, ya tenemos esta primera parte.

22:51Ahora vamos a mirar Leclerc. A ver,

22:54Leclerc tiene algo, ¿no? No tiene nada

22:56para separar, tiene todo atómico. Lo

22:58podemos copiar tal cual. Ahora miremos

23:00Hamilton. A ver, Hamilton tiene, vamos a

23:04ponerlo acá. Hamilton.

23:06Hamilton tiene e a JavaScript y a Java y

23:11tiene dos profes y dos aulas. Así que le

23:13vamos a tener a Hamilton dos veces. Sí.

23:16Uno para JavaScript. Vamos a poner acá

23:20Java

23:22script. Otro para Java. Sí. Y acá le va

23:26a tener a López. Y acá le va a tener

23:29también a García, que lo voy a copiar y

23:31pegar. Bien. Luego acá va a tener el

23:33aula C3 y acá va a tener el aula A1.

23:37Fíjense. C3 A1. López García. López

23:43García, JavaScript Java JavaScript Java.

23:46lo que busca es que si tenemos más de un

23:48atributo, es decir, atributos

23:50multivaluados en un mismo renglón,

23:52separarlo básicamente en nuevas tuplas,

23:55en nuevos registros, en nuevos renglones

23:57de nuestra tabla. Bien, si ahora voy a

24:00poner para que todo se vea igualito, ahí

24:02está. Si vimos ahora, se cumple la

24:05primera forma normal. ¿Por qué? Porque

24:08todos los valores son atómicos. Sí, ya

24:11no tenemos más de un valor en una línea,

24:14lo cual es espectacular. Pero, pero si

24:18vemos nuestra tabla, sigo viendo, lo

24:20pongo más cerca para que ustedes lo vean

24:22mejor. Siguen habiendo ciertas

24:24cuestiones a tener en cuenta. Sí, vamos

24:27a ver cuáles son. La primera cuestión a

24:28tener en cuenta es que me olvidé del

24:30pobre Franco con la pinto, así que vamos

24:31a agregarlo. Ahí está acá abajo. Franco,

24:34no me olvidé de vos, Franco, no me

24:36olvidé de vos. Bien, pero Franco en este

24:37caso no tenía atributos repetidos, así

24:40que no había problema y estaban

24:41anatómicos. Pero bien, si nos damos

24:43cuenta, vamos ahora a ver si es

24:45necesario una segunda forma normal o no.

24:47Voy a poner acá segunda forma normal,

24:50pero si empezamos a ser minuciosos,

24:52vamos a darnos cuenta de que tenemos una

24:54clave primaria compuesta. ¿Por qué?

24:56Fíjense la cantidad de datos repetidos

24:58que tenemos. Java está una, dos, tres,

25:00cuatro veces. García está cuatro veces.

25:02El aula A1 está cuatro veces. Y sin

25:05darnos cuenta también los nombres de los

25:07pilotos están repetidos y vemos que

25:09indirectamente la ID del piloto está

25:12asociada al lenguaje, ¿sí?, que cada uno

25:15maneja. Al mismo tiempo, el lenguaje

25:17está asociado al instructor y al aula.

25:20Esto hace de que tengamos una clave

25:21compuesta, que cada piloto tenga dos

25:24claves, que sea su ID y el lenguaje como

25:27tal. Acuérdense que la segunda forma

25:29normal lo que busca es justamente esto,

25:31romper la redundancia de datos y romper,

25:35sí, las dependencias parciales o lo que

25:37pueden ser claves compuestas. Entonces,

25:40básicamente lo que vamos a buscar acá es

25:42independizar a los pilotos de los

25:44lenguajes o de los datos repetidos que

25:46tengan. Entonces, vamos a seguir

25:48manteniendo nuestra tabla pilotos. Voy a

25:50copiar y pegar, ¿sí?, los dos datos que

25:52vamos a mantener, que no se repiten, y

25:55vamos a dejarla limpia la tabla. Sí,

25:56vamos a poner a Leclerk, vamos a ponerle

26:00a Hamilton tercero, a Colapinto cuarto y

26:03vamos a borrar los dos lugares ahí está

26:06que sobran. Perfecto. Así nos quedó

26:09nuestra tabla piloto, bien limpita. Sí,

26:12ahora vamos a empezar a manejar. Bien,

26:15¿cómo podemos separar esto? Bien,

26:17tenemos los lenguajes, ¿sí?, de cada

26:20piloto. Si vemos en detalle, tenemos

26:22Java, Python y demás. y tenemos el prof

26:24asociado y tenemos el aula donde se da

26:27cada clase, lo cual, a ver, podríamos

26:30hacer tranquilamente una nueva tabla

26:32lenguajes, ¿les parece? Podría ser.

26:35Entonces, vamos a buscar nuestra tabla

26:38lenguajes, que vendría a ser esta

26:39segunda parte en la que dividimos. Sí,

26:42voy a ponerla acá para dejar espacio. ¿Y

26:44qué nos faltaría? nos faltaría asociar,

26:47según lo que dice la segunda forma

26:48normal, el ID del piloto que está en

26:53cada uno. En este caso vamos a tener ID

26:55piloto uno y uno. Acá vamos a tener eh

26:59dos. Acá vamos a tener tres y tres y acá

27:01vamos a tener cuatro. Vamos a copiar el

27:03formato para que nos quede todo igual.

27:06¿Qué significa esto? Que básicamente

27:07estamos asociando de que verpen sí sabe

27:12Java y Python. Nosotros si miramos acá

27:14quién es el piloto que sabe Java y

27:15Python vamos a poder hacer referencia a

27:17Versappen. Si queremos ver quién sabe

27:19solo Java, le clerk, acá también tenemos

27:21JavaScript, le tenemos a Hamilton, Java

27:24también sabe Hamilton y Java también

27:25sabe colapinto. Esto es lo que establece

27:28la segunda forma normal. Básicamente,

27:30¿qué hicimos? Creamos una tabla, ¿sí?,

27:34empleados, la dividimos y sacamos esa

27:37dependencia, la doble clave primaria.

27:39Ahora cada uno de los pilotos tiene una

27:43sola clave primaria y la tabla de los

27:48lenguajes de cada uno de los pilotos

27:50está separada y ya no tenemos acá la

27:53redundancia de datos correspondientes.

27:56¿Okay? Sin embargo, sin embargo, creo

27:59yo, no sé qué piensan ustedes, que acá

28:01podemos hacer también una tercera forma

28:04normal. ¿Creen que sí? ¿Por qué? Porque

28:07hay una dependencia transitiva acá, ¿se

28:10acuerdan lo que yo le expliqué? La

28:12dependencia transitiva dice que si yo

28:13digo que A

28:16es B, ¿sí? Estoy poniendo acá. Vamos a

28:18poner un poquito más grande la letra, si

28:19ustedes lo ven mejor, ¿sí? Si yo digo

28:21que A es B, entonces automáticamente si

28:23digo que B es C, ¿sí? Que esto es lo que

28:27se establece en la matemática, entonces

28:29automáticamente si A es ig a B y B es ig

28:32a C, yo puedo decir que A

28:35es C. Eso es lo que decía la teoría. ¿Se

28:37acuerdan que la teoría decía eso? La

28:39matemática. Eso es una dependencia

28:41transitiva. ¿Cuál es la dependencia

28:43transitiva que yo estoy diciendo acá?

28:44Básicamente estoy diciendo que el

28:47instructor y el aula dependen del

28:50lenguaje, pero puede ser que un día

28:53García se enferme o que el aula uno esté

28:56ocupada y que o cambie instructor o

28:59cambie el aula. De esta manera yo estoy

29:00diciendo automáticamente que por ser el

29:03lenguaje ja automáticamente el

29:05instructor va a ser García y

29:06automáticamente por eso se va a dar

29:07siempre en el aula A1, que es lo que

29:10establece esta dependencia transitiva.

29:13Sin embargo, eso no es cierto, eso puede

29:15cambiar. Entonces, nosotros podemos

29:17hacer acá nuevamente una separación para

29:20nuestra tercera forma normal. ¿Y cómo

29:23establecemos nuestra tercera forma

29:24normal? Vamos a ponerla acá arriba, que

29:27me queda espacio todavía en la pantalla.

29:30Vamos a poner acá tercera forma normal.

29:32Y justamente vamos a hacer referencia a

29:34eso. Nuestra tabla de pilotos sigue

29:37exactamente igual, no va a cambiar

29:39porque ya está bastante prolija, ya está

29:42bastante normalizada, no tiene nada por

29:44cambiar. La que tiene el problema de las

29:46dependencias transitivas es justamente

29:49esta, la de lenguajes y pilotos.

29:51Entonces, lo que nosotros podemos hacer

29:53directamente es asociar, sí, cada uno de

29:57los pilotos de forma independiente con

30:00el lenguaje. Entonces, ¿qué podemos

30:02hacer? Podemos separar en una nueva

30:04tabla de lenguajes donde podramos decir

30:07que por cada lenguaje quién es el profe

30:10y en qué aula se lleva a cabo. Entonces,

30:12si luego queremos cambiar esos datos en

30:15la tabla, tranquilamente se podrían

30:16hacer o agregar elementos nuevos.

30:18Entonces, podemos crear una tabla que

30:21sea lenguajes. Sí. Y puedo poner

30:24directamente acá

30:27cada uno de los profes para evitar la

30:30redundancia y el lenguaje y el aula que

30:33enseñan.

30:36Ahí está cumpliendo en este caso con la

30:39tercera forma normal. Pero acá hay un

30:40detalle más. Acá hay un detalle más. Acá

30:43tengo solucionado que los lenguajes

30:45están por un lado y los pilotos por

30:47otro, pero me falta la asociación entre

30:51cada lenguaje y cada uno de los pilotos.

30:55¿Y cómo voy a hacer eso? Y lo puedo

30:57hacer dividiendo esto en una nueva tabla

31:02intermedia donde puedo decir, por

31:04ejemplo, el piloto uno sí está asociado

31:08al lenguaje Java, el piloto uno está

31:11asociado al lenguaje Python, el el

31:13piloto dos al lenguaje Java, el piloto 3

31:16a JavaScript. Esto siempre y cuando

31:20nuestra clave primaria en esta nueva

31:23tabla lenguajes sea el nombre del

31:26lenguaje. ¿Okay? Sin embargo, nosotros

31:30podríamos acá agregar una nueva columna

31:33que sea ID lenguaje y que cada lenguaje

31:36tenga su propio ID y que esta tabla

31:38intermedia tenga la ID y no el nombre

31:41como tal de el lenguaje para que acá no

31:44haya nuevamente datos repetidos. Esa

31:47mejora también la podríamos hacer al

31:49mismo tiempo. Al mismo tiempo, si

31:52queremos ponernos más minuciosos y

31:54normalizar aún más y dejar esto aún

31:57mejor, ¿sí? Porque acá llegamos hasta la

31:59tercera forma normal. Fíjense que si

32:01ustedes quieren ser un poquito más

32:03minuciosos, ustedes pueden al mismo

32:06tiempo a esta tabla lenguajes que

32:08agregamos, además de agregar una ID,

32:10pueden separar instructor en una nueva

32:13tabla, que tengamos una tabla exclusiva

32:15de instructores, donde podamos agregar

32:18todos los instructores que queramos y si

32:20hay instructores nuevos que los podamos

32:22agregar. Y lo mismo pasa con las aulas.

32:25Si las aulas van a ser algo que van a ir

32:26cambiando y vamos agregando aulas nuevas

32:28constantemente, puedo crear también una

32:31tabla más, una tabla aparte que sea

32:33aula, donde cada vez que se cree una

32:35aula nueva, yo pueda agregar ese nueva

32:38aula. Esto, gente, obviamente que va a

32:40depender del nivel que necesitemos de

32:43normalización. Con esto estaremos

32:45cumpliendo con el ejercicio. Teníamos

32:47todo esto desordenado, sin atributos

32:49atómicos y repetidos. Primero rescatamos

32:52todos los atributos atómicos. Primera

32:54forma normal. Segunda forma normal,

32:56logramos de que cada clave primaria, un

32:59piloto está asociado a un nombre y

33:01separamos los otros datos que estaban

33:03asociados en una nueva tabla. Sí, pero

33:06nos dimos cuenta que había dependencias

33:08transitivas y que el lenguaje dependía

33:10del instructor y del aule que hacíamos

33:13asociaciones que por ahí estaban también

33:15incluyendo redundancia de datos.

33:17Entonces, simplificamos en una nueva

33:19tabla intermedia donde está asociado a

33:22qué piloto pertenece a qué lenguaje o

33:25qué lenguaje está estudiando y en una

33:27nueva tabla aparte cada lenguaje con

33:30quien es su profe y su aula. Vuelvo a

33:32decir, si queremos hacer esto mejor

33:34todavía, podemos agregar una ID

33:37exclusiva a cada lenguaje, podemos

33:39separar instructor en otra tabla aparte

33:41y habla en otra parte más. Pero eso va a

33:43ser tarea para ustedes y quiero que me

33:45cuenten en los comentarios cómo lo

33:47harían y si creen que es óptimo o no

33:49hacerlo. Bien, gente, espero que se haya

Conclusiones

33:52entendido de alguna u otra forma con

33:53esta masterclass, que puedan haber

33:56captado un poco cuál es la idea de la

33:57normalización. A ver, si bien son reglas

34:00que se van cumpliendo, ¿sí? Que a medida

34:02que vemos las tablas decimos, "Uh, esto

34:04lo puedo mejorar, esto puedo pasar a

34:05primera forma, segunda forma, tercera

34:07forma." Sí, esto luego tiene que ser

34:09algo cotidiano para ustedes a la hora de

34:10normalizar base de datos, ya que no

34:12piensan, en uy, tengo que normalizar,

34:14sino que la hora de diseñar una base de

34:15datos, ustedes ya piensen en la forma

34:18más óptima y que una vez que diseñen, si

34:21se dan cuenta que no es la más óptima,

34:22ahí aplica normalización. Bien, pero es

34:25generalmente ya les digo, con la

34:26práctica y los años ya les va a salir el

34:28diseño de la base de datos ya

34:29automáticamente normalizadas, ni van a

34:31tener que pensar en todos estos procesos

34:33porque ya les va a salir de forma

34:34automática. Pero ahora que están

34:36aprendiendo, les recomiendo que si no lo

34:38entendieron bien, vayan de vuelta al

34:40primer ejemplo los que les expliqué con

34:42la teoría. Vengan de nuevo al ejercicio,

34:44pongan pausa, intenten hacerlo porque es

34:47algo que con la práctica van a ir

34:49agarrando. De hecho, si se animan, hagan

34:51otro ejercicio similar, agreguen o armen

34:53una tabla que tenga valores repetidos.

34:55Fíjense cómo se puede ir separando y

34:56demás cuestiones y van a ver que llega

34:59solo a la práctica. Bueno, gente, espero

35:00que les haya gustado esta masterclass,

35:02que se haya entendido. Si tienen dudas,

35:03déjenmela en los comentarios, que yo

35:05apenas puedo las voy a leer. No se

35:07olviden que tienen también la comunidad

35:08de Discord en la descripción donde

35:10tenemos un foro de preguntas y demás.

35:12Ustedes pueden dejar sus dudas y siempre

35:13los chicos de la comunidad cuando pueden

35:15responder o yo cuando tengo un tiempito

35:17también me pongo a responder. No se

35:18olviden dejar su me gusta, suscribirse,

35:20darle click a la campanita porque gente,

35:21créanme, es realmente difícil crecer con

35:24un canal educativo. Todo Cob es un canal

35:26educativo completamente, es gratuito y

35:29lo que buscamos es crecer para llegar a

35:31más gente, que más personas puedan

35:33educarse en estos temas y con la ayuda

35:35de ustedes compartiendo, dejan su me

35:36gusta, comentario, hace que el video se

35:38posicione y eso está buenísimo. Así que

35:40gente, nos vemos seguramente en un

35:42próximo video y estén atentos que se

35:44viene el mega video de varias horas con

35:47todo el remasterizado este curso de base

35:49de datos. ¿En dónde? En Todo C.

35:52Ciao. Ciao.

35:56[Música]

35:58[Aplausos]

36:06[Aplausos]

This transcript was generated from the captions YouTube publishes for this video. Get the transcript of any YouTube video atfreeyoutubetranscribe.com: free, unlimited, no sign-up.