Primeros pasos con SQLite con ejemplos sencillos – Guía SQLite 1

Primeros pasos con SQLite con ejemplos sencillos

SQLite es un sistema de base de datos relacional contenida en una biblioteca desarrollada en C, que se integra en la aplicación que la utiliza con lo que es un proceso integrado, sin servidor, sin configuración, con un motor de base de datos SQL con soporte para transacciones de base de datos atómicas (ACID acrónimo de Atomicity, Consistency, Isolation and Durability: Atomicidad, Consistencia, Aislamiento y Durabilidad), su código es de dominio público y libre para el uso para cualquier propósito, comercial o privado.

sqlite logo

SQLite

SQLite tiene incorporado un motor de base de datos SQL que no tiene un proceso de servidor independiente como pueden tener PostgreSQL o MySQL por ejemplo.


Así SQLite lee y escribe directamente en archivos de disco ordinarios, el contenido de una base de datos se almacena en un solo archivo de disco multiplataforma, lo que le proporciona una gran versatilidad. En su funcionamiento hay un equilibrio entre el uso de memoria y velocidad, a más memoria más rapidez de ejecución, y tiene un rendimiento óptimo incluso en entornos con poca memoria.

Las funcionalidades y capacidades de SQLite se actualizan continuamente para mejorar su fiabilidad y rendimiento al tiempo que mantiene la compatibilidad con la especificación publicada interfaz, la sintaxis SQL, y el formato de archivo de base de datos.

A continuación, explicamos la instalación, el funcionamiento y el desarrollo de una base de datos con SQLite desarrollando un proyecto y aprendiendo con ejemplos, esto lo hacemos desarrollando el proyecto Learning Project:

  1. EL PROYECTO
  2. PREPARACIÓN DEL ENTORNO
  3. CREACIÓN DE LA BASE DE DATOS
  4. CREACIÓN DE UNA TABLA cb_language
  5. POBLACIÓN DE DATOS Y CONSULTAS EN cb_language
  6. INSTALACIÓN DEL ENTORNO GRÁFICO SQLITEMAN
  7. DOCUMENTACIÓN


 

1. EL PROYECTO

Creamos un proyecto con la base de datos SQLite para aprender su funcionamiento y para comparar sus limitaciones y usos adecuados en comparación con otras bases de datos..
 

Definición del proyecto

Proyecto básico de administración de clientes para diferentes empresas, cada empresa podrá tener múltiples clientes, para el caso de estudio se plantea que ambas entidades tengan los campos básicos y direcciones que podrán ser una o varias. Este desarrollo se encuentra dentro de mi proyecto personal Learning Project ahí tienes más detalles del proyecto y su finalidad, se realizan implementaciones del mismo proyecto con diferentes bases de datos y desarrollos de aplicaciones para comparar y aprender con agilidad.

Esquema SQL

Para este proyecto se implementan 8 tablas básicas que se explican a continuación:

Learning Project
TABLA
DESCRIPCIÓN
CARACTERÍSTICAS DE DISEÑO
cb_enterprise
Empresas de la aplicación, cada empresa tendrá sus clientes.
Las empresas tendrán definido inicialmente: idioma, país y moneda, así como otros campos básicos propios.
cb_customer
Tabla general de cliente, donde se almacenarán los clientes de las diferentes empresas.
Tendrán definido inicialmente: idioma, país, direcciones, empresas, métodos de pago y moneda, así como otros campos básicos propios.
cb_addresses
Tabla de registro de las direcciones, se asocian aquí las direcciones que tienen un cliente.
Registro para asociar las direcciones al cliente, cada cliente tendrá un número ilimitado de direcciones con cb_address relacionado mediante cb_addresses (es básicamente una tabla relacional)
cb_address
Tabla de dirección donde se guardan los datos de la dirección en sí.
Tabla de dirección que tendrá los campos generales de una dirección, así como números de teléfono, transportista y tipos de dirección.
cb_language
Tabla con los idiomas registrados en la aplicación, se podrá relacionar con múltiples tablas.
cb_currency
Tabla con las monedas registradas en la aplicación, se podrá relacionar con múltiples tablas.
cb_country
Tabla con los países registrados en la aplicación, se podrá relacionar con múltiples tablas.
Para cada país se especificará la moneda y el idioma utilizado por defecto.
cb_paymentmethod
Métodos de pago definidos para el cliente u otras entidades.

A continuación, una imagen con el el Esquema E-R de Customerdb donde se muestran las relaciones reales de la base de datos, con los nombres de las claves foráneas, …

Learning Project Customerdb Database Entity Relation

Esquema E-R de Customerdb propuesto en Learning Project


 

2. PREPARACIÓN DEL ENTORNO

 

Instalación de SQLite

Para la instalación de SQLite podemos acceder a la zona de descargas de la base de datos Download SQLite, es sencillo y tienes versiones ya precompiladas para Linux, Mac y Windows. En mi caso para la elaboración de este tutorial estoy usando Ubuntu así que detallaré su instalación en este sistema operativo.

En Ubuntu tenemos una instalación de SQLite en la propia distribución por defecto, usamos el comando apt-get para instalarlo, simplemente ejecuta en un terminal:

sudo apt-get install sqlite3 libsqlite3-dev

Este repositorio incluye todo lo que necesitamos para este proyecto:

  • sqlite3 : es un frontend basado en terminal a la librería SQLite que puede evaluar las consultas de forma interactiva y mostrar los resultados en múltiples, también se puede utilizar dentro de scripts de shell y otras aplicaciones.
  • libsqlite3-dev: SQLite 3 development files

 

Puesta en marcha básica de la base de datos

Como ya explicamos anteriormente SQLite tiene incorporado un motor de base de datos SQL que no tiene un proceso de servidor independiente, así que no necesitamos hacer ninguna instalación adicional ni puesta en marcha.

Ahora simplemente podemos crear una base de datos de prueba utilizando sqlite3 desde el terminal para comprobar que está funcionando correctamente:

sqlite3 prueba.db

Una vez hecho esto accedemos a sqlite> donde ya podemos crear nuestras tablas y poblarlas de datos.


 

3. CREACIÓN DE LA BASE DE DATOS

Creamos la base de datos para nuestro ejemplo en nuestra consola ejecutamos sqlite3 customerdb.db, este será el resultado:

xules@cxubuntuserver:~$ sqlite3 customerdb.db
SQLite version 3.8.11.1 2015-07-29 20:00:57
Enter ".help" for usage hints.
sqlite> 

Ten en cuenta que al ejecutar este comando debes escoger previamente la ruta donde quieres almacenar la base de datos ya que lo que estamos creando es un archivo SQLite que una vez generado con este comando lo puedes ver en el directorio directamente.


 

4. CREACIÓN DE UNA TABLA cb_language

Empezaremos el desarrollo del proyecto Learning Project con el desarrollo de la tabla cb_language, durante el cual aprovecharemos para comentar la sintaxis SQL y especificar algunas cosas que no podemos hacer en SQLite y si en otras bases de datos relacionales.

El código que necesario para crear la primera tabla es el siguiente:

CREATE TABLE cb_language
(
  idlanguage VARCHAR(6) NOT NULL,
  namelanguage VARCHAR(60) NOT NULL,
  isactive VARCHAR(1) NOT NULL DEFAULT 'N',
  languageiso VARCHAR(2),
  countrycode VARCHAR(2),
  isbaselanguage VARCHAR(1) NOT NULL DEFAULT 'N',
  issystemlanguage VARCHAR(1) NOT NULL DEFAULT 'N',
  CONSTRAINT pk_cb_language PRIMARY KEY (idlanguage),
  CONSTRAINT u_cb_language_namelanguage UNIQUE (namelanguage)
);

Veamos ahora su significado, definimos la tabla cb_language utilizando la sintaxis SQL general puedes consultar la documentación en SQLite CREATE TABLE:

CREATE TABLE cb_language
(
    ... 
);

 

Primeros pasos con SQLite con ejemplos sencillos

Usamos el proyecto base Learning Project para ir aprendiendo el funcionamiento de SQLite y SQL de forma fácil

 

Clave Primaria (Primary Key)

Vamos a definir como clave primaria (primary key) el campo idlanguage, no utilizamos un tipo serial (generación automática de un contador único), sino que como clave primaria usamos la codificación del idioma i18n e i10n, las principales: es_ES y en_EN, que serán las que se usarán por defecto.

Una clave primaria (primary key) es un campo o a una combinación de campos que identifica de forma única a cada fila de una tabla, es decir, comprende de esta manera una columna o conjunto de columnas. No puede haber dos filas en una tabla que tengan la misma clave primaria.

La estructura para definir la clave primaria es la siguiente tal y como la utilizamos en la creación de nuestra tabla:

CONSTRAINT nombre_pk PRIMARY KEY (campo_pk)

 

Clave Única(Unique Key)

La estructura para definir una clave única es la siguiente tal y como la utilizamos en la creación de nuestra tabla:

CONSTRAINT nombre_clave_unica UNIQUE(campo_unico)

Con esto nos aseguramos que en ese campo no estará repetido en otro registro de la tabla, esto lo utilizamos con campos que no forman parte de la clave primaria pero que igualmente necesitamos que sean únicos por registro.
 

Tipos de datos

Los tipos de datos en SQLITE se agrupan por afinidad en 5 tipos de datos básicos que puedes consultar en Datatypes In SQLite Version 3 y son estos:

  • TEXT: variable de tipo texto que se almacena en formato UTF, aquí tenemos agrupados los diferentes tipos de datos SQL para las variables de texto: CHARACTER(20), VARCHAR(255), VARYING CHARACTER(255), NCHAR(55), NATIVE CHARACTER(70), NVARCHAR(100), TEXT y CLOB.
  • NUMERIC: NUMERIC, DECIMAL(10,5), BOOLEAN, DATE y DATETIME
  • INTEGER: es un entero con signo que se almacena con un longitud que va en función del tipo de dato definido: INTEGER, TINYINT, SMALLINT, MEDIUMINT, BIGINT, UNSIGNED BIG INT, INT2 y INT8
  • REAL: es un dato de tipo float, sus diferentes versiones variarán en la precisión: REAL, DOUBLE, DOUBLE PRECISION y FLOAT
  • BLOB: los datos se almacean en el mismo formato en que se introducen.

En nuestro ejemplo de tabla inicial solo hemos utilizado un tipo de datos VARCHAR(255) para definir las diferentes columnas por ejemplo:

  namelanguage VARCHAR(60) NOT NULL,
  isactive VARCHAR(1) NOT NULL DEFAULT 'N',

Como puedes ver en el código hemos añadido unas especificaciones a la creación de la columna:

  • NOT NULL: para indicar que la columna siempre tiene que tener un valor, y este no puede ser NULL
  • DEFAULT: en SQL podemos definir un valor por defecto para una columna que se introduce si al crear un nuevo registro este valor no se pasa.

 

 

5. POBLACIÓN DE DATOS Y CONSULTAS EN cb_language

Para finalizar la comprobación de la tabla que hemos creado vamos a hacer una pequeña inserción de datos en la tabla y una consulta sobre la misma para cerciorarnos del éxito.

Población de datos: INSERT

Para añadir nuevos registros a una tabla de una base de datos relacional usamos la sentencia SQL: INSERT. Este comando tiene varias formas de utilización como puedes comprobar en la documentación de SQLITE – INSERT como explicaré con ejemplos en una publicación posterior.

Ahora usamos el comando INSERT detallando todas las columnas de la tabla y a continuación los valores, esta es la sintaxis:

INSERT INTO nombre_de_la_tabla ( nombre_de_la_columna [, ...] ) 
	VALUES (valor_de_la_columna [, ...] )  

Así, para nuestro ejemplo y utilizando las sintaxis de INSERT podemos añadir las siguientes columnas:

INSERT  INTO cb_language( idlanguage, isactive, namelanguage, languageiso, countrycode, isbaselanguage, issystemlanguage )  
	VALUES ('da_DK', 'Y', 'Danish (Denmark)', 'da', 'DK', 'N', 'N' );
INSERT INTO cb_language( idlanguage, isactive, namelanguage, languageiso, countrycode, isbaselanguage, issystemlanguage ) 
 	VALUES ('de_AT', 'Y', 'German (Austria)', 'de', 'AT', 'N', 'N' );
INSERT INTO cb_language( idlanguage, isactive, namelanguage, languageiso, countrycode, isbaselanguage, issystemlanguage ) 
	VALUES ('de_DE', 'Y', 'German (Germany)', 'de', 'DE', 'N', 'N' );
INSERT INTO cb_language( idlanguage, isactive, namelanguage, languageiso, countrycode, isbaselanguage, issystemlanguage ) 	
	VALUES ('en_GB', 'Y', 'English (United Kingdom)', 'en', 'GB', 'N', 'N' );
INSERT INTO cb_language( idlanguage, isactive, namelanguage, languageiso, countrycode, isbaselanguage, issystemlanguage ) 
	VALUES ('en_IE', 'Y', 'English (Ireland)', 'en', 'IE', 'N', 'N' );
INSERT INTO cb_language( idlanguage, isactive, namelanguage, languageiso, countrycode, isbaselanguage, issystemlanguage )
	VALUES ('es_AR', 'Y', 'Spanish (Argentina)', 'es', 'AR', 'N', 'N' );
INSERT INTO cb_language( idlanguage, isactive, namelanguage, languageiso, countrycode, isbaselanguage, issystemlanguage ) 
	VALUES ('es_UY', 'Y', 'Spanish (Uruguay)', 'es', 'UY', 'N', 'N' );
INSERT INTO cb_language( idlanguage, isactive, namelanguage, languageiso, countrycode, isbaselanguage, issystemlanguage ) 
	VALUES ('es_ES', 'Y', 'Spanish (Spain)', 'es', 'ES', 'N', 'N' );

Listo, ya tenemos nuestros datos introducidos en la tabla, ten en cuenta al añadir nuevos INSERT que si los cargas todos seguidos los debes separar con ; ya que para cada uno se realiza una ejecución.

Consulta: SELECT

Ahora vamos a mostrar los datos por nuestra consola para ello usamos el comando SELECT, esta es la sintaxis básica SQL:

SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ]
    * | expression [ [ AS ] output_name ] [, ...]
    [ FROM from_item [, ...] ]
    [ WHERE condition ]
    [ ORDER BY expression [ ASC | DESC  ]
  • SELECT FROM WHERE ORDER BY: las cláusulas SQL SELECT y SQL FROM son el ABC de las consultas de bases de datos, con estas dos cláusulas podemos listar los datos de cualquier tabla.
  • SELECT: con él indicamos que campos queremos mostrar separándolos por comas, para mostrar todos los campos de una tabla usamos el símbolo *.
  • FROM: aquí indicamos las tabla o tablas que vamos a consultar, y por lo tanto, obtener los datos.

Así, para nuestra consulta de comprobación usamos las clausulas SELECT y FROM:

SELECT * 
	FROM cb_language;

Esta consulta la introducimos en nuestra aplicación sqlite3 y los resultados se mostrarán por consola de la siguiente manera:

sqlite> SELECT * FROM cb_language;
da_DK|Danish (Denmark)|Y|da|DK|N|N
de_AT|German (Austria)|Y|de|AT|N|N
de_DE|German (Germany)|Y|de|DE|N|N
en_GB|English (United Kingdom)|Y|en|GB|N|N
en_IE|English (Ireland)|Y|en|IE|N|N
es_AR|Spanish (Argentina)|Y|es|AR|N|N
es_UY|Spanish (Uruguay)|Y|es|UY|N|N
es_ES|Spanish (Spain)|Y|es|ES|N|N


 

6. INSTALACIÓN DEL ENTORNO GRÁFICO SQLITEMAN

Como herramienta gráfica voy a instalar un entorno sencillo y fácil de usar con SQLiteman, en el enlace a la web del desarrollo puedes ver las versiones disponibles para distintos sistemas operativos es sencillo de instalar, la instalación que yo utilizo es para Ubuntu para su instalación simplemente ejecuta:

Ahora vamos a abrir la base de datos que hemos creado, para eso hemos de saber donde la hemos ubicado y abrirla con SQLiteman tal y como se indica en la imagen:

SQLITEMAN - Open Database

SQLITEMAN – Open Database

Una vez abierta la base de datos en el programa podemos ver en el árbol de tablas el contenido y la definición de la tabla que hemos creado:

SQLiteman Database -Customerdb tabla cb_language

SQLiteman Database -Customerdb tabla cb_language

En la ventana superior izquierda podemos ejecutar consultas SQL que se mostrarán en el programa, coge la consulta utilizada antes por ejemplo, y ejecútala en el programa el resultado será el que puedes ver en la imagen:

SQLiteman Database - Consulta sobre cb_language

SQLiteman Database – Consulta sobre cb_language

Por último, también tenemos una visualización de los SQLite Pragmas

SQLiteman - Pragmas

SQLiteman – Pragmas

Los Pragmas son una extensión SQL específica para SQLite y se utiliza para modificar el funcionamiento de la biblioteca SQLite o para consultar la biblioteca SQLite para obtener datos internos. La declaración PRAGMA se crea utilizando la misma interfaz que otros comandos SQLite como SELECT o INSERT aunque como es evidente difiere en otros aspectos importantes.


 

Documentación SQLite con ejemplos

  • SQLite: web oficial del proyecto de la base de datos
  • SQLite Download: página de descargas e instalación de SQLite
  • SQLite Pragmas: son una extensión SQL específica para SQLite y se utiliza para modificar el funcionamiento de la biblioteca SQLite o para consultar la biblioteca SQLite para obtener datos internos, en este enlace tienes toda la información.
  • SQLiteman: web de la aplicación que nos proporciona un entorno gráfico sencillo y fácil de usar con SQLite.

Primeros pasos con SQLite con ejemplos sencillos

Espero que te haya sido útil esta introducción a SQLite, si es así compártela, gracias.

4 respuestas en “Primeros pasos con SQLite con ejemplos sencillos – Guía SQLite 1

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *