Databaser är grunden för de flesta moderna applikationer. De lagrar, organiserar och tillhandahåller data på ett strukturerat sätt så att applikationer snabbt kan hämta och bearbeta information.


Relationsdatabaser och SQL

Relationsdatabaser lagrar data i tabeller med rader och kolumner. Relationer mellan tabeller skapas via nycklar.

TermFörklaring
TabellSamling av relaterad data (ex. Users, Orders)
RadEn post i tabellen (ex. en specifik användare)
KolumnEtt fält (ex. namn, epost)
PrimärnyckelUnikt ID för varje rad
Främmande nyckelReferens till en rad i en annan tabell

SQL (Structured Query Language) är språket som används för att fråga och manipulera relationsdatabaser.

-- Skapa tabell
CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(255) UNIQUE NOT NULL
);

-- Hämta data
SELECT * FROM users WHERE email = 'hugo@bytebase.se';

-- Infoga data
INSERT INTO users (name, email) VALUES ('Victor', 'victor@bytebase.se');

-- Join — hämta data från flera tabeller
SELECT users.name, orders.total
FROM users
JOIN orders ON users.id = orders.user_id;

Populära relationsdatabaser

DatabasTypKänt för
PostgreSQLObjektrelationellAvancerade funktioner, Egna typer, ACID, JSON-stöd
MySQL / MariaDBRelationellEnkel, snabb, mycket använd
SQLiteInbäddadFilbaserad, noll konfiguration
SQL ServerRelationellMicrosofts ekosystem
OracleRelationellEnterprise, hög prestanda

NoSQL-databaser

NoSQL (Not Only SQL) är en samling databastyper som hanterar ostrukturerad eller semi-strukturerad data. De är ofta mer skalbara än relationsdatabaser för specifika användningsfall.

TypExempelBäst för
DokumentMongoDB, CouchDBJSON-liknande dokument, flexibla scheman
Key-ValueRedis, DynamoDBCache, sessioner, enkel data
KolumnfamiljCassandra, HBaseTidsserier, stora datamängder
GraphNeo4j, ArangoDBRelationer, sociala grafer, rekommendationer

SQL vs NoSQL

AspektSQLNoSQL
SchemaFast, definierat i förvägFlexibelt eller schemalöst
RelationerJoins mellan tabellerInbäddade dokument eller referenser
SkalningVertikal (kraftfullare maskin)Horisontell (fler maskiner)
ACIDFullt stödOfta BASE (eventuell konsistens)
Använd närData är strukturerad och relationellData är ostrukturerad eller extremt skalbar

ORM — Objekt-Relationell Mappning

ORM är ett lager som mappar databastabeller till objekt i din applikation. Istället för att skriva SQL direkt arbetar du med bekanta objekt.

// Utan ORM — rå SQL
String sql = "SELECT * FROM users WHERE id = ?";
ResultSet rs = statement.executeQuery(sql);
User user = new User();
user.setName(rs.getString("name"));

// Med ORM (ex. Hibernate / JPA)
User user = entityManager.find(User.class, 42);
user.setName("Victor");

Fördelar: Minskar boilerplate, ökar produktivitet, platåsoberoende. Nackdelar: Kan generera ineffektiva frågor, abstraktionsläckage.


Av Victor Hernandez från Bytebase.se