Bases de Datos
¿Qué es un manejador de base de datos?
Es un programa que almacena datos en un medio y que permite realizar consultas a esa información a través de un lenguaje universal llamado SQL (Structured Query Language)
En este curso aprenderemos PostgreSQL, el más utilizado en aplicaciones web por ser gratis y open source. Procederemos a instalarlo, ademas de pgAdmin que es una interfaz visual para accesar la información
- PostgreSQL (download)
- pgAdmin (download)
Existen bases de datos relacionales (tablas) y no relacionales (documentos) y en este curso nos enfocaremos en las DB relacionales
create database payroll
Tablas y Campos
Una tabla es un grupo de registros relacionados con una sola entidad, por ejemplo, empleados. Una tabla de Empleados tiene un listado de registros donde cada fila es un empleado y cada columna un campo que identifica características de ese empleado como nombre, fecha de ingreso, teléfono, salario, etc
Id | Nombre | Teléfono | Salario | Ingreso |
---|---|---|---|---|
1 | John Patrick | 555-1324 | 8750.00 | 2000-01-10 |
2 | Jane Taylor | 555-5678 | 6395.00 | 2003-08-24 |
3 | Jim Collins | 555-9012 | 4500.00 | 2001-11-08 |
4 | Kelly Smith | 555-3456 | 3275.00 | 2008-04-03 |
Para crear una table necesitamos usar SQL y definir sus campos según el tipo de dato que van a almacenar como caracteres, números, fechas, etc:
create table employees (
id integer primary key auto_increment,
nombre varchar(50) not null,
phone varchar(100),
salary number(10,2),
hired timestamp,
fired timestamp
)
SQL
Una vez creada la base de datos podemos accesar los registros con comandos simples de SQL como SELECT, INSERT, UPDATE y DELETE, veamos:
SELECT
-- Estructura básica de una consulta
SELECT (fields) FROM (table) WHERE (condition) ORDER BY (field)
-- Seleccionar nombres y salarios de empleados
SELECT name, salary FROM employees
-- Seleccionar todos los campos de los empleados y ordenar por nombre
SELECT * FROM employees ORDER BY name
-- Filtrar según fecha de ingreso WHERE
SELECT * FROM employees WHERE hired > '2005-01-01'
INSERT
-- Estructura básica de una inserción
INSERT INTO (table) (fields) VALUES(values)
-- Ingresar un empleado
INSERT INTO employees(name, phone, salary) VALUES('George Hack', '555-9988', 8900)
-- Ingresar varios empleados en un solo comando
INSERT INTO employees(name, phone, salary) VALUES
('George Hack', '555-9988', 8900),
('Liz Russel', '555-2222', 6500),
('Carol Lynn', '555-3333', 3450),
('Tony Milano', '555-6666', 2975)
UPDATE
-- Estructura básica de una actualización
UPDATE (table) SET (field1=value1), (field2=value2) WHERE (condition)
-- Actualizar el salario de un empleado
UPDATE employees SET salary = 10000 WHERE id=1
-- Incrementar un 10% el salario de todos los empleados
UPDATE employees SET salary = salary * 1.10
-- Despedir un empleado
UPDATE employees SET salary = 0, fired = now() WHERE id=2
-- (now es una función interna de PostgreSQL)
DELETE
-- Estructura básica de una eliminación
DELETE FROM (table) WHERE (condition)
-- Borra registro #1
DELETE FROM employees WHERE id=1
-- Borra registros cuyos empleados ganan menos de 5000
DELETE FROM employees WHERE salary < 5000
-- Borra todos los registros. Cuidado!
DELETE FROM employees
El SQL es muy extenso y permite innumerables tipos de consulta y relaciones entre tablas, pero en este curso sólo usaremos los comandos mas básicos para poder entender su funcionamiento. Te recomendamos el curso de SQL para profundizar en el tema de las bases de datos
Node y Bases de Datos
Para accesar bases de datos PostgreSQL desde Node necesitamos instalar un módulo llamado pg
usando NPM asi:
$ npm install pg
Luego de instalado el módulo y agregado a nuestra aplicación, podemos hacer una consulta a la base de datos así de fácil:
const postgres = require('pg')
// const dburl = 'postgres://user:pass@localhost:5432/database'
// const dburl = 'postgres://postgres:pass1234@localhost:5432/payroll'
const dburl = process.env.DATABASEURL || '' // secret
if(!dburl){
console.error('DATABASE URL NOT AVAILABLE')
}
async function selectEmployees()
try {
const client = new postgres.Pool({ connectionString: dburl })
await client.connect()
const result = await client.query('SELECT * FROM employees ORDER BY name')
await client.end()
return result.rows
} catch(ex) {
console.error(ex)
return {error: 'Could not connect to DB'}
}
}