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
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
Name | Type | Default | Nullable | Unique | Children | Parent | Comment |
---|---|---|---|---|---|---|---|
id | Int | autoincrement | false | true | Post | ||
String | false | true | |||||
name | String | false | false |
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
Name | Type | Default | Nullable | Unique | Children | Parent | Comment |
---|---|---|---|---|---|---|---|
id | Int | autoincrement | false | true | |||
title | String | false | false | ||||
content | String | false | false | ||||
authorId | Int | false | false | User |
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
にすると、PlantUML
がleft 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