Creación de la base de datos y tablas. Curso PHP y MySQL siguiendo una temática: árbol genealógico -Parte II-


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.

Página para crear la base de datos y tablas a partir de parámetros de autenticación a la BD

Página para crear la base de datos y tablas a partir de parámetros de autenticación a la BD

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="&lt;?php" method="get"> &gt;
<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="&lt;?php" /> /&gt;</td>
</tr>
<tr>
<td>
<div><strong>Usuario:</strong></div></td>
<td>
<input name="user1" type="text" value="&lt;?php" /> id="user1" /&gt;</td>
</tr>
<tr>
<td>
<div><strong>Contraseña:</strong></div></td>
<td>
<input name="password1" type="password" value="&lt;?php" /> id="password1" /&gt;</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);
 
 }
 
?&gt;

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. #1 por Server80 - Octubre 1st, 2009 a las 15:41

    Hola, cuándo será publicada la 3ra. parte.

    Gracias.

(No será publicado)
  1. No hay trackbacks