08. Implement database tables
Create Table via Prisma schema
เรารู้แล้วว่า Business ต้องการใช้ Data หน้าตาแบบไหน
ส่วนใหญ่แล้ว database ก็จะใช้ data หน้าตาแบบเดียวกันนั้นแหละ
เราจะมาสร้าง table ให้ตรงกัน ด้วย prisma schema
prisma/schema.prisma
generator client { provider = "prisma-client-js"}
datasource db { provider = "postgresql" url = env("DATABASE_URL")}
model Employee { id Int @id @default(autoincrement()) name String role Role @default(Junior_Developer) department Department overtimes Overtime[] createdAt DateTime @default(now()) updatedAt DateTime @updatedAt deletedAt DateTime?
@@index([role, department]) @@index([department])}
model Overtime { id Int @id @default(autoincrement()) date DateTime hoursWorked Float reason String employee Employee @relation(fields: [employeeId], references: [id], onDelete: Cascade) employeeId Int createdAt DateTime @default(now()) updatedAt DateTime @updatedAt deletedAt DateTime?
@@index([date]) @@index([employeeId])}
enum Role { Junior_Developer Senior_Developer Lead C_Level}
enum Department { IT Accounting HR Manager}
จาก prisma schema ด้านบน เราใส่ @@index
เพื่อทำ indexing ด้วย ตอน query จะได้เร็วๆ
จะเห็นว่าเรามี column deletedAt
ด้วย ซึ่ง column นี้จะเก็บวันที่ และเป็น null ได้ ตรงนี้เราเอาไว้ทำ soft delete นั้นเอง
ถ้ามีวันที่เราจะถือว่า row นั้นถูกลบ แต่เราแค่ไม่ได้ลบจริงๆ ฉนั้นตอน query ต้องดูด้วยว่า deleteAt = null
นะ
Create table in local Database
prisma มีคำสั่งที่จะแปลง prisma schema ให้ไปสร้าง table บน Database ได้เลย
คำสั่งนี้เราใส่ไว้ใน package.json script แล้ว
pnpm prisma:push
Create SQL for migration
prisma สามารถสร้างไฟล์ sql จาก prisma schema ได้ ด้วยคำสั่ง
pnpm prisma:migrate
จากนั้นจะได้ folder prisma/migrations
เพิ่มมา ในนี้แหละจะมีไฟล์ sql ที่เราได้จาก prisma schema
พอแก้ไข database ก็ให้สั่ง migrate เพื่อสร้าง sql อีกรอบนึงได้
แต่ถ้า database schema ยังไม่นิ่ง ก็ยังไม่ต้องสั่ง migrate ก็ได้ ให้ใช้ prisma db push
แทน
หรืออาจจะยังไม่สั่ง migrate จนกว่าจะเอา app ไปไว้บน server