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.
| Term | Förklaring |
|---|---|
| Tabell | Samling av relaterad data (ex. Users, Orders) |
| Rad | En post i tabellen (ex. en specifik användare) |
| Kolumn | Ett fält (ex. namn, epost) |
| Primärnyckel | Unikt ID för varje rad |
| Främmande nyckel | Referens 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
| Databas | Typ | Känt för |
|---|---|---|
| PostgreSQL | Objektrelationell | Avancerade funktioner, Egna typer, ACID, JSON-stöd |
| MySQL / MariaDB | Relationell | Enkel, snabb, mycket använd |
| SQLite | Inbäddad | Filbaserad, noll konfiguration |
| SQL Server | Relationell | Microsofts ekosystem |
| Oracle | Relationell | Enterprise, 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.
| Typ | Exempel | Bäst för |
|---|---|---|
| Dokument | MongoDB, CouchDB | JSON-liknande dokument, flexibla scheman |
| Key-Value | Redis, DynamoDB | Cache, sessioner, enkel data |
| Kolumnfamilj | Cassandra, HBase | Tidsserier, stora datamängder |
| Graph | Neo4j, ArangoDB | Relationer, sociala grafer, rekommendationer |
SQL vs NoSQL
| Aspekt | SQL | NoSQL |
|---|---|---|
| Schema | Fast, definierat i förväg | Flexibelt eller schemalöst |
| Relationer | Joins mellan tabeller | Inbäddade dokument eller referenser |
| Skalning | Vertikal (kraftfullare maskin) | Horisontell (fler maskiner) |
| ACID | Fullt stöd | Ofta BASE (eventuell konsistens) |
| Använd när | Data är strukturerad och relationell | Data ä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