sqlite

Relaciones entre tablas de SQLite – Soporte para claves foráneas

Las relaciones entre tablas son fundamentales y realmente necesarias en el mundo de las bases de datos SQL.

El motor SQLite tiene un buen soporte para las relaciones entre las tablas, es decir, soporta las claves foráneas especificando relaciones de una tabla con otra.

Vamos a ver en este post cómo se usan las foreign keys en SQLite con algunos ejemplos simples.

Claves foráneas en SQLite

Nota importante: recuerda que debes habilitar el soporte para claves foráneas en caso de que las relaciones no funcionen.

Una clave foránea se indica al final de la creación de una tabla con:

FOREIGN KEY(clave_foranea) REFERENCES otra_tabla(campo_de_esa_tabla)

Nota: la clave foránea debe ser del mismo tipo que la clave primaria a la que se refiere.

Veamos un ejemplo sencillo de una tabla llamada grupos (grupos de alumnos) la cual queda definida con su clave primaria autoincrementable así:

create table if not exists grupos(
  id integer primary key autoincrement,
  nombre text not null
);

Para crear la relación vamos a crear una tabla llamada alumnos, porque un alumno pertenece a un grupo. Así que la definición queda de la siguiente manera:

create table if not exists alumnos(
  id integer primary key autoincrement,
  id_grupo integer,
  nombre text not null,
  direccion text not null,
  foreign key(id_grupo) references grupos(id)
);

Al final de la definición de la tabla se especifica la relación.

Probar relaciones de tablas en SQLite

Para realizar una prueba vamos a insertar datos en grupos:

insert into grupos(nombre) values ('1D'), ('2A'), ('3F');

Lo interesante viene cuando insertamos alumnos con relación de grupos, pues si insertamos el id de grupo con un valor que existe todo va bien:

insert into alumnos(id_grupo, nombre, direccion) values (1, 'Luis Cabrera Benito', 'New New York');

En este caso el grupo con id 1 sí existe, pues los que creamos al inicio ocupan el id 1, 2 y 3.

Pero al insertar un alumno con un id de grupo que no existe

insert into alumnos(id_grupo, nombre, direccion) values (4, 'John Galt', 'Atlántida');

Ocurre lo de la imagen, lo cual es una restricción porque no podemos crear relaciones a datos que no existen:

foreign key constraint failed

Por lo que podemos concluir que SQLite soporta completamente las relaciones entre tablas y las claves foráneas.

On delete y on update

Cabe mencionar que también soporta las instrucciones de On Delete y On Update como en otros motores. Un ejemplo de creación de tabla es el siguiente:

create table foo(
 id_alumno integer,
 foreign key(id_alumno) references alumnos(id) 
 on delete cascade 
 on update cascade
);

Conclusión

SQLite es un poderoso motor de bases de datos. No es multihilo ni tan robusto como otros, pero es uno de los mejores que conozco y que es portable entre distintas plataformas.

Dejo este enlace a la documentación oficial como referencia.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

17 horas hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

1 semana hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

1 semana hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

1 semana hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

1 semana hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

1 semana hace

Esta web usa cookies.