Foreign Keys
Inline (column-level)
Append ~ after column definition to declare a foreign key:
table Post {
/// target column resolved by name
user_id ~ User;
/// explicit target column
user_id ~ User(id);
/// with ON DELETE action
user_id ~.cascade User;
/// named foreign key
user_id "fk_author" ~.cascade User;
};
Foreign keys combine with other column attributes:
table Profile {
// Primary key that also references User with cascade delete
user_id @primary_key ~.cascade User;
};
table ClientRedirectUrl {
// Indexed foreign key
client_id @index ~.cascade Client;
redirect_url: sql"TEXT";
@primary_key(client_id, redirect_url);
};
Standalone (table-level)
For composite foreign keys or when source/target columns differ:
table AccessTokenScope {
access_token ~.cascade AccessToken;
audience_id ~.cascade Audience;
scope_id;
@primary_key(access_token, audience_id, scope_id);
(audience_id, scope_id) ~.cascade AudienceScope;
(authorization_code, audience_id) "aud_fk" ~.cascade AuthorizationCodeAudience;
};
ON DELETE actions
Specified with .action after ~:
| Action | SQL |
|---|---|
|
|
|
|
|
|
|
|
|
|