En su momento se hizo una simple página que recogía los datos de autenticación para la base de datos y seguidamente la creación de la base de datos y sus correspondientes tablas. También se insertan datos con los nombres de las poblaciones de cada país.
Las tablas trabajarán bajo el motor InnoDB (incluído a partir de MySQL v5) recomendado si queremos tener una integridad referencial de nuestros registros, aunque no es imprescindible nos ahorrará la tarea de tener que controlar la relación de registros entre tablas con nuestro código. En nuestro caso ni tenemos tablas relacionadas ni es necesario una integridad referencial puesto son pocas tablas y es sencillo borrar los registros relacionados en tablas distintas.
Definición de las tablas
Nuestro sencillo árbol genealógico precisa de tan sólo tres tablas: personas, conyuges y ciudades
Tabla personas
Almacenará los datos personales de una persona. Al fin y al cabo un árbol genealógico no es más que la relación entre todas y cada una de las personas. En esta tabla se distinguirá: el sexo, qué otra persona es su padre y su madre, datos personales, foto, fechas nacimiento y defunción, lugar nacimiento, y otros datos.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | # # Estructura de tabla para las 'personas' # CREATE TABLE personas ( `persona_id` int(8) unsigned NOT NULL, `padre_id` int(8) unsigned NOT NULL, `madre_id` int(8) unsigned NOT NULL, alias varchar(100) NOT NULL default '', `nombre` char(30) NOT NULL, `ape1` char(30) NOT NULL, `ape2` char(30) NOT NULL, `sexo` enum('h','m') NOT NULL, `f_nac` date NOT NULL default '0000-00-00', `l_nac` varchar(40) default NULL, `f_def` date NOT NULL default '0000-00-00', motmuerte varchar(50) NOT NULL default '', autobiografia varchar(255) NOT NULL default '', `l_def` varchar(40) default '', `foto_src` char(80) default NULL, `foto_link` char(80) default NULL, PRIMARY KEY (persona_id) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; |
Tabla cónyuges
Guarda los enlaces conyugales que pueden haber entre dos personas, independientemente del sexo, pero han de ser dos los cónyugues que formen el enlace. También se almacenan otros datos como: la fecha del enlace, el tipo (canónico, civil, pareja de hecho), fecha divorcio.
1 2 3 4 5 6 7 8 9 10 11 12 | # # Estructura de tabla para los conyuges # CREATE TABLE `conyuges` ( `id_conyuge` int(8) unsigned NOT NULL auto_increment, `per1_id` int(8) unsigned NOT NULL, `per2_id` int(8) unsigned NOT NULL, `f_enlace` date NOT NULL default '0000-00-00', fin_enlace date NOT NULL default '0000-00-00', `tipo_enlace` enum('n','c','h') NOT NULL, PRIMARY KEY (`id_conyuge`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; |
Tabla ciudades
Recopilo la gran mayoría de las ciudades de cada país. Ésto ayuda en el formulario de crear una persona puesto que podemos seleccionar de una lista el nombre exacto de la ciudad de un determinado país, sin que el usuario tenga que escribirlo manualmente, guardándose siempre el término con las mismas letras. Es necesario si se pretende realizar consultas como qué personas son de “Cartagena”, si estuviera mal escrito, la consulta respondería con resultados inexactos.
1 2 3 4 5 6 7 8 9 10 11 12 | # # Estructura de tabla para la tabla `ciudades` # CREATE TABLE ciudades ( id mediumint(4) NOT NULL default '0', local_id mediumint(3) NOT NULL default '0', ciudad varchar(65) NOT NULL default '', cc char(2) NOT NULL default '', pais varchar(35) NOT NULL default '', PRIMARY KEY (id) )ENGINE=InnoDB DEFAULT CHARSET=latin1; |
Creación de la base de datos
Para crear una base de datos y sus tablas es necesario tener permisos de usuario, para ello debemos tener un nombre de usuario y contraseña dados de alta en nuestro gestor MySQL, partiendo ahí, podemos montar las consultas anteriores en una página en php, para que cada vez que sea necesario, y de un plumazo, montemos la base de datos limpia o con los datos por defecto, todo sería algo así:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 | <?php include "../inc/config.inc.php" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title></title> </head> <body bgcolor="#BCCBE5"> <div> <h1>Administración datos</h1> <h2>Creación Base de Datos Predeterminada</h2> <hr /></div> <form action="<?php" method="get"> > <table border="0" cellspacing="50" cellpadding="1" width="400" align="center"> <tbody> <tr> <td colspan="2"> <div> <h3>Gestor Base de Datos MySQL 5</h3> <hr /></div></td> </tr> <tr> <td> <div><strong>Servidor:</strong></div></td> <td width="144"> <input name="server1" type="text" value="<?php" /> /></td> </tr> <tr> <td> <div><strong>Usuario:</strong></div></td> <td> <input name="user1" type="text" value="<?php" /> id="user1" /></td> </tr> <tr> <td> <div><strong>Contraseña:</strong></div></td> <td> <input name="password1" type="password" value="<?php" /> id="password1" /></td> </tr> <tr> <td> <div> <input name="crear" type="submit" value="Crear BD" /></div></td> <td> <div> <input name="Submit" type="reset" value="Limpiar" /></div></td> </tr> </tbody></table> </form> Prueba no superada, motivo: ".mysql_error()."No conecta a MySQL "); $database=" CREATE DATABASE $dbname USE $dbname DROP TABLE IF EXISTS `ciudades`; CREATE TABLE `ciudades` ( `id` mediumint(4) NOT NULL default '0', `local_id` mediumint(3) NOT NULL default '0', `ciudad` varchar(65) NOT NULL default '', `cc` char(2) NOT NULL default '', `pais` varchar(35) NOT NULL default '', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- -- Table structure for table `conyuges` -- -- DROP TABLE IF EXISTS `$tabla2`; CREATE TABLE `$tabla2` ( `id_conyuge` int(8) unsigned NOT NULL auto_increment, `per1_id` int(8) unsigned NOT NULL, `per2_id` int(8) unsigned NOT NULL, `f_enlace` date NOT NULL default '0000-00-00', `fin_enlace` date NOT NULL default '0000-00-00', `tipo_enlace` enum('n','c','h') NOT NULL, PRIMARY KEY (`id_conyuge`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- -- Table structure for table `personas` -- -- DROP TABLE IF EXISTS `$tabla1`; CREATE TABLE `$tabla1` ( `persona_id` int(8) unsigned NOT NULL, `padre_id` int(8) unsigned NOT NULL, `madre_id` int(8) unsigned NOT NULL, `alias` varchar(100) NOT NULL default '', `nombre` char(15) NOT NULL, `ape1` char(20) NOT NULL, `ape2` char(20) NOT NULL, `sexo` enum('h','m') NOT NULL, `f_nac` date NOT NULL default '0000-00-00', `l_nac` varchar(40) default NULL, `f_def` date NOT NULL default '0000-00-00', `motmuerte` varchar(100) NOT NULL default '', `autobiografia` varchar(400) NOT NULL default '', `l_def` varchar(40) default '', `foto_src` char(80) default NULL, `foto_link` char(80) default NULL, PRIMARY KEY (`persona_id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; "; mysql_query($database, $conexion) or die("Error al ejecutar la consulta, motivo: ".mysql_error()); mysql_close($conexion); } ?> |
Hay variables como $tabla1 y $tabla2 que provienen de la configuración general config.inc.php
Fichero fuente completo incluye las ciudades.
Curso PHP y MySQL siguiendo una temática: árbol genealógico -Parte I-
En el siguiente bloque parte III comenzaremos con los formularios para la inserción de datos.



#1 por Server80 - Octubre 1st, 2009 a las 15:41
Hola, cuándo será publicada la 3ra. parte.
Gracias.