Databasschema och ORM
Utforma ett effektivt databasschema för centrala SaaS-entiteter och integrera en Object-Relational Mapper (ORM) för datahantering.
Databasschema och ORM är en gratis lektion i AI-drivna SaaS-appar: Stripe + autentisering + fakturering + driftsättning på CoddyKit. Detta är lektion 2 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för AI-drivna SaaS-appar: Stripe + autentisering + fakturering + driftsättning, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i AI-drivna SaaS-appar: Stripe + autentisering + fakturering + driftsättning innehåller totalt 4 lektioner.
Databasschema: ritningen
Föreställ dig att du bygger ett hus. Du skulle väl inte bara börja lägga tegelstenar? Du behöver en ritning!
Ett databasschema är precis det: en ritning för din databas. Det definierar datastrukturen, inklusive tabeller, kolumner, datatyper och relationer mellan dem.
För en SaaS-applikation säkerställer ett välutformat schema att dina data är konsekventa, enkla att hantera och fungerar effektivt när antalet användare växer.
Centrala SaaS-entiteter
Alla SaaS-applikationer hanterar vissa grundläggande informationsdelar. Dessa kallas ofta entiteter.
Vanliga entiteter som finns i de flesta SaaS-appar är:
- Användare: Vem använder din tjänst?
- Produkter/abonnemang: Vad erbjuder du?
- Abonnemang: Hur betalar användarna för din tjänst?
- Betalningar: Transaktionsposter.
Varje entitet blir en tabell i din databas.
Utforma användartabellen
Vi börjar med entiteten User. Vilken information behöver vi för varje användare?
En enkel tabell users kan se ut så här:
id(primärnyckel, unik identifierare för varje användare)email(unik, för inloggning)password_hash(säkert lagrat lösenord)created_at(tidsstämpel för när användaren registrerade sig)updated_at(tidsstämpel för den senaste profiluppdateringen)
Varje kolumn har en specifik datatyp, till exempel text, tal eller datum.
Utforma produkt- och abonnemangstabeller
Nu ska vi titta på products och subscriptions.
Produktabell:
id(primärnyckel)name(t.ex. 'Basic Plan', 'Premium Plan')description(inkluderade funktioner)price(produktens eller abonnemangets kostnad)
Abonnemangstabell:
id(primärnyckel)user_id(främmande nyckel, länkar till tabellenusers)product_id(främmande nyckel, länkar till tabellenproducts)status(t.ex. 'active', 'canceled')start_date,end_date
Främmande nycklar är avgörande för att länka relaterade data mellan tabeller.
Introduktion till ORM
Att interagera direkt med databaser med SQL kan vara repetitivt och felbenäget. Det är här en Object-Relational Mapper (ORM) kommer in i bilden.
En ORM fungerar som en bro mellan applikationens objektorienterade kod (till exempel Java-klasser) och de relationella databastabellerna. Den gör det möjligt att interagera med databasen med hjälp av välbekanta objekt från programmeringsspråket, i stället för att skriva SQL-frågor direkt.
Tänk så här: du arbetar med objekt av typen 'User', och ORM:en översätter det till databaskommandon.
ORM: mappa objekt till tabeller
Med en ORM motsvarar varje databastabell ofta en modell eller entitetsklass i koden. Varje rad i tabellen blir en instans av den klassen.
Din tabell users skulle till exempel mappas till en klass User i programmeringsspråket.
ORM:en hanterar de komplexa detaljerna i mappningen av klassens egenskaper (som email) till databaskolumner (som email).
ORM i praktiken: datamanipulering
I stället för att skriva SQL som INSERT INTO users (email, password_hash) VALUES ('...', '...') kan du göra så här med en ORM:
public class Main {
// Represents a User entity/model
static class User {
int id; // Maps to 'id' column
String email; // Maps to 'email' column
String passwordHash; // Maps to 'password_hash' column
public User(String email, String passwordHash) {
this.email = email;
this.passwordHash = passwordHash;
}
// In a real app, ID would be set by DB or ORM upon saving
public void setId(int id) { this.id = id; }
@Override
public String toString() {
return "User{id=" + id + ", email='" + email + "'}";
}
}
// Mock Repository to simulate ORM interaction
static class UserRepository {
private int nextId = 1;
public User save(User user) {
// Simulates ORM inserting into DB and setting ID
user.setId(nextId++);
System.out.println("Simulating saving user: " + user.email + " with ID " + user.id);
return user;
}
}
public static void main(String[] args) {
UserRepository userRepository = new UserRepository();
// Create a new User object
User newUser = new User("alice@example.com", "hashedpass123");
// Use the ORM (via repository) to save the user
userRepository.save(newUser);
System.out.println("User object after save: " + newUser);
}
}ORM i praktiken: hämta data
På samma sätt innebär hämtning av data att du arbetar med objekt. Inga fler `SELECT * FROM users WHERE id = 1;`
public class Main {
static class User {
int id;
String email;
String passwordHash;
public User(int id, String email, String passwordHash) {
this.id = id;
this.email = email;
this.passwordHash = passwordHash;
}
@Override
public String toString() {
return "User{id=" + id + ", email='" + email + "'}";
}
}
static class UserRepository {
// Mock data storage for demonstration
private java.util.Map<Integer, User> users = new java.util.HashMap<>();
public UserRepository() {
users.put(1, new User(1, "bob@example.com", "hashed_bob"));
users.put(2, new User(2, "charlie@example.com", "hashed_charlie"));
}
public User findById(int id) {
System.out.println("Simulating finding user with ID: " + id);
return users.get(id);
}
}
public static void main(String[] args) {
UserRepository userRepository = new UserRepository();
// Use the ORM to find a user by ID
User foundUser = userRepository.findById(1);
if (foundUser != null) {
System.out.println("Found user: " + foundUser);
} else {
System.out.println("User not found.");
}
User anotherUser = userRepository.findById(99);
if (anotherUser == null) {
System.out.println("User with ID 99 not found (as expected).");
}
}
}Fördelar med att använda en ORM
ORM:er erbjuder flera fördelar vid SaaS-utveckling:
- Mindre SQL-kod: Du skriver mindre repetitiv SQL och kan fokusera på affärslogiken.
- Typsäkerhet: Du arbetar med objekt i programmeringsspråket och utnyttjar dess typsystem för att förebygga vanliga fel.
- Databasoberoende: Många ORM:er gör det möjligt att byta databas (t.ex. från PostgreSQL till MySQL) med minimala kodändringar.
- Ökad produktivitet: Utvecklingscyklerna blir snabbare tack vare abstraktionen.
Populära ORM:er är Hibernate (Java), SQLAlchemy (Python) och Entity Framework (.NET).
Kontroll av schema och ORM
Tänk på en enkel SaaS-applikation där användare kan skapa uppgifter. Varje uppgift tillhör en användare.
Vilket av följande påståenden är SANT när det gäller databasschemat och ORM:ens samspel i detta scenario?
Sammanfattning: schema och ORM
I den här lektionen undersökte vi den centrala rollen för ett databasschema som ritning för dina SaaS-data, där tabeller, kolumner och relationer definieras.
Vi utformade grundläggande scheman för centrala entiteter som User, Product och Subscription, och betonade betydelsen av primärnycklar och främmande nycklar.
Slutligen introducerade vi Object-Relational Mappers (ORM:er) som kraftfulla verktyg som förenklar databasinteraktioner genom att låta dig arbeta med objekt i stället för direkt SQL, vilket ökar produktiviteten och kodens underhållbarhet.
Lär dig AI-drivna SaaS-appar: Stripe + autentisering + fakturering + driftsättning med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 12
- Lektioner
- 48
Vanliga frågor
Är lektionen ”Databasschema och ORM” gratis?
Ja – hela texten till ”Databasschema och ORM” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i AI-drivna SaaS-appar: Stripe + autentisering + fakturering + driftsättning, kan Ni uppgradera till CoddyKit PRO. Kursen i AI-drivna SaaS-appar: Stripe + autentisering + fakturering + driftsättning innehåller totalt 4 lektioner.
Vad lär jag mig i ”Databasschema och ORM”?
Utforma ett effektivt databasschema för centrala SaaS-entiteter och integrera en Object-Relational Mapper (ORM) för datahantering. Ni övar på AI-drivna SaaS-appar: Stripe + autentisering + fakturering + driftsättning med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig AI-drivna SaaS-appar: Stripe + autentisering + fakturering + driftsättning?
Du behöver inga förkunskaper. Utbildningen i AI-drivna SaaS-appar: Stripe + autentisering + fakturering + driftsättning på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.
Hur lång tid tar lektionen ”Databasschema och ORM”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här AI-drivna SaaS-appar: Stripe + autentisering + fakturering + driftsättning-lektionen?
Ja. Varje AI-drivna SaaS-appar: Stripe + autentisering + fakturering + driftsättning-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Principer för RESTful API-design
- Databasschema och ORM
- De första API-endpointsen
- API-paginering, filtrering och sortering