Crea una cuenta o inicia sesión

¡Continúa aprendiendo sin ningún costo! Únete y comienza a potenciar tu carrera

Modelando la base datos y schema

6/23
Recursos

Aportes 6

Preguntas 5

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Schema.prisma

// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema

datasource db {
  provider = "sqlite"
  url      = "file:./dev.db"
}

generator client {
  provider = "prisma-client-js"
}

model Avocado {
  id        Int       @id @default(autoincrement())
  createdAt DateTime  @default(now())
  updatedAt DateTime? @updatedAt
  deletedAt DateTime?
  name       String
  sku        String      @unique
  price      Float
  image      String
  attributes Attributes?
}

model Attributes {
  id          Int     @id @default(autoincrement())
  description String?
  shape       String?
  hardiness   String?
  taste       String?
  avocado     Avocado @relation(fields: [avocadoId], references: [id])
  avocadoId   Int
}


Para que los archivos .prisma tengan highlinting y también intellisense, les recomiendo instalar la extensión de vscode llamada Prisma.

Modelado Prisma

.
🛠 Repositorio Link

🚧 Commit Link
.
Para este caso, me ha interesado dividir nuestro schema.prisma, con el cual es posible mediante la herramienta Prismix.
.
Retomando mi diseño:

.
Definiendo un par de modelos:

// product.prisma
model Product {
    id       Int     @id @default(autoincrement())
    name     String
    price    Decimal
    quantity Int
    image    String

    categoryId Int
    category   Category @relation(fields: [categoryId], references: [id])

    @@map("product")
}

model Category {
    id       Int       @id
    products Product[]
}
// category.prisma
model Category {
    id   Int    @id @default(autoincrement())
    name String

    @@map("category")
}

Configuración Prismix

Después de instalar la dependencia como desarrollo Link, anexo la configuración de prismix:

{
    "mixers": [
        {
            "input": ["./src/db/models/*.prisma"],
            "output": "./prisma/schema.prisma"
        }
    ]
}

Por último, anexo en package.json prisma y prismix:

{
    "scripts": {
        "prismix": "npx prismix && npx prisma format"
    },
   //...
    "prisma": {
        "schema": "./prisma/schema.prisma",
        "seed": "ts-node ./prisma/seed.js"
    }
}

Si gustan trabajar directamente con Postgresql de una vez pueden poner en la url de db el string de conexión:
Y todo debe funcionar exactamente igual ^^

datasource db {
  provider = "postgresql"
  url      = "postgres://<user>:<password>@<server>:<port>/<dbname>"
}

Me arrojaba un error el modelos de atributos, lo solucione agregando el decorador @unique al campo avocadoId, por si a alguien más le sale ese mismo error.

model Attributes {
  id          Int     @id @default(autoincrement())
  description String?
  shape       String?
  hardiness   String?
  taste       String?
  avocado     Avocado @relation(fields: [avocadoId], references: [id])
  avocadoId   Int @unique
}

Que locura Prisma! 🙃 👌