Schémas Ecto et migrations de base de données
Définissez des schémas Ecto pour associer les structures Elixir aux tables de base de données et gérez les changements de schéma avec des migrations.
Schémas Ecto et migrations de base de données est une leçon Elixir & Phoenix: Scalable Backend Development gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Elixir & Phoenix: Scalable Backend Development, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Elixir & Phoenix: Scalable Backend Development comprend 4 leçons au total.
Certaines parties de cette leçon n'ont pas encore été traduites et s'affichent en anglais.
What is Ecto?
Welcome to Ecto! It's Elixir's powerful toolkit for interacting with databases. Think of it as your bridge between Elixir data and your database.
Ecto isn't a traditional Object-Relational Mapper (ORM). Instead, it's a data mapper. This means it focuses on mapping data between your Elixir application (using structs) and your database tables, giving you more control and less 'magic'.
Elixir Structs: Data Shapes
Before Ecto maps data to a database, Elixir uses structs to define data shapes. A struct is a special kind of map that ensures a predefined set of keys and default values.
Ecto schemas build upon this idea, extending structs to understand how their fields correspond to database columns.
Try running this simple struct example:
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}"Defining an Ecto Schema
An Ecto schema is an Elixir module that describes how an Elixir struct maps to a database table. It defines the fields, their types, and any special options.
Here's how you'd define a basic User schema, mapping to a users table in your database:
defmodule MyApp.User do
use Ecto.Schema
schema "users" do
field :name, :string
field :email, :string
field :age, :integer
timestamps()
end
endCommon Schema Field Types
When defining fields in your schema, you specify their type. Ecto provides many common types that map directly to database types:
:string: For text data (e.g., names, emails).:integer: For whole numbers.:floator:decimal: For numbers with decimal points.:boolean: For true/false values.:datetimeor:naive_datetime: For date and time values.:binary: For raw binary data.
Choosing the right type helps Ecto validate data and create appropriate database columns.
Primary Keys & Timestamps
Ecto schemas automatically include a primary key, usually an id column of type :integer. You don't need to define it explicitly.
The timestamps() macro is super handy! It automatically adds two fields to your schema and database table:
:inserted_at: Stores when the record was created.:updated_at: Stores when the record was last modified.
These fields are crucial for tracking changes and are automatically managed by Ecto.
Introducing Database Migrations
Your Ecto schemas define the *desired* structure of your database. But how do you apply these changes to the actual database?
This is where migrations come in! A migration is an Elixir script that describes changes to your database schema, like creating tables, adding columns, or changing types. They ensure your database schema evolves in a controlled, versioned way.
Generating a Migration File
You create new migration files using the Mix command mix ecto.gen.migration. You provide a descriptive name for the migration:
mix ecto.gen.migration create_users_tableThis command will generate a new Elixir file in your priv/repo/migrations directory. The filename will include a timestamp, ensuring migrations are applied in the correct order.
Anatomy of a Migration
A migration file contains an Elixir module with a change/0 function. Inside this function, you define your database operations. For example, creating a table:
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
endRunning Your Migrations
Once you've defined your migrations, you apply them to your database using another Mix command:
mix ecto.migrateEcto keeps track of which migrations have been run. If you need to undo the last migration, you can use mix ecto.rollback.
Always run migrations in your development environment first to catch any issues!
Schema vs. Migration
Let's check your understanding of Ecto schemas and migrations.
Recap: Schemas & Migrations
You've taken the first step into Ecto!
- We learned that Ecto schemas define how Elixir structs map to database tables, specifying fields and types.
- We explored how migrations are versioned scripts that apply these schema changes to your actual database.
- You now know how to define a basic schema, generate migration files, and apply them using Mix commands.
Next, we'll dive deeper into interacting with your database using Ecto.Repo and ensuring data integrity with Changesets.
Questions Fréquemment Posées
La leçon « Schémas Ecto et migrations de base de données » est-elle gratuite ?
Oui — le texte complet de « Schémas Ecto et migrations de base de données » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Elixir & Phoenix: Scalable Backend Development, passe à CoddyKit PRO. Le cours Elixir & Phoenix: Scalable Backend Development comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Schémas Ecto et migrations de base de données » ?
Définissez des schémas Ecto pour associer les structures Elixir aux tables de base de données et gérez les changements de schéma avec des migrations. Tu pratiques Elixir & Phoenix: Scalable Backend Development avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Elixir & Phoenix: Scalable Backend Development ?
Aucune expérience préalable n'est requise. Elixir & Phoenix: Scalable Backend Development sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « Schémas Ecto et migrations de base de données » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Elixir & Phoenix: Scalable Backend Development ?
Oui. Chaque leçon Elixir & Phoenix: Scalable Backend Development inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Schémas Ecto et migrations de base de données
- Repo, Changesets et requêtes
- Associations et schémas intégrés
- Transactions et Ecto.Multi