1 min read

Prisma Schema

Prisma schemas définit les tables dans votre base de donnée. Recherchez dans votre dossier de project pour un fichier .prisma.

L'emplacement conventionnel est prisma/schema.prisma Vous pouvez ajouter/déplacer les schemas librement tant que vous informez Prisma dans package.json.

 "prisma": {
  "schema": "{path-to-.prisma}"
}

Il est possible de séparer un schema long en plusieurs .prisma. Dans ce cas la spécifier le chemin du dossier des schemas. Il est néanmoins fortement conseillé de définir datasource et generator dans schema.prisma pour clarté.

Un exemple de schema:

// specify database.
// Comments starting with "//" will NOT show up in the abstract syntax tree (AST)
datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

/// default client 
/// Comments starting with "///" WILL show up in the abstract syntax tree (AST)
generator client {
  provider = "prisma-client"
  output   = "../generated/prisma"
}

/* Defining data headers
Block comments WILL show up in the abstract syntax tree (AST) as well.*/
model User {
  id        Int      @id @default(autoincrement())
  createdAt DateTime @default(now())
  email     String   @unique
  name      String?

  // `Role` est un `enum` crée plus tard
  role      Role     @default(USER)

  posts     Post[]
}

model Post {
// FIELD-NAME TYPE  ATTRIBUTE
  id        Int      @id @default(autoincrement())
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
  published Boolean  @default(false)
  title     String   @db.VarChar(255)

// Ces deux lignes specifie un `authorID` qui réfère au `User.id`
// ? permet l'existence de `NULL`
  author    User?    @relation(fields: [authorId], references: [id])
  authorId  Int?
}

enum Role {
  USER
  ADMIN
}

Pour syntax highlighting, il y a une extension VScode.

Pour mise en forme, exécutez npx prisma format. Si vous avez l'extension VSCode installé, le formatteur est inclus. Considérez de configurer format on save

datasource

Notez au lieu de specifier de manière explicite notre databaseURL, nous avons utilisé url = env("DATABASE_URL") pour accéder dynamiquement la variable d'environement DATABASE_URL. Ceci est un bon pratique de sécurité en évitant d'exposer des secrets en .prisma, qui peut-être copié-collé et réutilisé ailleur.

On peut mettre en forme un .prismafichier par prisma format.

generator

"prisma-client" est recommandé car il sort des code .tsqui sont facilement compréhensible et modifiable si besoin. Il est possible utiliser les autres generatorstant qu'ils conforment aux specifications.

model

Il est conventionnel de définir les enums après les models.

Pour plus d'information, consulter ce guide