{"id":426,"date":"2018-08-24T16:50:42","date_gmt":"2018-08-24T22:50:42","guid":{"rendered":"http:\/\/www.jacobsoft.com.mx\/?p=426"},"modified":"2018-09-30T17:03:14","modified_gmt":"2018-09-30T23:03:14","slug":"diseno-de-bases-de-datos-parte-2","status":"publish","type":"post","link":"https:\/\/www.jacobsoft.com.mx\/es_mx\/diseno-de-bases-de-datos-parte-2\/","title":{"rendered":"Dise\u00f1o de Bases de Datos &#8211; Parte 2"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Dise\u00f1o de Bases de Datos &#8211; Parte 2<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Dise\u00f1o de tablas y sus relaciones<\/h3>\n\n\n\n<p><strong><\/strong>En la primer parte de este art\u00edculo habiamos creado el modelo entidad relaci\u00f3n del ejemplo de recorridos tur\u00edsticos y ten\u00edamos lo siguiente:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"320\" height=\"73\" src=\"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2018\/09\/relacion-E-R.jpg\" alt=\"\" class=\"wp-image-424\" srcset=\"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2018\/09\/relacion-E-R.jpg 320w, https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2018\/09\/relacion-E-R-300x68.jpg 300w\" sizes=\"auto, (max-width: 320px) 100vw, 320px\" \/><\/figure><\/div>\n\n\n\n<p>En donde mencionabamos que un turista puede realizar varios recorridos tur\u00edsticos, y que un recorrido tur\u00edstico es realizado por varios turistas, por lo que tenemos una relaci\u00f3n de muchos a muchos entre ambas entidades: Turistas y Recorridos. En este modelo tenemos s\u00f3lo dos entidades: Turista y Recorrido. &#8220;Realiza&#8221; es la relaci\u00f3n que existe entre las dos entidades.<br\/><\/p>\n\n\n\n<p>\n\nAhora bien, si sabemos que para cada turista necesitamos registrar su nombre, edad, nacionalidad y sexo y que adem\u00e1s los recorridos est\u00e1n identificados con un n\u00famero de recorrido, un nombre y una descripci\u00f3n de la ruta y los atractivos tur\u00edsticos que se visitan, as\u00ed como, la fecha en que cada tur\u00edsta realiza un recorrido, el modelo lo podemos completar con dicha informaci\u00f3n de la siguiente manera:\n\n<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"320\" height=\"125\" src=\"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2018\/09\/EntidadRelacion2.gif\" alt=\"\" class=\"wp-image-431\"\/><\/figure><\/div>\n\n\n\n<p>\n\nLa fecha no la colocamos en el recorrido, ya que la entidad Recorrido es un cat\u00e1logos de los recorridos tur\u00edsticos que se ofrecen y que se realizan en distintas fechas por distintos turistas, as\u00ed que la fecha la colocamos en la relaci\u00f3n entre ambas entidades.<\/p>\n\n\n\n<p>Con esta informaci\u00f3n, ahora podemos describir algo similar a esto:\u00a0<strong><em>&#8220;John Smith, hombre brit\u00e1nico de 30 a\u00f1os de edad, realiz\u00f3 el 20 de enero de 2008, el recorrido n\u00famero 1 &#8211; Teotihuacan, Recorrido a la zona arqueol\u00f3gica, con escalada a la pir\u00e1mide del sol, comida en reataurante xxx,&#8230;. etc. etc.&#8221;<\/em><\/strong><br\/><\/p>\n\n\n\n<p>Cuando tenemos entidades con muchisimos datos, no se vuelve pr\u00e1ctico colocarlos todos en el modelo entidad-relaci\u00f3n, sin embargo, podemos colocar los datos m\u00e1s relvantes para darle sentido al modelo.<br\/>En la entidad Recorrido, el n\u00famero de recorrido, ser\u00e1 el valor que nos identifique de manera \u00fanica a cada registro, es decir, a cada recorrido, por lo tanto no habr\u00e1 dos recorridos con el mismo n\u00famero.<br\/><\/p>\n\n\n\n<p>Para el caso de la entidad Turista, no tenemos hasta el momento un atributo que identifique de manera \u00fanica a cada turista, no podemos utilizar el nombre, ya que varias personas pueden llamarse igual, lo mismo suceder\u00eda con la edad, el sexo y la nacionalidad, por lo que agregaremos un atributo que sea un identificador \u00fanico para cada registro o turista, este identificador lo llamaremos idTurista y tendr\u00e1 valores num\u00e9ricos consecutivos.<br\/><\/p>\n\n\n\n<p>Nuestro siguiente paso ahora es realizar la transformaci\u00f3n del modelo entindad-relaci\u00f3n al modelo relacional, es decir, dise\u00f1ar las tablas de la base de datos en donde almacenaremos la informaci\u00f3n de este sistema.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Reglas de transformaci\u00f3n<\/h2>\n\n\n\n<p>Las tres reglas b\u00e1sicas para realizar la transformaci\u00f3n del modelo entidad-relaci\u00f3n al modelo relacional son:<br\/><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Toda entidad se transforma en una tabla.<\/li><li>Las relaciones de muchos a muchos (N:M) se transforman en tablas.<\/li><li>Las relaciones uno a muchos (1:N) dan lugar o bien a una propagaci\u00f3n de identificador \u00fanico o bien a una tabla.<\/li><\/ul>\n\n\n\n<p>Tomando en cuenta la primer regla, tranformamos las dos entidades del modelo en dos tablas correspondientes:\n\n<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"320\" height=\"111\" src=\"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2018\/09\/tablas1.gif\" alt=\"\" class=\"wp-image-432\"\/><\/figure><\/div>\n\n\n\n<p>\n\nComo se mencion\u00f3 anteriormente y podemos observar en la figura de la tablas, la tabla Turista contiene un atributo adicional (campo) llamado idTurista, el cual se convierte en la clave primaria de esta tabla, es el atributo que nos permite establecer un identificador \u00fanico para cada turista. Para el caso de la tabla Recorrido, el identificador \u00fanico (clave primaria) ser\u00e1 el n\u00famero del recorrido.<\/p>\n\n\n\n<p>El modelo relacional impone una serie de restricciones inherentes:<br\/><\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>En una tabla no puede haber dos registros iguales (obligatoriedad de clave primaria).<\/li><li>El orden de los registros y de los atributos no es relevante.<\/li><li>Cada atributo s\u00f3lo puede tomar un \u00fanico valor del dominio sobre el cual est\u00e1 definido, a excepci\u00f3n del caso de los campos repetitivos que si se permiten en FileMaker.<\/li><li>Ning\u00fan atributo que forme parte de la clave primaria puede tener valores nulos o vac\u00edos (integridad de entidades).<\/li><\/ol>\n\n\n\n<p>Las restricciones con respecto a los atributos, las veremos m\u00e1s adelante.<br\/><\/p>\n\n\n\n<p>Mientras tanto, para la segunda regla de transformaci\u00f3n tenemos que: Las relaciones N:M dan lugar a una tabla cuya clave primaria o identificador \u00fanico ser\u00e1 la concatenaci\u00f3n de los identificadores principales de las entidades que se enlazan con esta relaci\u00f3n. De esta forma, los campos que forma la clave primaria de esta nueva tabla son claves ajenas o foraneas respecto a las tablas en las que estos campos son clave primaria.<br\/><\/p>\n\n\n\n<p>La relaci\u00f3n &#8220;Realiza&#8221;, da lugar a una tabla que llamaremos Realiza, (el nombre puede ser distinto), que contiene ademas de los atributos que forma la clave primaria, el campo fecha.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"174\" height=\"145\" src=\"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2018\/09\/tablas2.gif\" alt=\"\" class=\"wp-image-433\"\/><\/figure><\/div>\n\n\n\n<p>idTurista se refiere al identificador \u00fanico de la tabla turista, pero en esta tabla se convierte en una clave foranea que forma parte de la clave primaria de la tabla Realiza. n\u00famero es la clave primaria en la tabla Recorrido, pero se convierte en clave foranea en esta tabla y forma parte tambi\u00e9n, de la clave primaria de la tabla Realiza.<br\/><\/p>\n\n\n\n<p>La tabla realiza enlaza a las tablas Turista y Recorrido, por lo tanto su clave primaria o identificador \u00fanico est\u00e1 formado por dos campos, es decir, es una clave primaria compuesta.<br\/><\/p>\n\n\n\n<p>Ahora bien, \u00bfQue sucede si un mismo turista realiza dos veces un mismo recorrido?, ya sea por que le gust\u00f3, por que quiso repetir la experiencia, etc. por lo que sea, pero si el mismo turista lo realiza dos veces, es obvio que no puede hacerlo el mismo d\u00eda si tomamos en cuenta que son recorridos de todo un d\u00eda.<br\/><\/p>\n\n\n\n<p>Tomando en cuenta las reglas y restricciones mencionadas anteriormente, en la que deciamos que en una tabla no puede haber dos registros iguales, el valor que diferenciar\u00eda a estos dos registros es precisamente la fecha. Por lo tanto, para la tabla Realiza, incorporamos a la clave primaria el campo fecha. De esta forma la clave primaria de la tabla Realiza estar\u00e1 compuesta por los campos: idTurista, numero y fecha.<br\/><\/p>\n\n\n\n<p>Finalmente, al dise\u00f1ar las tres tablas resultantes y enlazarlas para establecer la relaci\u00f3n entre ellas, el diagrama relacional nos queda de la siguiente forma:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"320\" height=\"173\" src=\"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2018\/09\/tablas3.gif\" alt=\"\" class=\"wp-image-434\"\/><\/figure><\/div>\n\n\n\n<p>A\u00fan no podemos decir que las tablas quedar\u00e1n construidas de esta forma en FileMaker, antes de construirlas necesitamos tomar encuenta algunas consideraciones sobre el dominio de los atributos, valores multivaluados, depencencias funcionales y restricciones en cuanto a la informaci\u00f3n que ser\u00e1 almacenada en la base de datos.<\/p>\n\n\n\n<p>Todos estos puntos los trataremos en la siguiente parte de este art\u00edculo, en donde veremos los esquemas de normalizaci\u00f3n para reducir al m\u00e1ximo la redundancia de datos.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dise\u00f1o de Bases de Datos &#8211; Parte 2 Dise\u00f1o de tablas y sus relaciones En &hellip; <\/p>\n","protected":false},"author":2,"featured_media":427,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"advgb_blocks_editor_width":"","advgb_blocks_columns_visual_guide":"","_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[47,6],"tags":[71,72,73,74,75,76,77],"class_list":["post-426","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-bases-de-datos","category-diseno-de-bases-de-datos","tag-bases-de-datos","tag-bases-de-datos-relacionales","tag-diseno-de-bases-de-datos","tag-entidad-relacion","tag-modelado","tag-modelo-relacional","tag-transformacion-a-tablas"],"aioseo_notices":[],"author_meta":{"display_name":"Jacob Avila Camacho","author_link":"https:\/\/www.jacobsoft.com.mx\/es_mx\/author\/jacob-avila\/"},"featured_img":"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2018\/09\/destacada-diseno-p2-300x165.png","featured_image_src":"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2018\/09\/destacada-diseno-p2.png","featured_image_src_square":"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2018\/09\/destacada-diseno-p2.png","author_info":{"display_name":"Jacob Avila Camacho","author_link":"https:\/\/www.jacobsoft.com.mx\/es_mx\/author\/jacob-avila\/"},"coauthors":[],"tax_additional":{"categories":{"linked":["<a href=\"https:\/\/www.jacobsoft.com.mx\/es_mx\/category\/bases-de-datos\/\" class=\"advgb-post-tax-term\">Bases de Datos<\/a>","<a href=\"https:\/\/www.jacobsoft.com.mx\/es_mx\/category\/bases-de-datos\/diseno-de-bases-de-datos\/\" class=\"advgb-post-tax-term\">Dise\u00f1o de Bases de Datos<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">Bases de Datos<\/span>","<span class=\"advgb-post-tax-term\">Dise\u00f1o de Bases de Datos<\/span>"]},"tags":{"linked":["<a href=\"https:\/\/www.jacobsoft.com.mx\/es_mx\/category\/bases-de-datos\/diseno-de-bases-de-datos\/\" class=\"advgb-post-tax-term\">bases de datos<\/a>","<a href=\"https:\/\/www.jacobsoft.com.mx\/es_mx\/category\/bases-de-datos\/diseno-de-bases-de-datos\/\" class=\"advgb-post-tax-term\">bases de datos relacionales<\/a>","<a href=\"https:\/\/www.jacobsoft.com.mx\/es_mx\/category\/bases-de-datos\/diseno-de-bases-de-datos\/\" class=\"advgb-post-tax-term\">dise\u00f1o de bases de datos<\/a>","<a href=\"https:\/\/www.jacobsoft.com.mx\/es_mx\/category\/bases-de-datos\/diseno-de-bases-de-datos\/\" class=\"advgb-post-tax-term\">entidad-relaci\u00f3n<\/a>","<a href=\"https:\/\/www.jacobsoft.com.mx\/es_mx\/category\/bases-de-datos\/diseno-de-bases-de-datos\/\" class=\"advgb-post-tax-term\">modelado<\/a>","<a href=\"https:\/\/www.jacobsoft.com.mx\/es_mx\/category\/bases-de-datos\/diseno-de-bases-de-datos\/\" class=\"advgb-post-tax-term\">modelo relacional<\/a>","<a href=\"https:\/\/www.jacobsoft.com.mx\/es_mx\/category\/bases-de-datos\/diseno-de-bases-de-datos\/\" class=\"advgb-post-tax-term\">transformaci\u00f3n a tablas<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">bases de datos<\/span>","<span class=\"advgb-post-tax-term\">bases de datos relacionales<\/span>","<span class=\"advgb-post-tax-term\">dise\u00f1o de bases de datos<\/span>","<span class=\"advgb-post-tax-term\">entidad-relaci\u00f3n<\/span>","<span class=\"advgb-post-tax-term\">modelado<\/span>","<span class=\"advgb-post-tax-term\">modelo relacional<\/span>","<span class=\"advgb-post-tax-term\">transformaci\u00f3n a tablas<\/span>"]}},"comment_count":"0","relative_dates":{"created":"Publicado 8 a\u00f1os hace","modified":"Actualizado 8 a\u00f1os hace"},"absolute_dates":{"created":"Publicado el agosto 24, 2018","modified":"Actualizado el septiembre 30, 2018"},"absolute_dates_time":{"created":"Publicado el agosto 24, 2018 4:50 pm","modified":"Actualizado el septiembre 30, 2018 5:03 pm"},"featured_img_caption":"","series_order":"","_links":{"self":[{"href":"https:\/\/www.jacobsoft.com.mx\/es_mx\/wp-json\/wp\/v2\/posts\/426","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.jacobsoft.com.mx\/es_mx\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.jacobsoft.com.mx\/es_mx\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.jacobsoft.com.mx\/es_mx\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.jacobsoft.com.mx\/es_mx\/wp-json\/wp\/v2\/comments?post=426"}],"version-history":[{"count":2,"href":"https:\/\/www.jacobsoft.com.mx\/es_mx\/wp-json\/wp\/v2\/posts\/426\/revisions"}],"predecessor-version":[{"id":435,"href":"https:\/\/www.jacobsoft.com.mx\/es_mx\/wp-json\/wp\/v2\/posts\/426\/revisions\/435"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.jacobsoft.com.mx\/es_mx\/wp-json\/wp\/v2\/media\/427"}],"wp:attachment":[{"href":"https:\/\/www.jacobsoft.com.mx\/es_mx\/wp-json\/wp\/v2\/media?parent=426"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.jacobsoft.com.mx\/es_mx\/wp-json\/wp\/v2\/categories?post=426"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.jacobsoft.com.mx\/es_mx\/wp-json\/wp\/v2\/tags?post=426"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}