Skip to content

Npm Prisma

Directory Structure

.
|-- package.json
|-- prisma
|   |-- dev.db
|   |-- migrations
|   |   |-- *_init
|   |   |   `-- migration.sql
|   |   `-- migration_lock.toml
|   `-- schema.prisma
|-- src
|   `-- index.ts
`-- tsconfig.json

Environment Build

sh
npm install prisma --save-dev
sh
npm install @prisma/client
sh
DATABASE_URL="file:./dev.db"

schema.prisma作成

sh
npx prisma init --datasource-provider sqlite

Migrate

sh
npx prisma migrate dev --name init
ts
import { PrismaClient } from '@prisma/client'

const prisma = new PrismaClient()

const deleteUsers = async () => {
  await prisma.user.deleteMany()
}

deleteUsers()

const createUsers = async () => {
  await prisma.user.createMany({
    data: [
      {
        id: 1,
        name: 'prisma',
        email: 'prisma@email.com',
      },
      {
        id: 2,
        name: 'drizzle',
        email: 'drizzle@email.com',
      },
      {
        id: 3,
        name: 'typeorm',
        email: 'typeorm@email.com',
      },
    ],
  })
}

const main = async () => {
  await createUsers()
  const users = await prisma.user.findMany()
  console.log(users)
}

main()
  .catch((e) => {
    console.error(e)
    process.exit(1)
  })
  .finally(async () => {
    await prisma.$disconnect()
  })

Execution

[
  { id: 1, email: 'prisma@email.com', name: 'prisma' },
  { id: 2, email: 'drizzle@email.com', name: 'drizzle' },
  { id: 3, email: 'typeorm@email.com', name: 'typeorm' }
]

Mermaid

sh
npm install prisma-erd-generator --save-dev
prisma
generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "sqlite"
  url      = env("DATABASE_URL")
}

generator erd {
  provider = "prisma-erd-generator"
  output = "er.md"
}

model User {
  id    Int     @id @default(autoincrement())
  email String  @unique
  name  String
}
mmd
erDiagram

  "User" {
    Int id "🗝️"
    String email 
    String name 
    }

Generate

sh
npx prisma generate

Other Example

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

datasource db {
  provider = "sqlite"
  url      = env("DATABASE_URL")
}

generator erd {
  provider = "prisma-erd-generator"
  output = "er.md"
}

model User {
  id    Int     @id @default(autoincrement())
  email String  @unique
  name  String
  posts Post[]
}

model Post {
  id        Int    @id @default(autoincrement())
  title     String
  content   String
  authorId  Int
  author    User   @relation(fields: [authorId], references: [id])
}
mmd
erDiagram

  "User" {
    Int id "🗝️"
    String email 
    String name 
    }
  

  "Post" {
    Int id "🗝️"
    String title 
    String content 
    }
  
    "User" o{--}o "Post" : "posts"
    "Post" o|--|| "User" : "author"

PlantUML

sh
npm install prisma-generator-plantuml-erd --save-dev
prisma
generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "sqlite"
  url      = env("DATABASE_URL")
}

generator erd_plantuml {
  provider   = "prisma-generator-plantuml-erd"
  output = "erd.puml"
  showUniqueKeyLabel = true
  isShowForeignKeyOnRelation = true
}

model User {
  id    Int     @id @default(autoincrement())
  email String  @unique
  name  String
  posts Post[]
}

model Post {
  id        Int    @id @default(autoincrement())
  title     String
  content   String
  authorId  Int
  author    User   @relation(fields: [authorId], references: [id])
}
@startuml erd
skinparam linetype ortho
entity "User" as User {
+ id [PK] : Int 
--
  * email : [UK] String
  * name : String
}

entity "Post" as Post {
+ id [PK] : Int 
--
  * title : String
  * content : String
  # authorId : [FK] User
}

' Relations
Post }o--|| User: authorId
' ManyToMany Relations
' enum relations
@enduml

Generate

sh
npm install prisma-erd-generator --save-dev
erd

Md

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

datasource db {
  provider = "sqlite"
  url      = env("DATABASE_URL")
}

generator erd_plantuml {
  provider   = "prisma-generator-plantuml-erd"
  exportPerTables      = true
  showUniqueKeyLabel = true
  isShowForeignKeyOnRelation = true
  markdownOutput       = "./example-tables.md"
  markdownIncludeERD      = true
}

model User {
  id    Int     @id @default(autoincrement())
  email String  @unique
  name  String
  posts Post[]
}

model Post {
  id        Int    @id @default(autoincrement())
  title     String
  content   String
  authorId  Int
  author    User   @relation(fields: [authorId], references: [id])
}

Generate

sh
npm install prisma-erd-generator --save-dev
Generated Md

Tables

ER diagram

@startuml erd
skinparam linetype ortho
entity "User" as User {
+ id [PK] : Int 
--
  * email : [UK] String
  * name : String
}

entity "Post" as Post {
+ id [PK] : Int 
--
  * title : String
  * content : String
  # authorId : [FK] User
}

' Relations
Post }o--|| User: authorId
' ManyToMany Relations
' enum relations
@enduml

User

Description

Columns

NameTypeDefaultNullableUniqueChildrenParentComment
idIntautoincrementfalsetruePost
emailStringfalsetrue
nameStringfalsefalse

ER diagram

@startuml User
skinparam linetype ortho
entity "User" as User {
+ id [PK] : Int 
--
  * email : [UK] String
  * name : String
}

entity "Post" as Post {
+ id [PK] : Int 
--
  * title : String
  * content : String
  # authorId : [FK] User
}

' Relations
Post }o--|| User: authorId
' ManyToMany Relations
' enum relations
@enduml

Post

Description

Columns

NameTypeDefaultNullableUniqueChildrenParentComment
idIntautoincrementfalsetrue
titleStringfalsefalse
contentStringfalsefalse
authorIdIntfalsefalseUser

ER diagram

@startuml Post
skinparam linetype ortho
entity "User" as User {
+ id [PK] : Int 
--
  * email : [UK] String
  * name : String
}

entity "Post" as Post {
+ id [PK] : Int 
--
  * title : String
  * content : String
  # authorId : [FK] User
}

' Relations
Post }o--|| User: authorId
' ManyToMany Relations
' enum relations
@enduml

Options

exportPerTables

 各テーブルが出力される。デフォルト値はfalse

showUniqueKeyLabel

ER図上で一意のキーとしてもラベル付けされる[UK]。デフォルト値はfalse

lineType

  • ortho
  • polyline
  • unset

デフォルト値はortho

isLeftToRightDirection

trueにすると、PlantUMLleft to right direction指定される。

lineLength

 線の長さを変更できる。デフォルト値は--

Prisma Markdown

sh
npm install prisma-markdown --save-dev
prisma
generator markdown {
  provider = "prisma-markdown"
  output   = "./ERD.md"
  title    = "Prisma Markdown"
}

Generate

sh
npx prisma generate
Generated Md

Prisma Markdown

Generated by prisma-markdown

default

User

Properties

  • id:
  • email:
  • name:

Post

Properties

  • id:
  • title:
  • content:
  • authorId: