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

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

Empleados
IdNombreTeléfonoSalarioIngreso
1John Patrick555-13248750.002000-01-10
2Jane Taylor 555-56786395.002003-08-24
3Jim Collins 555-90124500.002001-11-08
4Kelly Smith 555-34563275.002008-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'}
  }
}