sábado, 8 de junio de 2013

Programando un foro para FirefoxOS (II): Creando la base de datos

Como hablamos anteriormente, para crear un foro en el que puedan escribir diferentes usuarios desde sus móviles necesitamos de un servidor web con base de datos en el que almacenar los mensajes. En este artículo veremos como instalar un servidor web en el propio ordenador para poder hacer el desarrollo y crearemos una pequeña base de datos con phpMyAdmin.

Este artículo es innecesario para los que solo os interese la programación de móviles, y será posible hacer el resto de pasos sin necesidad de este dado que dejaré la base de datos necesaria funcionando online en mi propio servidor. En cualquier caso puede ser interesante por conocer un poco del lenguaje de consultas a bases de datos SQL.

Como siempre, aquí tenéis unos enlaces útiles para la lección:


Lo primero que hay que hacer es descargar e instalar un servidor, que en mi caso será el WAMP. Es un paquete que instala sobre Windows el servidor Apache, con bases de datos MySQL y el lenguaje de programación PHP. En definitiva, un todo en uno para montar una web dinámica. Una vez instalado y ejecutado aparecerá un icono verde en la barra de tareas:


Si en lugar de verde está en color rojo indica que el servidor no termina de arrancar, y si fuese en amarillo es el servidor de base de datos MySQL el que no se está ejecutando. Dando por hecho que todo haya ido bien, podemos abrir el navegador de internet y escribir la dirección "127.0.0.1", que es la IP local, que siempre apunta al propio ordenador. Lo que veremos será una página similar a esta:


A continuación podemos pulsar en el apartado "Tools" el enlace a phpMyAAdmin, que no es más que un interfaz de acceso a las bases de datos MySQL escrito en PHP. Desde ahí, pulsando sobre la pestaña "base de datos", podemos crear una nueva base de datos escribiendo el nombre ("foro", por ejemplo):


El "cotejamiento" es el formato en que se guardan los textos, para el que suelo usar "utf-8-general-ci" (Formato de Texto Universal de 8 Bits, útil para trabajar con distintos idiomas). Pero no es imprescindible marcarlo y se puede cambiar más adelante. Una vez creada la base de datos aparecerá en el lateral, y podremos acceder a ella para crear las estructuras de datos:


Aquí podremos ya crear las tabas, en donde empezaremos con una llamada "tema" con 5 columnas:


Las columnas que crearemos son: un identificador numérico (id), que permita asignar un número a cada tema, un campo "foro", con el identificador del foro al que pertenece, y otro "usuario" con el del autor del tema. Un campo "fecha" que indique cuando se actualizó por última vez y por último y un campo "título", de tipo texto, para el título del tema:


Los campos seran por tanto de tipo INT (número entero) excepto la fecha, que será de tipo DATETIME, y el título, que será CHAR (texto de tamaño fijo) en el que indicamos una longitud de 200 caracteres máximo. Pero además indicaremos un par de datos más en los atributos de la izquierda: La clave primaria y los índices:


En la fila del identificador (id), en la columna de índice, escogemos la opción "primary". Esto indica que el identificador (id) será único, es decir, que no habrá dos temas con el mismo número de identificador. Y también marcaremos la opción de "autoincrement", que significa que al crear un nuevo tema automáticamente escogerá para el un identificador que sea un número superior que el anterior (uno, dos, tres,...). Además pondremos los campos de foro y tema como índices. Esto le dice al gestor que podemos buscar en la tabla por dichos atributos (buscar los temas que pertenezcan a un foro, por ejemplo) y lo que hará el gestor es guardar un índice de temas ordenado por el tema al que pertenecen para acelerar las búsquedas.

Por último pulsamos "Guardar", creando así la tabla. Dependiendo de la versión de phpMyAdmin usada mostrará además el código SQL utilizado, pues al final todos estos formularios y datos introducidos no hacen mas que generar un código SQL que es como tradicionalmente se haría la creación de bases de datos. Gracias a estos programas nos ahorramos tener que saber de memoria el lenguaje SQL, pero aún así lo veremos un instante para conocerlo un poco:

CREATE TABLE IF NOT EXISTS `tema` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `foro` int(11) NOT NULL,
  `usuario` int(11) NOT NULL,
  `fecha` datetime NOT NULL,
  `titulo` char(200) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `foro` (`foro`,`usuario`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

Lo primero que quería hacer constar es lo sencillo que está creado este lenguaje, preparado para ser leído por personas fácilmente. Así por ejemplo "CREATE TABLE IF NOT EXIST" significa obviamente "Crear tabla si no existe". Otras cuestiones sobre esta instrucción:

  • Tras dicha declaración se pone el nombre de la tabla a crear. En nuestro caso "tema"
  • Los campos de la tabla se sitúan después, entre paréntesis y separados por comas
  • Para cada campo se pone primero el nombre (ej: "id"), después el tipo ("int(11)", "datetime", "char(200)"), y finalmente otros atributos, como una indicación de que no puede tomar valor nulo (NOT NULL) o que el valor se debe de incrementar automáticamente con cada nuevo elemento (AUTOINCREMENT).
  • También dentro de la tabla se indican las claves: la clave primaria (PRIMARY KEY) y los índices (KEY)
  • Finalmente, tras el paréntesis, se indica otra información de la tabla, que no voy a describir con detalle pero que en este caso es el tipo de motor que se usará para acceder, la codificación del texto y con que número comienza la clave primaria.
He de admitir que yo mismo no me se esta sintaxis de memoria, dado que la creación de tablas se hace muy de tarde en tarde y normalmente con un gestor de este tipo, pero en próximos artículos tendremos que utilizar otras instrucciones de SQL más recurrentes para la consulta y modificación de los datos que si resulta fácil acabar aprendiendo.

Esto lo comenzaremos a ver en el próximo artículo, en donde se realizará una actividad transversal con la creación de un nuevo tema que irá desde la aplicación en FirefoxOS donde se pedirán los datos, hasta la base de datos MySQL, pasando por un servicio en el servidor que reciba la orden, escrito en PHP.

No hay comentarios:

Publicar un comentario