Ecto-schema's en databasemigraties
Definieer Ecto-schema's om Elixir-structs aan databasetabellen te koppelen en beheer schemawijzigingen met migraties.
Ecto-schema's en databasemigraties is een gratis Elixir en Phoenix: schaalbare backendontwikkeling-les op CoddyKit. Dit is les 1 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Elixir en Phoenix: schaalbare backendontwikkeling. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Elixir en Phoenix: schaalbare backendontwikkeling bevat in totaal 4 lessen.
Wat is Ecto?
Welkom bij Ecto! Het is de krachtige toolkit van Elixir voor interactie met databases. Je kunt Ecto zien als de brug tussen Elixir-gegevens en je database.
Ecto is geen traditionele Object-Relational Mapper (ORM). Het is in plaats daarvan een datamapper. Dat betekent dat Ecto zich richt op het koppelen van gegevens tussen je Elixir-applicatie (met structs) en je databasetabellen, zodat je meer controle en minder 'magie' hebt.
Elixir-structs: gegevensvormen
Voordat Ecto gegevens aan een database koppelt, gebruikt Elixir structs om gegevensvormen te definiëren. Een struct is een speciaal type map dat een vooraf bepaalde verzameling sleutels en standaardwaarden afdwingt.
Ecto-schema's bouwen hierop voort en breiden structs uit, zodat ze begrijpen hoe hun velden overeenkomen met databasekolommen.
Probeer dit eenvoudige struct-voorbeeld uit te voeren:
defmodule UserData do
defstruct name: "", age: 0, email: ""
end
# Create struct instances
user1 = %UserData{name: "Alice", age: 30}
user2 = %UserData{email: "bob@example.com"}
IO.puts "User 1: #{inspect user1}"
IO.puts "User 2: #{inspect user2}"
IO.puts "User 1's age: #{user1.age}"Een Ecto-schema definiëren
Een Ecto-schema is een Elixir-module die beschrijft hoe een Elixir-struct wordt gekoppeld aan een databasetabel. Het definieert de velden, hun typen en eventuele speciale opties.
Zo definieer je een eenvoudig User-schema dat wordt gekoppeld aan een tabel users in je database:
defmodule MyApp.User do
use Ecto.Schema
schema "users" do
field :name, :string
field :email, :string
field :age, :integer
timestamps()
end
endVeelgebruikte typen voor schemavelden
Wanneer je velden in je schema definieert, geef je hun type op. Ecto biedt veelgebruikte typen die rechtstreeks overeenkomen met databasetypen:
:string: Voor tekstgegevens, zoals namen en e-mailadressen.:integer: Voor gehele getallen.:floatof:decimal: Voor getallen met decimalen.:boolean: Voor waar/onwaar-waarden.:datetimeof:naive_datetime: Voor datum- en tijdwaarden.:binary: Voor onbewerkte binaire gegevens.
Als je het juiste type kiest, kan Ecto gegevens valideren en geschikte databasekolommen aanmaken.
Primaire sleutels en tijdstempels
Ecto-schema's bevatten automatisch een primaire sleutel, meestal een kolom id van het type :integer. Je hoeft deze niet expliciet te definiëren.
De macro timestamps() is erg handig. Deze voegt automatisch twee velden toe aan je schema en databasetabel:
:inserted_at: Slaat op wanneer het record is aangemaakt.:updated_at: Slaat op wanneer het record voor het laatst is gewijzigd.
Deze velden zijn essentieel om wijzigingen bij te houden en worden automatisch door Ecto beheerd.
Kennismaken met databasemigraties
Je Ecto-schema's definiëren de *gewenste* structuur van je database. Maar hoe pas je deze wijzigingen toe op de daadwerkelijke database?
Daarvoor gebruik je migraties. Een migratie is een Elixir-script dat wijzigingen aan je databaseschema beschrijft, zoals het aanmaken van tabellen, het toevoegen van kolommen of het wijzigen van typen. Zo ontwikkelt je databaseschema zich op een gecontroleerde manier en met versiebeheer.
Een migratiebestand genereren
Je maakt nieuwe migratiebestanden met de Mix-opdracht mix ecto.gen.migration. Je geeft de migratie een beschrijvende naam:
mix ecto.gen.migration create_users_tableDeze opdracht genereert een nieuw Elixir-bestand in de map priv/repo/migrations. De bestandsnaam bevat een tijdstempel, zodat migraties in de juiste volgorde worden toegepast.
Opbouw van een migratie
Een migratiebestand bevat een Elixir-module met een functie change/0. In deze functie definieer je de databasebewerkingen. Bijvoorbeeld het aanmaken van een tabel:
defmodule MyApp.Repo.Migrations.CreateUsersTable do
use Ecto.Migration
def change do
create table(:users) do
add :name, :string, null: false
add :email, :string, null: false
add :age, :integer
timestamps()
end
create unique_index(:users, [:email])
end
endJe migraties uitvoeren
Nadat je je migraties hebt gedefinieerd, pas je ze met een andere Mix-opdracht toe op je database:
mix ecto.migrateEcto houdt bij welke migraties zijn uitgevoerd. Als je de laatste migratie ongedaan wilt maken, kun je mix ecto.rollback gebruiken.
Voer migraties altijd eerst uit in je ontwikkelomgeving, zodat je problemen kunt opsporen.
Schema tegenover migratie
Controleer of je Ecto-schema's en migraties goed begrijpt.
Samenvatting: schema's en migraties
Je hebt je eerste stap in Ecto gezet.
- Je hebt geleerd dat Ecto-schema's definiëren hoe Elixir-structs worden gekoppeld aan databasetabellen, inclusief de velden en typen.
- Je hebt gezien hoe migraties scripts met versiebeheer zijn die deze schemaveranderingen toepassen op je daadwerkelijke database.
- Je weet nu hoe je een eenvoudig schema definieert, migratiebestanden genereert en ze toepast met Mix-opdrachten.
Vervolgens gaan we dieper in op het werken met je database via Ecto.Repo en op het waarborgen van gegevensintegriteit met Changesets.
Leer Elixir met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 12
- Lessen
- 48
Veelgestelde vragen
Is de les “Ecto-schema's en databasemigraties” gratis?
Ja — de volledige tekst van “Ecto-schema's en databasemigraties” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Elixir en Phoenix: schaalbare backendontwikkeling wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Elixir en Phoenix: schaalbare backendontwikkeling bevat in totaal 4 lessen.
Wat leer ik in “Ecto-schema's en databasemigraties”?
Definieer Ecto-schema's om Elixir-structs aan databasetabellen te koppelen en beheer schemawijzigingen met migraties. Je oefent met Elixir en Phoenix: schaalbare backendontwikkeling door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Elixir en Phoenix: schaalbare backendontwikkeling te beginnen?
Ervaring vooraf is niet nodig. Elixir en Phoenix: schaalbare backendontwikkeling op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 4.
Hoe lang duurt de les “Ecto-schema's en databasemigraties”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Elixir en Phoenix: schaalbare backendontwikkeling?
Ja. Elke les over Elixir en Phoenix: schaalbare backendontwikkeling bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Ecto-schema's en databasemigraties
- Repo, changesets en queries
- Associaties en ingebedde schema's
- Transacties en Ecto.Multi