Einleitung: Warum sollte ein Entwickler SQL und NoSQL kennen?
Moderne Webentwicklung mit JavaScript (Node.js) kommt selten ohne die Interaktion mit Datenbanken aus. Die Wahl zwischen relationalen (PostgreSQL) und dokumentenorientierten (MongoDB) DBMS ist eine der zentralen architektonischen Aufgaben. In diesem Artikel werden wir praktisch erarbeiten, wie man sich mit beiden Datenbanken verbindet, CRUD-Operationen durchführt und das passende Werkzeug für die jeweilige Aufgabe auswählt.
Wir werden die gängigen Bibliotheken verwenden: pg für PostgreSQL und mongoose für MongoDB. Alle Codebeispiele sind in Node.js.
1. PostgreSQL in Node.js: Der relationale Ansatz
1.1. Verbindung und Konfiguration
PostgreSQL ist ein leistungsstarkes relationales DBMS mit SQL-Unterstützung. Für die Arbeit damit in Node.js installieren Sie das Paket pg:
npm install pgBeispiel für die Verbindung zur lokalen Datenbank mydb:
const { Pool } = require('pg');
const pool = new Pool({ user: 'postgres', host: 'localhost', database: 'mydb', password: 'secret', port: 5432,});
// Testen der Verbindungpool.query('SELECT NOW()', (err, res) => { if (err) { console.error('Verbindungsfehler:', err); } else { console.log('Verbunden mit PostgreSQL:', res.rows[0].now); }});1.2. CRUD-Operationen (Erstellen, Lesen, Aktualisieren, Löschen)
Wir erstellen eine Tabelle users und führen grundlegende Operationen durch.
Tabelle erstellen:
const createTable = async () => { const query = ` CREATE TABLE IF NOT EXISTS users ( id SERIAL PRIMARY KEY, name VARCHAR(100) NOT NULL, email VARCHAR(100) UNIQUE NOT NULL, age INTEGER ); `; await pool.query(query); console.log('Tabelle users erstellt');};
createTable();Daten einfügen (INSERT):
const addUser = async (name, email, age) => { const query = 'INSERT INTO users (name, email, age) VALUES ($1, $2, $3) RETURNING *'; const values = [name, email, age]; const res = await pool.query(query, values); console.log('Benutzer hinzugefügt:', res.rows[0]);};
addUser('Ivan Petrov', 'ivan@example.com', 30);Daten lesen (SELECT):
const getUsers = async () => { const res = await pool.query('SELECT * FROM users'); console.log('Alle Benutzer:', res.rows);};
getUsers();Daten aktualisieren (UPDATE):
const updateUserAge = async (id, newAge) => { const query = 'UPDATE users SET age = $1 WHERE id = $2 RETURNING *'; const values = [newAge, id]; const res = await pool.query(query, values); console.log('Benutzer aktualisiert:', res.rows[0]);};
updateUserAge(1, 31);Daten löschen (DELETE):
const deleteUser = async (id) => { const query = 'DELETE FROM users WHERE id = $1 RETURNING *'; const values = [id]; const res = await pool.query(query, values); console.log('Benutzer gelöscht:', res.rows[0]);};
deleteUser(1);Beachten Sie die Verwendung parametrisierter Abfragen ($1, $2). Dies schützt vor SQL-Injection.
1.3. Wann sollte man PostgreSQL wählen?
- Eine strenge Datenstruktur und Unterstützung der Integrität (Fremdschlüssel, Transaktionen) ist erforderlich.
- Komplexe JOIN-Abfragen und Aggregationen sind notwendig.
- Arbeit mit Finanz- oder kritischen Daten.
- Das Projekt verwendet ein ORM wie Sequelize oder TypeORM.
2. MongoDB in Node.js: Flexibilität von NoSQL
2.1. Verbindung über Mongoose
MongoDB ist eine dokumentenorientierte Datenbank, in der Daten im JSON-ähnlichen Format (BSON) gespeichert werden. Für die Arbeit installieren Sie mongoose:
npm install mongooseVerbindung zum lokalen Mo