J.D Nicholls
Founding Full-Stack Web3 Engineer at @baxusco | Digital nomad 🎒 | Mentor 👨🏫 | Speaker 🗣️ | Developer 👨💻 | Creator of @proyecto26 #opensource #developer
Se especializan en realizar operaciones de lectura/escritura muy rápidamente desde disco.
Para lograrlo almacenan los datos siguiendo un esquema que se define previamente para realizar consultas fácilmente.
Existen 2 tipos: SQL y NoSQL. Las SQL (Structured Query Language) usan una estructura de tablas y álgebra relacional para hacer operaciones sobre la base de datos.
Corren como un servidor; esperando peticiones en una dirección y un puerto específico.
Campos
Registros
Un servidor puede contener varias bases de datos.
Una base de datos puede contener varias tablas.
Una tabla puede contener varios registros.
Schema
Indica qué tablas o relaciones componen la base de datos, así como los campos incluidos en cada tabla
Se realizan queries usando SQL para recuperar datos o modificarlos. Por ejemplo: Recuperar solo el nombre de los clientes que se llamen “Jaimito”.
SELECT first_name, last_name
FROM player
WHERE first_name='Jaimito'
- Utiliza SQL.
- Open Source.
- Integración con diversas plataformas incluyendo Heroku.
- 15 de desarrollo.
- Disponibilidad para múltiples sistemas.
- Cliente SQL para hacer operaciones complejas sobre una base de datos.
- Interfaz gráfica fácil de usar
- Disponibilidad para varios sistemas operativos.
Cada registro de una base de datos tiene una llave o identificador único con el que se puede acceder de manera eficiente.
No todos los datos se almacenan en una misma tabla, por el contrario existen diferentes tablas interrelacionadas de tal forma que se pueden realizar queries eficientemente sobre ellas.
Se almacena la llave en la tabla propia, en lugar de copiar todos los datos; a esto se le llama una llave foránea.
Completar las secciones 1 - 7 del tutorial de PostgreSQL utilizando ValentinaDB.
Recupera un conjunto de columnas de una Tabla.
SELECT column_1,
column_2,
...
FROM table_name
Se puede especificar al query que solo recupere los datos que cumplan con una restricción, la más común es where: hace que el query compare una columna de cada registro de la base de datos con un valor arbitrario; en caso de coincidir regresa en el conjunto de datos solicitado.
SELECT last_name, first_name
FROM player
WHERE first_name = 'Jaimito' AND last_name = 'Perez';
Permiten combinar la información de 2 tablas para responder preguntas más complejas. Comparan una llave foránea en una tabla con la llave primaria correspondiente en otra tabla.
SELECT
player.email,
"first_name",
"last_name",
"username",
"level",
"score"
FROM
"public"."player" AS player
INNER JOIN
"public"."score" AS score
ON
player.email = score.email;
CREATE TABLE "public"."player" (
"email" Text NOT NULL,
"first_name" Text,
"last_name" Text,
"username" Text NOT NULL,
PRIMARY KEY ("email"),
CONSTRAINT "unique_email" UNIQUE( "email" )
);
CREATE TABLE level (
"level_id" SERIAL PRIMARY KEY,
"name" VARCHAR (50) NOT NULL,
"description" TEXT
);
INSERT INTO "score" ("email", "level", "score")
VALUES
('manuela.recio@upb.edu.co', 4, 350),
('juan.riosq@upb.edu.co', 4, 200);
UPDATE "player"
SET
"first_name" = 'Juan',
"last_name" = 'Nicholls'
WHERE
"email" = 'jdnichollsc@hotmail.com';
DELETE FROM "score"
WHERE
email = 'jdnichollsc@hotmail.com';
Desarrolle la base de datos para soportar el ejercicio del leaderboard.
Para acceder a la base de datos desde Node.js se utiliza una librería de Postgres para Node. Vamos a usar pg.
const { Client } = require('pg');
const connectionString = 'postgresql://dbuser:password@database.server.com:3211/mydb'
const client = new Client({
connectionString: connectionString,
})
client.connect()
client.query('SELECT NOW()', (err, res) => {
console.log(err, res)
client.end()
})
Construir una conexión tiene un delay de 20-30ms, haciendo que la latencia para responder las peticiones aumente. Es preferible reutilizar las conexiones.
const { Pool } = require('pg')
const connectionString = 'postgresql://dbuser:password@database.server.com:3211/mydb'
const pool = new Pool({
connectionString: connectionString,
})
pool.query('SELECT * FROM users WHERE id = $1', [1])
.then(res => {
console.log('user:', res.rows[0])
//code code code
})
.catch(e => setImmediate(() => { throw e }))
Documentación de PostgreSQL, https://www.postgresql.org/docs/9.6/static/index.html
PostgreSQL tutorial, http://www.postgresqltutorial.com/
Paquete pg en npm, https://www.npmjs.com/package/pg
By J.D Nicholls
Founding Full-Stack Web3 Engineer at @baxusco | Digital nomad 🎒 | Mentor 👨🏫 | Speaker 🗣️ | Developer 👨💻 | Creator of @proyecto26 #opensource #developer