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 originalSQLite version 3.6.17
Enter ".help" FOR instructions
Enter SQL statements TERMINATED WITH a ";"
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 originalCREATE TABLE tb1
(
id_tb1 INTEGER PRIMARY KEY NOT NULL,
texto text
);
CREATE TABLE tb2
(
id_tb2 INTEGER PRIMARY KEY NOT NULL,
texto VARCHAR (50),
id_tb1FK INTEGER NOT NULL CONSTRAINT fk_id_tb1FK REFERENCES a(id_tb1) ON UPDATE CASCADE
);
CREATE TABLE tb3
(
id_tb3 INTEGER PRIMARY KEY NOT NULL,
informacion text,
id_tb2_FK INTEGER NOT NULL CONSTRAINT fk_id_tb2FK REFERENCES a(id_tb2) ON DELETE CASCADE
);
CREATE TABLE tb4
(
id_tb4 INTEGER PRIMARY KEY NOT NULL,
otrodato VARCHAR (25)
);
CREATE TABLE intermedia
(
id_intermedia INTEGER PRIMARY KEY NOT NULL,
id_tb2FK INTEGER NOT NULL CONSTRAINT fk_id_tb2FK REFERENCES a(id_tb2) ON DELETE CASCADE,
id_tb4FK INTEGER NOT NULL CONSTRAINT fk_id_tb4FK REFERENCES a(id_tb4) ON DELETE CASCADE
);
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 originalCREATE TRIGGER insert_tb1_a_tb2
BEFORE INSERT ON tb2
FOR EACH ROW
BEGIN
SELECT RAISE (ROLLBACK, ’No se puede inserta el registro’)
WHERE (SELECT id_tb1 FROM tb1 WHERE id_tb1= NEW.id_tb1FK) IS NULL;
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 originalCREATE TRIGGER update_tb1_tb2
BEFORE UPDATE ON tb2
FOR EACH ROW
BEGIN
SELECT RAISE (ROLLBACK, ’No se puede insertar el registro’)
WHERE (SELECT id_tb1 FROM tb1 WHERE id_tb1= NEW.id_tb1FK) IS NULL;
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 originalCREATE TRIGGER delete_tb1_tb2
BEFORE DELETE ON tb1
FOR EACH ROW BEGIN
DELETE FROM tb2 WHERE id_tb2FK = OLD.id_tb1;
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 originalCREATE VIEW info AS SELECT * FROM tb2 JOIN
(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 originalCREATE VIEW detalles AS SELECT * FROM tb4
JOIN (SELECT *FROM intermedia JOIN (SELECT * FROM info) ON id_tb2=id_tb2FK)
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:
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.
PD: si lo van a utilizar en otro foro auque sea compartan creditos cul.......s.