Existen un montón de motores de bases de datos.

Que si relacional, transaccional, dimensional, con salsa picante o con patatas… Pero no nos vamos a extender.

Para cualquier persona de a pie que quiere hacer una página web, lo más posible es que utilice Php MyAdmin en el servidor para gestionar sus bases de datos, o por lo menos es el servicio integrado en la mayoria de servidores gratuitos y de pago. Y dentro de este servicio de Php MyAdmin lo más natural es utilizar MySQL como sistema de gestión de bases de datos predominante.

Bien, pues hemos de saber esencialmente que MySQL tiene soporte para varios motores de bases de datos entre los que hay que destacar InnoDB y MyISAM . A ver, estructurando bien cuales son nuestros objetivos a la hora de usar una base de datos elegiremos uno u otro, pero algo esencial a tener en cuenta es la consistencia de los datos que vamos a guardar. Cuando digo consistencia, me refiero a que; según como diseñemos una base de datos puede haber información repetida, desactualizada; y que para que una aplicación opere de una manera correcta se han de aplicar una serie de normas que vienen dadas por el motor elegido. Evidentemente hay ventajas e inconvenientes, como todo en la vida, si ganas de un lado pierdes de otro y resumidamente con estos dos motores con InnoDB ganamos en consistencia, mientras que con MyISAM ganamos en velocidad.

Si alguien ha desarrollado alguna vez una base de datos conocerá lo que son las foreign keys (claves foráneas). Las Foreign Keys son el pilar en el que sustenta la consistencia de una base de datos, que no es más que la asociación de campos entre tablas para establecer relaciones. En nuestro caso de aplicación, solo InnoDB permite crearlas.

Lo que ocurre extrañamente es que Php MyAdmin al crear una tabla las introduce por defecto como MyISAM. Para crear una tabla en PHP MyAdmin, tendremos que especificar el motor con un parámetro ENGINE.


CREATE TABLE IF NOT EXISTS `database`.`robot` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`Name` VARCHAR(60) NULL,
`User_ID` BIGINT(20) UNSIGNED NOT NULL,
PRIMARY KEY (`idDH`, `User_ID`),
INDEX `fk_Robot_idx` (`User_ID` ASC),
CONSTRAINT `fk_Robot`
FOREIGN KEY (`User_ID`)
REFERENCES `Database`.`wp_users`(`ID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

 

Este código es un ejemplo práctico que explicaré a continuación. Para empezar, observemos la creación de la tabla ‘robot’ con tres campos (id, Name y User_ID). El campo id es un identificador incremental, por lo que automáticamente lo declaramos como clave primaria de la tabla y User_ID también para crear una relación entre tablas.

Al final del todo vemos que el motor lo hemos escogido como InnoDB, si no pusieramos esto, se crearía la tabla por defecto con MyISAM y no tendríamos ni claves primarías ni foráneas ni nada.

Bien, el objetivo es crear una tabla relacionada con una tabla de este wordpress que son los usuarios (wp_users) para crear una sección personalizada a usuarios registrados; y la información del usuario quedará contenida en esta tabla robot.  Para ello se crea la clave foránea que aparece como ‘fk_Robot_idx’ que identifica el campo que se va a compartir con la tabla de usuarios que es el declarado como ‘User_ID’. Y esta se referencia al campo de la tabla de usuarios en wordpress ‘ID’ [`wp_users`(`ID`)].

Una última advertencia. Evidentemente para que se cree la relación, las tablas de wordpress también deben ser InnoDB, cosa que no ocurre al instalar de forma predeterminada nuestro WordPress, si no nos sale un error y no funciona. Por ello hemos de cambiar el motor dentro de la interfaz de Php MyAdmin en Operaciones, y nos saldrá un menú como el de la figura.

wp_users_marked

De esta manera ya tendremos la posibilidad de poder guardar información del usuario registrado y personalizar la página según la sesión que está iniciada. Si queréis comprobarlo solo tenéis que registraros o iniciar sesión en la columna lateral de esta página para empezar a diseñar vuestros propios robots. 🙂