Tema para phpmyadmin.

Hace un tiempo hice una plantilla para el phpmyadmin ya que no me gusta el que viene por defecto, hoy la comparto:

phpmyadmin theme dark orange

phpmyadmin theme dark orange

¿Como instalar?

Descargue el proyecto descomprima la carpeta y adentro ejecute como superusuario:

 ./install.sh 

Para mayores informes visitar el micrositio oficial del proyecto:

http://fitorec.github.com/phpmyadmin_theme_dark_orange/

Anuncios

DiaSQL generando esquema SQL apartir de un diagrama DIA

DiaSQL Dump es un plugin para el DIA que desarrolle en python bajo licencia GPLv3, que te permite crear un archivos en sintaxis SQL a partir de tu diagramas de base de datos.

Actualmente se encuentra en versión Beta pero ya es completamente funcional,  puedes obtener una copia y el código desde:

DiaSQL Dump nos ayuda a generar archivos con código SQL a partir de tus diagramas de base de datos desarrollados con la herramienta DIA, generando con esto una congruencia entre el modelado de tu base de datos con su definición en SQL, de esta forma si deseas generar algún cambio en el esquema de la base de datos basta con editar el diagrama.

Ejemplo

Previamente debes tener instalado el programa DIA, esto en ubuntu o debian linux lo puedes hacer con la siguiente instrucción.

sudo apt-get install -y dia

La siguiente figura muestra el diseño de un diagrama de base de datos en DIA.

ejemplo diagrama DIA definición de una tabla.

ejemplo diagrama DIA definición de una tabla.

De la figura se puede apreciar que la tabla Personas tiene las siguientes campos:

  • id: int(11), clave primaria, no puede ser nulo.
  • rfc: varchar(20), clave única, no puede ser nulo.
  • nombre: varchar(50), NO es clave, puede ser nulo.

Una ves que realizamos el diagrama nos vamos a archivo y del damos exportar seleccionamos al opción SQL Dump(*.sql) como se muestra en la siguiente imagen:

exportando volcado SQL del diagrama DIA

exportando volcado SQL del diagrama DIA

O bien desde linea de comando con la siguiente sentencia.

#h4x0r mode
dia  -e  ejemplo1.sql   ejemplo1.dia

Donde ejemplo1.dia es nuestro diagrama dia y ejemplos.sql es el archivo que queremos exportar(-e).

El cogido SQL generado por DiaSQL Dump para este ejemplo es:

-- Created by DiaSql-Dump Version 0.01(Beta)
-- Filename: ejemplo1.sql
-- Created: 2010-08-13

-- Personas --
CREATE TABLE IF NOT EXISTS `Personas` (
	`id` int(11) PRIMARY KEY NOT NULL UNIQUE AUTO_INCREMENT,
	`rfc` varchar(20) NOT NULL UNIQUE,
	`nombre` varchar(50)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
-- End SQL-Dump

Nota: esto es solo parte de la documentación que espero levantar próximamente.

Trigger – Disparadores en PosgreSQL

Un disparador o Trigger es una función con ciertas características, de ellas la mas relevante es que es invocada(llamada) automáticamente al suceder cierta acción sobre una tabla.

Este es el motivo de su nombre ya que son funciones que serán disparadas al suceder cierto evento, insertar un registro, borrar, editar, etc., ademas también podemos definir si este disparador ocurra antes o después de dicho evento.

Nota: para que una función sea denotada como trigger deberá ser declarada como una función que no reciba argumentos y deberá devolver un tipo trigger.

Imaginemos que tenemos el siguiente esquema de la tabla emp(empleados):

CREATE TABLE emp (
    empname text,
    salary integer,
    last_date timestamp,
    last_user text
);

Ahora para este ejemplo lo que pretendemos hacer es que validar los datos antes de ser intertados o actualizados en el registro de emp, para esto declaramos un disparador el cual deberá revisar los datos nuevos a insertar o actualizar, para esto PL/pgSQL nos brinda un objeto denominado NEW el cual tiene como miembro a los nuevos valores por insertar por ejemplo NEW.empname accede al valor de empname que introdujo el usuario al realizar la consulta update o insert. Veamos mejor el ejemplo.

CREATE FUNCTION emp_stamp() RETURNS trigger AS $emp_stamp$
    BEGIN
        -- Revisando que el campo empname No este vacio
        IF NEW.empname IS NULL THEN
            RAISE EXCEPTION ’empname no puede ser null’;
        END IF;
	-- Revisando que el campo salary No este vacio
        IF NEW.salary IS NULL THEN
            RAISE EXCEPTION ’% salary no puede ser null’, NEW.empname;
        END IF;
        -- Salary tampoco puede llegar a ser negavito
        IF NEW.salary < 0 THEN
            RAISE EXCEPTION ’% no puede haber un salario negativo!’, NEW.empname;
        END IF;
        -- Generando los datos para la bitacola
        NEW.last_date := current_timestamp;
        NEW.last_user := current_user;
        RETURN NEW;
    END;
$emp_stamp$ LANGUAGE plpgsql;

De igual forma p.e. En el caso del UPDATE si quisiéramos comparar el valor anterior del campo empname podríamos acceder con desde el objeto OLD en este caso seria OLD.empname, por ultimo solo nos falta instanciar el Trigger a la tabla y eventos correspondientes.

CREATE TRIGGER emp_stamp BEFORE INSERT OR UPDATE ON emp
    FOR EACH ROW EXECUTE PROCEDURE emp_stamp();

Para esto instanciamos el Trigger (CREATE TRIGGER) emp_stamp a la tabla(ON) emp para que sea ejecutado antes (BEFORE) una inserción u una actualización (INSERT OR UPDATE).

Conclusiones:

Como podemos ver un Trigger es una función que es ejecutada automáticamente por el motor de BD al generarse una acción, así también vimos un ejemplo claro de su uso común en la validación de los datos, ya que como podemos ver estas funciones las definimos en el estema de nuestra BD y con esto tenemos la seguridad que nuestras tablas se comportaran de la forma como la definimos, p.e. Si tenemos una aplicación de escritorio programada en Java y otra aplicación distribuida en PHP y ambas hacen uso de la tabla emp, con esto tendremos la certeza que la tabla emp nunca tendrá un campo con el valor salary negativo, sin importar la mala programación en Java o PHP.

Fuente Documentación oficial PosgreSQL 8.4.1 US:

http://www.postgresql.org/files/documentation/pdf/8.4/postgresql-8.4.1-US.pdf

La información fue extraída y traducida de:

  • 9.25. Trigger Functions – paginas 322-323
  • 12.4.3. Triggers for Automatic Updates – paginas 360-362
  • 38.9. Trigger Procedures – paginas 925-931

PostgreSQL 8.4.1 Documentation  by The PostgreSQL Global Development Group  Copyright ©