RSS
Mostrando entradas con la etiqueta Practica y Ejemplos. Mostrar todas las entradas
Mostrando entradas con la etiqueta Practica y Ejemplos. Mostrar todas las entradas

Integridad Referencial

domingo, 14 de diciembre de 2008

La integridad referencial es una propiedad
deseable en las bases de datos. Gracias a la integridad referencial se garantiza que una entidad (fila o registro) siempre se relaciona con otras entidades válidas, es decir, que existen en la base de datos. Implica que en todo momento dichos datos sean correctos, sin repeticiones innecesarias, datos perdidos y relaciones mal resueltas.
Como es sabido por la los desarrolladores de SQLITE , la integridad referencial no esta implementada de forma mativa pero es posible realizar la emulacion de la misma atravez de los trigger.
Extraido de la Wikipedia : www.wikipedia.org
El Siguiente Ejemplo fue extradido de la wiki del "El Server" - http://www.elserver.com/wiki/
=========================================================
La tabla PELICULAS tiene dependencia de otras dos: GENERO y SOPORTE.

Los triggers antes de insert y antes de update on Peliculas tienen en cuenta estas dos dependencias.
Para antes de delete hacen falta dos triggers: uno en Genero y otro en Soporte.
Estos triggers impiden que se pueda borrar un genero o un soporte, si hay peliculas que lo están
usando.
El código deja claro lo que se haría si la dependencia fuera de más tablas,sólo habría que añadir más OR y los triggers on delete.
Si la dependencia fuera solo de una tabla,se quitaría un OR y el delete que sobre.

CREATE TABLE [genero] (
[id_gen] INTEGER PRIMARY KEY NOT NULL,
[nombreGen] VARCHAR(40) UNIQUE NOT NULL
);

CREATE TABLE [soporte] (
[id_sop] INTEGER NOT NULL PRIMARY KEY,
[nombreSop] VARCHAR(20) UNIQUE NOT NULL
);

CREATE TABLE [peliculas] (
[id_pel] INTEGER NOT NULL PRIMARY KEY,
[id_genero] INTEGER NOT NULL,
[id_soporte] INTEGER NOT NULL,
[nombrePel] VARCHAR(40) NOT NULL
);

CREATE TRIGGER film_pel_in before insert on peliculas
for each row
begin
select case
when
(
(new.id_soporte is not null)
and
(new.id_genero is not null)
and
(
((select id_sop from soporte where
id_sop =new.id_soporte) is null)
or
((select id_gen from genero where
id_gen = new.id_genero) is null)
)
)
then raise(abort,'violacion integridad')
end;
end;

CREATE TRIGGER film_pel_up before update on peliculas
for each row begin
select case
when
(
((select id_sop from soporte where
id_sop = new.id_soporte) is null)
or
((select id_gen from genero where
id_gen = new.id_genero) is null)
)
then raise(abort,'violacion integridad')
end;
end;

CREATE TRIGGER film_sop_de before delete on soporte

for each row begin
select case
when
((select id_soporte from peliculas
where id_soporte = old.id_sop) is not null)
then raise(abort,'violacion integridad')
end;
end;

CREATE TRIGGER film_gen_de before delete on genero
for each row begin
select case
when
((select id_genero from peliculas
where id_genero = old.id_gen) is not null)
then raise(abort,'violacion integridad')
end;
end;


Sqlite Con Air y Flex

jueves, 7 de febrero de 2008

Hoy navegando en internet me tope con este interesante,un ejemplo de como trabajar con Air y Flex dos tecnologias de Adobe.

Como migrar una Base de Datos de Access a SQLite

viernes, 18 de enero de 2008

A pedido de Guille en donde nos pedia si podíamos ver como migrar de una Base de Datos de Access a SQLite, buscando en internety bueno chequeando la información obtenida les paso a contar como es posible realizar esta acción.

En primer lugar necesitas tener instalado mdbtools, que son un par de herramientas para manipular Bases de Datos de Access. Esto es muy facil de instalar:

$ sudo apt-get install mdbtools

y obviamente descontamos que ya tienes instalado en tu maquina sqlite3.

Para este ejemplo les comento que encontre por ahy un ejemplo de base de dato de Access llamada Empresa.mdb

Ahora veamos como empezar a trabajar, primero vamos a pasar de mdb a sql y lo vamos a llevar a cabo en dos faces, primero por el esquema, donde aparece la definición de los datos y segundo por los datos que contiene nuestra base de datos. Para ello realizamos lo siguiente:

$ mdb-schema Empresa.mdb > esquema.sql

Ahora puedes visualizar el archivo "esquema.sql" y verás como esta la definición de las tablas, los campos, etc.

$ mdb-export -H -I Empresa.mdb Empleados > datos.txt

Lo que hicimos ahora fue migrar el contenido de la tabla "Empleados" al archivo "datos.txt", si se fijan este archivo cuenta con los correspondientes INSERT, VALUES, etc. Pero a todo esto tenemos un pequeño problema cada líne de INSERT no finaliza con un ";" como debería de ser en SQLite, pero esto nuevamente se soluciona muy facilmente:

$ cat datos.txt | sed -e 's/")/");/g' > datos.temp

Ahora bien es el archivo "datos.temp" quien ya fueron formateados los datos para la total migración a SQLite.
Por último nos queda finalizar la migración total a SQLite de la siguiente forma:

$ sqlite3 migracion.db
SQLite version 3.4.2
Enter ".help" for instructions
sqlite> .read esquema.sql
SQL error near line 9: no such table: Empleados
sqlite> .read datos.temp
sqlite> .dump
BEGIN TRANSACTION;
CREATE TABLE Empleados
(
Clave Integer,
Puesto Text (20),
Nombre Text (50),
Email Text (50)
);
INSERT INTO "Empleados" VALUES(1,'Capo','Manuel Caro Quintero','mafia@sinaloa.com');
INSERT INTO "Empleados" VALUES(2,'Comandante','Ventura','PGR@sinaloa.com');
INSERT INTO "Empleados" VALUES(3,'Administrador','Lic. Palma','guero_palma@sinaloa.com');
COMMIT;


vemos como de manera exitosa migramos los datos desde una Base de Datos de Access a SQLite. Para finalizar veamos si realmente contamos con todos los datos y nuevamente revisamos.

sqlite> .tables
Empleados
sqlite> select * from Empleados;
1|Capo|Manuel Caro Quintero|mafia@sinaloa.com
2|Comandante|Ventura|PGR@sinaloa.com
3|Administrador|Lic. Palma|guero_palma@sinaloa.com
sqlite> .quit


Bueno ojalá que le sea útil y como siempre las dudas y preguntas la debatimos entre todos. Muchas Gracias y hasta la proxima...

Python - SQLite

sábado, 1 de diciembre de 2007

Bueno, ahora llego el momento de comenzar a ver la parte práctica de SQLite, dijimos en todo este tiempo que las Bases de Datos es compatible con muchos Lenguajes de Programación, en esta oportunidad vamos a ver la integración de SQLite con Python, para aquellos que no están al tanto, Python es un Lenguaje de Programación interpretado creado por Guido van Rossum, en los sistemas GNU/Linux es muy popular, tienen como principal característica que es totalmente orientado a objetos, fácil de aprender y muy potente.

Bueno para poder llevar a cabo la integración necesitamos que en Python tengamos instalado unas librerías que nos va a servir como interface para conectar las Bases de Datos SQLite. Para ello hacemos lo siguiente:

$ sudo apt-get install python-pysqlite2

Con esto ya contamos con estas librerías y podemos realizar la conexión fácilmente.
Para continuar y realizar nuestro primer ejemplo sencillo de esta integración, les recomendamos que vean las Review I y Review II de SQLite y creen una Base de Datos con aunquesea una tabla, a modo de ejemplo.

Vamos a suponer dos cosas: Que la Base de datos o el archivo lo llamamos "prueba.db" y que como les decia a modo de prueba creamos una tabla llamada "personal".

Ahora bien creamos un archivo en python con nuestro editor preferido y lo llamamos "prueba01.py"

# Importa librerias de SQLite
from pysqlite2 import dbapi2 as sqlite

# Realiza la coneccion con la db colocando el Path
# donde se encuentra el archivo de la Base de datos
coneccion = sqlite.connect('prueba.db')

# Crea un objeto cursor para trabajar
cursor = coneccion.cursor()

# Ejecuta la consulta SELECT, tal y como lo haríamos en SQL
cursor.execute('SELECT apellido, nombre FROM personal order by id')

# Muestra todos los datos de la consulta
for (apellido, nombre) in cursor:
    print 'Apeliido y Nombre: %s, %s.' % (apellido, nombre)

Ahora bien una ves almacenado el archivo "prueba01.py" vamos a preceder a ejecutarlo convocando al interprete de la siguiente manera:
$ python2.4 prueba01.py


Bueno, más adelante vamos a continuar con mas ejemplos de aplicación, por el momento con este magnifico Lenguaje de Programación llamado Python.

Review de SQLite - Parte II

jueves, 22 de noviembre de 2007

Aprendamos algunos comandos especiales para movernos sobre SQLite

La mayoría de las veces SQLite lee las lineas de entrada y los transforma al de la libreria SQLite para luego ejecutarlas. Si una línea de entrada empieza con un Punto (".") es interpretado inmediatamente por el intérprete de SQLite, estos puntos se utiliza normalmente para cambiar el formato de salidas de las consulta, la cual veremos más adelante

Para obtener una lista de los comandos disponibles, podemos tipear en cualquier momento ".help" y nos arrojaría la siguiente lista:

sqlite> .help

.bail ONOFF Stop after hitting an error. Default OFF
.databases List names and files of attached databases
.dump ?TABLE? ... Dump the database in an SQL text format
.echo ONOFF Turn command echo on or off
.exit Exit this program
.explain ONOFF Turn output mode suitable for EXPLAIN on or off.
.header(s) ONOFF Turn display of headers on or off
.help Show this message
.import FILE TABLE Import data from FILE into TABLE
.indices TABLE Show names of all indices on TABLE
.load FILE ?ENTRY? Load an extension library
.mode MODE ?TABLE? Set output mode where MODE is one of:
csv Comma-separated values
column Left-aligned columns. (See .width)
html HTML code
insert SQL insert statements for TABLE
line One value per line
list Values delimited by .separator string
tabs Tab-separated values
tcl TCL list elements
.nullvalue STRING Print STRING in place of NULL values
.output FILENAME Send output to FILENAME
.output stdout Send output to the screen
.prompt MAIN CONTINUE Replace the standard prompts
.quit Exit this program
.read FILENAME Execute SQL in FILENAME
.schema ?TABLE? Show the CREATE statements
.separator STRING Change separator used by output mode and .import
.show Show the current values for various settings
.tables ?PATTERN? List names of tables matching a LIKE pattern
.timeout MS Try opening locked tables for MS milliseconds
.width NUM NUM ... Set column widths for "column" mode
sqlite>


Realicemos una introducción para poder manipulas las salidas o configurarla, además cabe destacar que SQLite3 es capaz de mostrar los resultados de una consulta en ocho diferentes formatos: "csv", "column", "html", "insert", "line", "tabs", and "tcl". Podes usar en .mode para lograr estas diferentes salidas.

Bueno, comencemos con la modalidad por defecto en la cual SQLite nos muestra los datos tras una consulta realizada previamente, esta consulta estandart es separada por este símbolo (""), este ejemplo que vamos a realizar tomamos como base la Review I.

Para acceder a la base de datos creada anteriormente

$ sqlite3 prueba.db

Una ves dentro de la misma podemos realizar:

sqlite> .mode list
sqlite>
select * from personal;
1DanyxMaldoandoYYYXXXZZZ
2LaRepaWebZZZXXXYYY
sqlite>


Ahora bien si utilizas ".separator" va a cambiar el modo de separación de la consulta, por ejemplo lo vamos a hacer cambiar por una coma y un espacio ", "

sqlite> .separator ", "
sqlite>
select * from personal;
1, Danyx, Maldoando, YYYXXXZZZ
2, LaRepa, Web, ZZZXXXYYY
sqlite>


Bueno por el momento lo vamos a dejar ahy, de este modo vamos captando la estructura de SQLite3, como decimos un PseudoMotor muy potente y liviano. Será hasta la próxima y muchas gracias por acompañarnos.
Autor: Maldonado Daniel Martin (LaRepaWeb)

Review de SQLite - Parte I

miércoles, 14 de noviembre de 2007


Vamos a comenzar a hacer un HOWTO acerca de SQLite, gracias a un amigo Gerardo Cabero y las influencias de mucha gente involucrada en todo este tema.

Entendamos algunos conceptos antes de comenzar:
SQLite es un sistema de gestión de bases de datos relacional compatible con ACID, y que está contenida en una relativamente pequeña librería en C. SQLite es un proyecto de dominio público creado por D. Richard Hipp.

Rapidamente instalemos nuestro PseudoMotor SQLite en su version 3 (apodado de esa forma por Gerardo), en un sistema GNU/Linyx utilizando alguna Kosole o Terminal

$ sudo apt-get install sqlite3

una ves instalado hagamos algunas pruebas, nos dirijamos hacia algún directorio y ahora a crear una Base de Datos

$ sqlite3 prueba.db
SQLite version 3.3.10
Enter ".help" for instructions
sqlite> CREATE TABLE personal (
...> id smallint primary key,
...> nombre varchar(25),
...> apellido varchar(25),
...> direccion varchar(25)
...> );
sqlite>

Ahora insertemos algunos datos de la siguiente manera:

sqlite> insert into personal values(1, 'Danyx', 'Maldonado', 'YYYXXXZZZ');
sqlite> insert into personal values(2, 'LaRepa', 'Web', 'ZZZXXXYYY');

Hagamos nuestra primera consulta sobre la tabla "personal"

sqlite> select * from personal;
1DanyxMaldoandoYYYXXXZZZ
2LaRepaWebZZZXXXYYY
sqlite>

para poder salir de la edición por consola

sqlite> .quit

Más adelante voy a estar mostrando algunas opciones que nos brinda SQLite y el manejo de este PseudoMotor formatear salidas, exportar, etc.

Este fragmento lo Obtubimos desde del Sitio: LaRepaWeb - Gracias Daniel Maldonado y Luis -