Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

MINI-TUTORIAL DE SQLITE BY zEGAZ

Estas en el tema de MINI-TUTORIAL DE SQLITE BY zEGAZ en el foro de Bases de Datos General en Foros del Web. Hola que tal este MINI-TUTO de SQLite se crea porque casi no hay mucha información documentada en español. NOTA: LEAN BIEN EL POST PARA NO ...
  #1 (permalink)  
Antiguo 24/04/2010, 19:27
 
Fecha de Ingreso: junio-2009
Ubicación: chiapas
Mensajes: 15
Antigüedad: 15 años, 4 meses
Puntos: 0
Información MINI-TUTORIAL DE SQLITE BY zEGAZ

Hola que tal este MINI-TUTO de SQLite se crea porque casi no hay mucha información documentada en español.

NOTA: LEAN BIEN EL POST PARA NO HACER PREGUNTAS INNECESARIAS ESTE CÓDIGO FUE PROBADO ANTES DE SER POSTEADO.

Para empezar se utilizara SQLite3 que se descarga de la página oficial que es :

[URL="http://www.sqlite.org/download.html"]http://www.sqlite.org/download.html[/URL]

Descargamos “Precompiled Binaries For Windows” la versión sqlite-3_6_17_1.zip
O posteriores.

Básicamente hay para todos los sistemas operativos en este caso utilizare Windows.

Para crear mi base de datos es muy simple ejecutamos símbolo de sistema y desde la consola de comandos no ubicamos en el directorio donde descargamos y descomprimimos nuestro archivo de SQLite.

CREANDO MI BASE DE DATOS

Para crear es simple desde el símbolo de sistema escribimos

C:\>sqlite3.exe nombrebasededatos.db

Y nos aparecerá lo siguiente:

Código SQL:
Ver original
  1. SQLite version 3.6.17
  2. Enter ".help" FOR instructions
  3. Enter SQL statements TERMINATED WITH a ";"
  4. sqlite>

Con esto creamos nuestra base de datos.

En nuestro ejemplo utilizaremos 5 tablas con los nombres: tb1, tb2, tb3, tb4 e intermedia.

La relación que tienen es:

Tb1 con tb2 es de 1-n
Tb2 con tb3 es de 1-n
Tb2 con tb4 es de n-n

La tabla intermedia es creada por la relación muchos a muchos que hay entre tb2 y tb4

CREANDO TABLAS

Desde la línea de comandos hacemos esto para crear nuestras tablas:

Código SQL:
Ver original
  1. CREATE TABLE tb1
  2. (
  3. id_tb1 INTEGER PRIMARY KEY NOT NULL,
  4. texto text
  5. );
  6. CREATE TABLE tb2
  7. (
  8. id_tb2 INTEGER PRIMARY KEY NOT NULL,
  9. texto VARCHAR (50),
  10. id_tb1FK INTEGER NOT NULL CONSTRAINT fk_id_tb1FK REFERENCES a(id_tb1) ON UPDATE CASCADE
  11. );
  12. CREATE TABLE tb3
  13. (
  14. id_tb3 INTEGER PRIMARY KEY NOT NULL,
  15. informacion text,
  16. id_tb2_FK INTEGER NOT NULL CONSTRAINT fk_id_tb2FK REFERENCES a(id_tb2) ON DELETE CASCADE
  17. );
  18. CREATE TABLE tb4
  19. (
  20. id_tb4 INTEGER PRIMARY KEY NOT NULL,
  21. otrodato VARCHAR (25)
  22. );
  23. CREATE TABLE intermedia
  24. (
  25. id_intermedia INTEGER PRIMARY KEY NOT NULL,
  26. id_tb2FK INTEGER NOT NULL CONSTRAINT fk_id_tb2FK REFERENCES a(id_tb2) ON DELETE CASCADE,
  27. id_tb4FK INTEGER NOT NULL CONSTRAINT fk_id_tb4FK REFERENCES a(id_tb4) ON DELETE CASCADE
  28. );

Como ven es muy sencillo crear nuestras tablas, un dato súper importante esto no quiere decir que si borramos o hacemos un update en un registro se va a propagar a las demás tablas con que tienen referencia ya que es bien sabido que Sqlite ignora todavía las integridades referencial pero para esto tenemos los TRIGGES.

NOTA: Donde tenemos “CONSTRAINT fk_id_tb4FK REFERENCES a(id_tb4) ON DELETE CASCADE” o de cualquier otra tabla, esto se podría decir que es como hacemos la integridad referencial, en otras páginas o información baja del internet no es necesario esto ya que con los TRIGGES hacen la integridad en mi caso lo puse para referencias de cómo hace la integridad referencial sqlite aunque no lo toma encuenta.

CREANDO LOS TRIGGES

Lo primero que hay que hacer es no permitir INSERT si el valor de la llave foránea no existe.

Código SQL:
Ver original
  1. CREATE TRIGGER insert_tb1_a_tb2
  2. BEFORE INSERT ON tb2
  3. FOR EACH ROW
  4. BEGIN
  5. SELECT RAISE (ROLLBACK, ’No se puede inserta el registro’)
  6. WHERE (SELECT id_tb1 FROM tb1 WHERE id_tb1= NEW.id_tb1FK) IS NULL;
  7. END;

Esto impedirá la falta de integridad referencial ósea que si no existe un valor en la tb1 que queramos insertar en la tb2 nos genera una un error SQLITE “No se puede insertar el registro”,

Esto se hace en todas las tablas nada mas cambiando donde dice tb2= “a la tabla que vamos a insertar un dato”, donde dice SELECT Id_tb1= “donde viene el origen del dato” y FROM tb1= la tabla de donde viene “, donde dice NEW.id_tb1FK =”es la referencia tb2 que hace con la tb1”, así consecutivamente para estableces nuestra integridad referencial.

Esto se hace en la:
tb1 a la tb2
tb2 a la tb3
tb2 a la intermedia
tb4 a la intermedia



Ahora si queremos realizar un UPDATE
Supongamos que modifico el id_tb1 y esta le pasa la referencia a la tb2 sería algo asi:

Código SQL:
Ver original
  1. CREATE TRIGGER update_tb1_tb2
  2. BEFORE UPDATE ON tb2
  3. FOR EACH ROW
  4. BEGIN
  5. SELECT RAISE (ROLLBACK, ’No se puede insertar el registro’)
  6. WHERE (SELECT id_tb1 FROM tb1 WHERE id_tb1= NEW.id_tb1FK) IS NULL;
  7. END;

Y esto hace que cuando actualizamos tb1 se actualice la tb2

Para un DELETE es algo parecido pero más especifico:

Código SQL:
Ver original
  1. CREATE TRIGGER delete_tb1_tb2
  2.  BEFORE DELETE ON tb1
  3.  FOR EACH ROW BEGIN
  4.     DELETE FROM tb2 WHERE id_tb2FK = OLD.id_tb1;
  5.  END;

Aquí si eliminamos un registro de la tb1 también se elimina en la tb2.

NOTA: OLD. esto es como un valor que es definido por SQLite.

CREANDO VISTAS

Ahora que ya tenemos nuestras RESTRICCIONES, UPDATES y DELETE veamos cómo hacer una VISTA.

Código SQL:
Ver original
  1. CREATE VIEW info AS SELECT * FROM tb2 JOIN
  2. (SELECT * FROM tb3 )ON id_tb2_FK= id_tb2;

Esta vista nos une las dos tablas prácticamente dando como resultado:

id_tb2, texto, id_tb1FK , id_tb3, informacion, id_tb2_FK


Ahora una vista sobre otra vista (dirán una vista sobre otra. pues si se pudo).
Esto quedaría así más o menos:

Código SQL:
Ver original
  1. CREATE VIEW detalles AS SELECT * FROM tb4
  2. JOIN (SELECT *FROM intermedia JOIN (SELECT * FROM info) ON id_tb2=id_tb2FK)
  3. ON id_tb4FK =id_tb4;

Dando como resultado todos los datos campos de la tb2, tb3, intermedia y tb4

Para restringir una vista que solo quieres que te mande a llamar un solo registro es fácil pones:

Código SQL:
Ver original
  1. SELECT * FROM info WHERE id_tb2=1;

Y solo te muestra los registros de la tb2 con el valor 1y los correspondientes de la tb3.

A hora solo falta que lo implementen en su base de datos e empezar a probar.

Con esto termina mi MINI-TUTO y espero que les sirva de algo no es mucho pero de algo servirá.
Un saludo a todos.

Código SQL:
Ver original
  1. BY zEGAz.

PD: si lo van a utilizar en otro foro auque sea compartan creditos cul.......s.
  #2 (permalink)  
Antiguo 18/03/2011, 09:30
 
Fecha de Ingreso: marzo-2011
Mensajes: 2
Antigüedad: 13 años, 8 meses
Puntos: 0
Exclamación Respuesta: MINI-TUTORIAL DE SQLITE BY zEGAZ

Hola, primero muy buen tutorial, explícito, sencillo y con ejemplos prácticos.
Sin embargo no contesta dos dudas que tengo sobre SQLIte y que no resuelvo, por más que busco y busco, ya sea en foros o en la propia documentation oficial.

1 ¿Cómo migrar de una BBDD Access a SQLite?
2 ¿Cómo usar SQLite de modo que sea portable la BBDD, y vaya junto con el ejecutable, para usarlo en cualquier PC, osea modo stand alone, o embebido, o como quiera dios que se llame técnicamente este concepto?

Muchas gracias a cualquiera que lea este post, que se pregunte cómo se podría hacer y que tenga alguna idea feliz.

Saludos.
  #3 (permalink)  
Antiguo 18/03/2011, 20:31
Avatar de ARICARRARO  
Fecha de Ingreso: diciembre-2010
Ubicación: México
Mensajes: 227
Antigüedad: 13 años, 10 meses
Puntos: 10
Respuesta: MINI-TUTORIAL DE SQLITE BY zEGAZ

¡Excelente!

Gracias @zEGAZ por compartir tu conocimiento, es muy útil la información para quienes apenas conocemos sqlite

Etiquetas: sqlite
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 06:54.