Elixir en Phoenix: schaalbare backendontwikkeling · Les

Ecto-schema's en databasemigraties

Definieer Ecto-schema's om Elixir-structs aan databasetabellen te koppelen en beheer schemawijzigingen met migraties.

Les 1 van 411 stappen

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
end

Veelgebruikte 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.
  • :float of :decimal: Voor getallen met decimalen.
  • :boolean: Voor waar/onwaar-waarden.
  • :datetime of :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_table

Deze 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
end

Je migraties uitvoeren

Nadat je je migraties hebt gedefinieerd, pas je ze met een andere Mix-opdracht toe op je database:

mix ecto.migrate

Ecto 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.

Gratis beginnen

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

  1. Ecto-schema's en databasemigraties
  2. Repo, changesets en queries
  3. Associaties en ingebedde schema's
  4. Transacties en Ecto.Multi
← Terug naar Elixir en Phoenix: schaalbare backendontwikkeling