J'essaie de créer une base de données pour un système de gestion de salle mais je suis confus quant aux relations et je ne trouve aucune ressource utile sur Internet, pouvez-vous me dire s'il y a un problème avec ce script prisma ? Parce que je veux le contrôler dans expressJs et créer une application basée sur celui-ci
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
}
model Guest {
guestId String @id @default(uuid())
name String
phone String @unique()
address String?
nationality String
Reservation Reservation[] @relation("GuestReservation")
}
model Reservation {
reservationId Int @id @default(autoincrement())
checkIn DateTime
checkOut DateTime
Guest Guest @relation("GuestReservation", fields: [guestId], references: [guestId], onDelete: Cascade)
guestId String
visitors Int
Room Room @relation("RoomReservation", fields: [roomId], references: [roomId], onDelete: Cascade)
type ReservationType
roomId Int
Bill Bill? @relation("BillReservation")
}
enum ReservationType {
Booking
Contract
Booked
Canceled
}
model Room {
roomId Int @id @default(autoincrement())
price Float
type Type
Reservation Reservation[] @relation("RoomReservation")
}
enum Type {
Single
Double
Triple
}
model Bill {
invoiceNo String @id @default(uuid())
Reservation Reservation @relation("BillReservation", fields: [reservationId], references: [reservationId], onDelete: Cascade)
reservationId Int @unique()
roomService Float @default(0)
paymentMode Payment
Service Service[]
}
enum Payment {
Cash
Visa
}
model Service {
serviceId String @id @default(uuid())
type ServiceType
name String
price Float
Bill Bill @relation(fields: [billInvoiceNo], references: [invoiceNo], onDelete: Cascade)
billInvoiceNo String
}
enum ServiceType {
Bar
Laundry
}
J'ai essayé d'en créer une approximation pour chaque entité, mais j'ai fini par obtenir des erreurs de relation, comme des clés étrangères ou quelque chose du genre, ce qui signifiait qu'il y avait quelque chose qui n'allait pas dans ma relation.
Votre schéma est valide, mais je recommande de maintenir la cohérence lors de la définition des identifiants des tables. Certains ID de table sont des types de chaîne et certains ID de table sont des types numériques.
Ce qui suit est un exemple de requête pour créer des entités pour le modèle.
import { PrismaClient, Type, ServiceType, Payment, ReservationType, } from '@prisma/client'; const prisma = new PrismaClient({ log: ['query'], }); async function main() { // Creating a room await prisma.room.create({ data: { price: 100, type: Type.Single, roomId: 1, }, }); // Creating a guest await prisma.guest.create({ data: { name: 'Test', nationality: 'Indian', phone: '1234567890', address: 'Test Address', guestId: '1', }, }); // Creating a service with a bill and a reservation await prisma.service.create({ data: { name: 'test', price: 100, type: ServiceType.Bar, serviceId: '1', Bill: { create: { paymentMode: Payment.Cash, invoiceNo: '1', Reservation: { create: { checkIn: new Date(), checkOut: new Date(), type: ReservationType.Booked, visitors: 1, roomId: 1, guestId: '1', }, }, }, }, }, }); } main() .catch((e) => { throw e; }) .finally(async () => { await prisma.$disconnect(); });Voici la réponse à la requête :