{"id":178,"date":"2015-11-04T17:42:25","date_gmt":"2015-11-04T23:42:25","guid":{"rendered":"http:\/\/naps.com.mx\/blog\/?p=178"},"modified":"2017-11-16T12:15:52","modified_gmt":"2017-11-16T18:15:52","slug":"tercera-forma-normal-en-el-modelo-relacional-3fn","status":"publish","type":"post","link":"https:\/\/naps.com.mx\/blog\/tercera-forma-normal-en-el-modelo-relacional-3fn\/","title":{"rendered":"Tercera Forma Normal en el Modelo Relacional (3FN)"},"content":{"rendered":"<p>Un buen dise\u00f1o de una Base de Datos nos garantiza su correcto funcionamiento en el futuro. De all\u00ed la importancia de comprender muy bien los conceptos de <strong>Normalizaci\u00f3n de Bases de Datos.<\/strong> Cuando el dise\u00f1o de una base de datos viola las reglas de normalizaci\u00f3n, posteriormente pueden presentarse anomal\u00edas en la actualizaci\u00f3n de los datos (Oppel, 2010). Ahora nos corresponde estudiar la <strong>Tercera Forma Normal (3FN)<\/strong> para evitar esas anomal\u00edas.<\/p>\n<p><!--more--><\/p>\n<p>Comenzamos analizando qu\u00e9 es una relaci\u00f3n que cumple la 3FN:<\/p>\n<blockquote><p>\u201cUna relaci\u00f3n se encuentra en Tercera Forma Normal si, y solo si, se encuentra en 2FN y si los atributos no clave dependen de forma no transitiva de la clave primaria\u201d (Reynosa E., Maldonado C., Mu\u00f1oz R., Damiano L., Abrutsky M, 2012).<\/p><\/blockquote>\n<p>De nuevo encontramos que <a href=\"http:\/\/naps.com.mx\/blog\/segunda-forma-normal-en-el-modelo-relacional-2fn\/\">el primer requisito es cumplir con la 2FN, que analizamos en el tema anterior<\/a>.<\/p>\n<p>El siguiente requisito es que ning\u00fan subconjunto de atributos tendr\u00e1 una <strong>dependencia transitiva.<\/strong> Para analizar si una relaci\u00f3n no se encuentra en 3FN buscamos un subconjunto de atributos que no pertenezca a la clave primaria y que al cambiar el valor de un atributo, necesariamente cambia el valor de los dem\u00e1s atributos del subconjunto. Por ejemplo, observemos una de las relaciones que hemos estado utilizando de ejemplo, y que llamaremos Factura.<\/p>\n<table>\n<tbody>\n<tr>\n<td colspan=\"7\" width=\"370\">Factura<\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\" width=\"110\">PK<\/td>\n<td width=\"50\"><\/td>\n<td width=\"52\"><\/td>\n<td width=\"49\"><\/td>\n<td width=\"55\"><\/td>\n<td width=\"55\"><\/td>\n<\/tr>\n<tr>\n<td width=\"55\">Sucursal<\/td>\n<td width=\"55\">N\u00famero de factura<\/td>\n<td width=\"50\">Fecha de la factura<\/td>\n<td width=\"52\">Forma de pago<\/td>\n<td width=\"49\">C\u00f3digo de cliente<\/td>\n<td width=\"55\">Nombre de cliente<\/td>\n<td width=\"55\">Total de factura<\/td>\n<\/tr>\n<tr>\n<td width=\"55\">01<\/td>\n<td width=\"55\">100<\/td>\n<td width=\"50\">1\/10\/15<\/td>\n<td width=\"52\">Cr\u00e9dito<\/td>\n<td width=\"49\">01<\/td>\n<td width=\"55\">PEREZ<\/td>\n<td width=\"55\">440<\/td>\n<\/tr>\n<tr>\n<td width=\"55\">01<\/td>\n<td width=\"55\">101<\/td>\n<td width=\"50\">2\/10\/15<\/td>\n<td width=\"52\">Contado<\/td>\n<td width=\"49\">33<\/td>\n<td width=\"55\">GARC\u00cdA<\/td>\n<td width=\"55\">100<\/td>\n<\/tr>\n<tr>\n<td width=\"55\">02<\/td>\n<td width=\"55\">100<\/td>\n<td width=\"50\">3\/10\/15<\/td>\n<td width=\"52\">Cr\u00e9dito<\/td>\n<td width=\"49\">45<\/td>\n<td width=\"55\">GOMEZ<\/td>\n<td width=\"55\">550<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>Observemos ahora lo que pasa con los atributos <em>C\u00f3digo de cliente<\/em> y <em>Nombre de Cliente<\/em>. \u00bfQu\u00e9 pasar\u00eda si cambiamos el c\u00f3digo de cliente? Que necesariamente cambiar\u00eda el nombre de cliente. Esto quiere decir que existe una dependencia funcional entre estos dos campos, y eso indica que la relaci\u00f3n NO se encuentra en 3FN (Tercera forma normal).<\/p>\n<h3><strong>Transformaci\u00f3n a Tercera Forma Normal (3FN)<\/strong><\/h3>\n<p>Utilizamos la misma t\u00e9cnica que implica mover los atributos en conflicto\u00a0 a una nueva relaci\u00f3n. En nuestro caso, llamaremos a la relaci\u00f3n nueva con el nombre de Clientes, y estar\u00eda representada de la siguiente manera:<\/p>\n<table>\n<tbody>\n<tr>\n<td colspan=\"2\" width=\"104\">Clientes<\/td>\n<\/tr>\n<tr>\n<td width=\"49\">Pk<\/td>\n<td width=\"55\"><\/td>\n<\/tr>\n<tr>\n<td width=\"49\">C\u00f3digo de cliente<\/td>\n<td width=\"55\">Nombre de cliente<\/td>\n<\/tr>\n<tr>\n<td width=\"49\">01<\/td>\n<td width=\"55\">PEREZ<\/td>\n<\/tr>\n<tr>\n<td width=\"49\">33<\/td>\n<td width=\"55\">GARC\u00cdA<\/td>\n<\/tr>\n<tr>\n<td width=\"49\">45<\/td>\n<td width=\"55\">GOMEZ<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>Entonces, la relaci\u00f3n Factura queda de la siguiente manera:<\/p>\n<table>\n<tbody>\n<tr>\n<td colspan=\"6\" width=\"316\">Factura<\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\" width=\"110\">PK<\/td>\n<td width=\"50\"><\/td>\n<td width=\"52\"><\/td>\n<td width=\"49\"><\/td>\n<td width=\"55\"><\/td>\n<\/tr>\n<tr>\n<td width=\"55\">Sucursal<\/td>\n<td width=\"55\">N\u00famero de factura<\/td>\n<td width=\"50\">Fecha de la factura<\/td>\n<td width=\"52\">Forma de pago<\/td>\n<td width=\"49\">C\u00f3digo de cliente<\/td>\n<td width=\"55\">Total de factura<\/td>\n<\/tr>\n<tr>\n<td width=\"55\">01<\/td>\n<td width=\"55\">100<\/td>\n<td width=\"50\">1\/10\/15<\/td>\n<td width=\"52\">Cr\u00e9dito<\/td>\n<td width=\"49\">01<\/td>\n<td width=\"55\">440<\/td>\n<\/tr>\n<tr>\n<td width=\"55\">01<\/td>\n<td width=\"55\">101<\/td>\n<td width=\"50\">2\/10\/15<\/td>\n<td width=\"52\">Contado<\/td>\n<td width=\"49\">33<\/td>\n<td width=\"55\">100<\/td>\n<\/tr>\n<tr>\n<td width=\"55\">02<\/td>\n<td width=\"55\">100<\/td>\n<td width=\"50\">3\/10\/15<\/td>\n<td width=\"52\">Cr\u00e9dito<\/td>\n<td width=\"49\">45<\/td>\n<td width=\"55\">550<\/td>\n<\/tr>\n<tr>\n<td width=\"55\"><\/td>\n<td width=\"55\"><\/td>\n<td width=\"50\"><\/td>\n<td width=\"52\"><\/td>\n<td width=\"49\"><strong>Fk<\/strong><\/td>\n<td width=\"55\"><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>Observamos que el atributo <em>C\u00f3digo de cliente<\/em> ahora es una clave for\u00e1nea que nos permite relacionar el dato con las tuplas correspondientes de la relaci\u00f3n Clientes. Adem\u00e1s, desapareci\u00f3 el campo <em>Nombre de cliente<\/em>, con lo que desaparece a su vez la dependencia transitiva que nos imped\u00eda tener la relaci\u00f3n en 3FN.<\/p>\n<p>En conclusi\u00f3n: en estos \u00faltimos art\u00edculos hemos analizado el dise\u00f1o de una base de datos mediante normalizaci\u00f3n. Recuerda que en una relaci\u00f3n en 3FN, <strong>cada atributo que no es una clave debe depender de la clave y solamente de la clave<\/strong>.<\/p>\n<p>&nbsp;<\/p>\n<p><strong>Referencias<\/strong><\/p>\n<ol>\n<li>Oppel A. (2010). <strong>Fundamentos de Bases de Datos<\/strong>. Ed. McGraw-Hill. M\u00e9xico.<\/li>\n<li>Reynosa E., Maldonado C., Mu\u00f1oz R., Damiano L., Abrutsky M. (2012). <strong>Bases de datos<\/strong>. Ed. Alfaomega.<\/li>\n<li>Soler, J., Prados, F., Boada, I., &amp; Poch, J. (2006). <strong><a href=\"http:\/\/bioinfo.uib.es\/~joemiro\/aenui\/procJenui\/Jen2006\/prDef0109_e369853df7.pdf\" target=\"_blank\" rel=\"noopener\">Utilizaci\u00f3n de una plataforma de e-learning en la docencia de Bases de Datos<\/a><\/strong>. <i>Proc. of JENUI<\/i>, 581-588.<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Un buen dise\u00f1o de una Base de Datos nos garantiza su correcto funcionamiento en el futuro. De all\u00ed la importancia de comprender muy bien los conceptos de Normalizaci\u00f3n de Bases de Datos. Cuando el dise\u00f1o de una base de datos viola las reglas de normalizaci\u00f3n, posteriormente pueden presentarse anomal\u00edas en la actualizaci\u00f3n de los datos [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":181,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"amp_status":"","footnotes":""},"categories":[49],"tags":[80,79,70],"class_list":["post-178","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-bases-de-datos","tag-3fn","tag-formas-normales","tag-normalizacion"],"_links":{"self":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts\/178","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/comments?post=178"}],"version-history":[{"count":5,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts\/178\/revisions"}],"predecessor-version":[{"id":1346,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts\/178\/revisions\/1346"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/media\/181"}],"wp:attachment":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/media?parent=178"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/categories?post=178"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/tags?post=178"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}