miércoles, 27 de febrero de 2008

motor InnoDB de MySQL y Tablas Relacionales

Hola amig@s, en esta ocasion quiero escribir sobre el motor innodb que es un motor de base de datos que trae el mysql, junto con el MyISAM; por defecto cuando trabajamos con MySQL que viene con el paquete appserv (para windows) el motor de base de datos innodb esta desactivado, para activarlo, basta con modificar el my.conf que se encuentra en la carpeta donde se instala la aplicacion en mi caso:

D:\AppServ\MySQL\my.ini

la linea que dice

#default-storage-engine=INNODB


debemos descomentar, esto hacemos removiendo el '#' que tiene al comienzo y mas abajo buscamos una linea que dice:

skip-innodb

y la comentamos agregando antes el simbolito '#' (sin las comillas) y listo, reiniciamos el servicio de mysql que en windows hacemos escribiendo:

net stop mysql

y luego

net start mysql


y ya debería estar activado, ahora ya se pueden usar foreing keys en las tablas
para hacer esto probamos con el phpMyAdmin donde podemos hacerlo de una forma muy sencilla tanto escribiendo el código SQL o utilizando el modo grafico (que ayuda mucho) para dar un ejemplo voy a hacerlo en forma de texto es decir codigo sql vamos a crear tres tablas, de las cuales una va a tener dos clave foraneas de las otras dos tablas; el ejemplo seria de la siguiente manera:

tendremos una tabla usuario, otra tabla que se llame preferencias (que por ejemplo tiene las distintas preferencias en una pagina web) y otra tabla que se llame preferencia de usuarios donde se almacenara las preferencias de cada usuario

CREATE TABLE `usuario`
(

`id` int(10) NOT NULL auto_increment,
`nombre` varchar(50) NULL,
`apellido` varchar(50) NULL,
`email` varchar(100) NOT NULL,
primary key (`id`)
);


CREATE TABLE `preferencias`
(

`id` int(10) NOT NULL auto_increment,
`nombre` varchar(20) NULL,
`descripcion` text NULL,
primary key(`id`)
);


CREATE TABLE `preferencias_usuarios`
(

`id_usuario` int(10) NOT NULL,
`id_preferencia` int(10) NOT NULL,
PRIMARY KEY (`id_usuario`,`id_preferencia`)
);


ALTER TABLE preferencias_usuarios
ADD CONSTRAINT nombre_del_constraint FOREIGN KEY (id_usuario)
REFERENCES usuario(id)
ON DELETE CASCADE ON UPDATE CASCADE,

ADD CONSTRAINT nombre_otro_constraint FOREIGN KEY (id_preferencia) REFERENCES preferencias(id) ON DELETE CASCADE ON UPDATE CASCADE;

de este modo podemos cargar usuarios luego servicios y por ultimo las preferencias de nuestro usuario y para probar que funciona cambiamos o 'editamos' nuestra tabla usuarios y editamos el id, luego revisamos en la tabla preferencias de usuarios para ver si se actualizaron los campos asi de sencillo con esto logramos mantener la integridad de nuestros datos y nos quita la tediosa tarea de hacer todos estos controles por código

otra forma de crear los foreign key es desde la misma definicion de la tabla pero para esto importa muchisimo el orden de creacion de tablas, para nuestro sencillo ejemplo es claro que primero deben crearse las tablas usuario y preferencias para luego crear la ultima tabla.

la forma seria similar a esto:

create table `preferencias_usuarios2`
(
`id_preferencia` int(10) not null,
`id_usuario` int(10) not null,
primary key (`id_preferencia`,`id_usuario`),
foreign key(`id_preferencia`) references preferencias(id) ON UPDATE CASCADE ON DELETE CASCADE,
foreign key (`id_usuario`) references usuario(id) on update cascade on delete cascade
);


obs:
no soy ningún 'máster' en base de datos, la mayor parte de lo que se aprendí fue leyendo practicando y 'quemando' osea no es 100% técnico lo que digo pero creo que se entiende y si piensan que algo no esta bien, ruego me envíen un mail a mi correo http://tinymailto.com/p431i7o o dejen su comentario en este blog

la informacion original sin 'mi toque' la pueden encontrar en la pagina oficial de mysql
http://dev.mysql.com/doc/refman/5.0/es/innodb-foreign-key-constraints.html por ultimo quiero aclarar que la base de datos usada para el ejemplo es la Versión del servidor: 5.0.24a-community-nt-log o algo asi. osea en sintesis la version 5.0

que ademas soporta 'stored procedures' y 'functions, que serian procedimientos y funciones almacenadas... de lo que hablare mas adelante cuando 'haya jugado' un poco mas con esto...

Eso es todo por ahora
hasta la proxima!!!!

lunes, 25 de febrero de 2008

Mack2 (Manga Anime Colsplay & karoke )

El sábado pasado (23-02-2008) tuve la oportunidad de ser participe del Mack2 realizado en el CPJ (Centro Paraguayo Japones) No estuve a cargo ni de la animación ni en un stand de presentación, pero próximamente podría contemplarse la posibilidad (lol), siendo mas precisos estuve en la entrada, controlando el acceso a los visitante, revisando bolsos y carteras (no se imaginan todo lo que por ahí se encuentran, pero no está en mi animo revelarselos ahora...

No puedo decir que lo que se retuvo fueran cosas fuera de lo común, por lo general eran utilerias como katanas, cuters (no se si asi se escriba, pero es la herramienta para cortar papel y similares), tijeras, tachas puntiagudas y kunais, los que fueron devueltos a sus respectivos dueños a la salida del evento claro esta.

La mayoria eran traidas por gente que se cospleyo de personajes que usan esas cosas y se olvidaron que en el reglamento estaba prohibido armas o utilerias que fueran "de verdad".

El evento se desarrollo con total tranquilidad y normalidad
a continuacion algunas fotos del evento:mi compañero en el trabajo de "control de Sellos" alone acompañado de dos hermosas señoritasAqui tenemos a Gaby cospleyada de Elfa de la leyenda de zelda

un personaje cospleyado de hitachi uchiha de los akatsuki de la serie "naruto"


y otro mas cospleyado de guepardo de la serie "X men"
y otro muy buen cosplayer es este, imitando a kenshin himura de la serie "rurouni kenshin" tambien conocida como "samurai x"

Ademas hubo ventas de revistas, exposicion de trabajos como los siguientes:
Para cerrar el evento estuvieron varias bandas, la que recuerdo es viernes 13 que pusieron a vibrar a todos los participantes, con temas como "Halloweed be thy name", y otros que tocaron el himno de los caballeros del zodiaco y Saint Seya. No se si asi se llamen propiamente los temas, pero es una suposicion.

En fin el evento estuvo Fabulantastico!! como se diria en algun anime...jejeje

hasta la proxima!!

lunes, 4 de febrero de 2008

Truco para poder tener virtual host en modo local

Hola amig@s que visitan el blog...
En esta ocasión quiero publicar un pequeño truco que aprendí con mi amigo Cesar Rodas, se trata de unas modificaciones que se hacen a dos archivos especificamente, para poder obtener varias dominios locales en una sola maquina...

Normalmente solemos tener cuando usamos aplicaciones como el appserv, para acceder a la pagina que desarrollamos las direcciones http://localhost/ o http://127.0.0.1/ o el nombre que le damos a la maquina desde windows, pero esas son todas, y si tenemos varios proyectos en paralelo, tenemos que escribir algo similar a http://localhost/proyecto1/ http://localhost/proyecto2/ etc...

Pues con este metodo podremos acceder a algo asi como
http://proyecto1.com
http://proyecto.com y asi sucesivamente, sin preocuparnos porque el path real
sea
c:\AppServ\www\proyecto1\
o
c:\AppServ\www\proyecto2\

Los archivos que debemos modificar para lograr esto son:
el httpd.conf que es el archivo de configuraciones del apache, que en mi configuracion se encuentra almacenada en
c:\AppServ\apache\conf\httpd.conf
y el archivo
host
que se encuentra en
C:\WINDOWS\SYSTEM32\DRIVERS\etc\hosts
en el archivo host
deberian encontrar algo asi como
127.0.0.1 localhost
y lo que hacen es agregar todos los nombres que quieran uno al lado de otro tras el localhost
por ejemplo
127.0.0.1 foro.phparaguay.com joomla.phparaguay.com blog.phparaguay.com phpmyadmin.phparaguay.com ventiladorcito.com
entonces cada vez que en su browser/navegador escriban cualquiera de esos nombres, se apuntara a la direccion ip 127.0.0.1 que en este caso es de loopback osea nuestra maquina...

ahora deberemos modificar el httpd.conf de modo a que el apache redireccione a la carpeta que nosotros deseemos para que surta efecto nuestro truquillo
para eso agregamos las siguientes lineas al final del archivo httpd.conf

NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin root@phparaguay
ServerName ventiladorcito.com
DocumentRoot "C:/Appserv/www/joomla"
</VirtualHost>

<VirtualHost *:80>
ServerAdmin root@phparaguay
ServerName joomla.phparaguay.com
DocumentRoot "C:/Appserv/www/joo15"
</VirtualHost>

<VirtualHost *:80>
ServerAdmin root@phparaguay
ServerName foro.phparaguay.com
DocumentRoot "C:/Appserv/www/beta1"
</VirtualHost>

<VirtualHost *:80>
ServerAdmin root@phparaguay
ServerName blog.phparaguay.com
DocumentRoot "C:/Appserv/www/blog"
</VirtualHost>

<VirtualHost *:80>
ServerAdmin root@phparaguay
ServerName phpMyAdmin.phparaguay.com
DocumentRoot "C:/Appserv/www/phpMyAdmin"
</VirtualHost>

claro esta que estos son las direcciones que pusimos en el ejemplo anterior...
la linea del server name es la que "escucha" nuestro apache y redirecciona a la carpeta
que el document root le señale... hay otras lineas que podemos poner tambien... pero las he omitido con el proposito de simplificar las cosas.

Cabe destacar que recomiendo hacer un backup de ambos archivos antes de probar nada, para evitar cualquier tipo de problemas que puedan surgir...

Guarden ambos archivos, y prueben...
Agradezco a Cesar por haberme mostrado el truco, que el ya tenia bajo la manga hace mucho tiempo ;)
Saludos y hasta la proxima!!!