Schema
One of EdgeDB’s foundational features is declarative schema modeling.
EdgeDB schemas are declared using SDL (EdgeDB Schema Definition Language). SDL’s declarative, object-oriented syntax will look familiar to users of ORM libraries.
type Movie {
required property title -> str;
required link director -> Person;
}
type Person {
required property name -> str;
}
SDL
SDL has two important properties. First, it’s declarative; you can just write your schema down exactly as you want it to be. It’s easy to see the entire state of your schema at a glance.
Secondly, it’s object-oriented. There are no foreign keys; instead, relationships between types are directly represented with Links; this is part of what makes deep EdgeQL queries so concise. For example:
select Movie {
title,
director: {
name
}
}
.esdl
files
Your schema should be defined in one or more .esdl
files. These files should be placed in a directory called dbschema
in the root of your project.
Syntax highlighter packages/extensions for .esdl
files are available for Visual Studio Code, Sublime Text, Atom, and Vim.
Migrations
EdgeDB’s baked-in migration system lets you painlessly evolve your schema throughout the development process. After modifying your .esdl
files, you can create and apply a migration with the EdgeDB command-line tool. For a full guide on how migrations work, reference the Creating and applying migrations guide.
A migration consists of a sequence of imperative schema-modifying commands like create type
, alter property
, etc. Collectively these commands are known as DDL (data definition language). We recommend that most users use SDL and migrations when building applications. However, if you prefer SQL-style imperative schema modeling, you are free to use DDL directly; go to Reference > DDL to learn more.