schema و relationهای PostgreSQL
DEVNU / TECHNOLOGY / PRISMA
Prisma type-safe access میدهد؛ اما طراحی دیتابیس را بهجای ما انجام نمیدهد.
Prisma فاصله بین schema دیتابیس و TypeScript را کم میکند و migration workflow روشنی میدهد. ارزش آن وقتی بیشتر است که تیم همچنان SQL، transaction و query cost را بفهمد و ORM به black box تبدیل نشود.
Prisma در پروژه چه مسئولیتی دارد؟
در backendهای NestJS، Prisma اغلب data access پیشفرض DEVNU برای PostgreSQL است. schema نسخهبندی میشود، client در build تولید میشود و migration پیش از application startup با مسیر مشخص اجرا میشود.
جایی که استفاده از آن باید یک مسئله مشخص را حل کند.
migration نسخهبندیشده
CRUD type-safe
transactionهای application
seed و data migration
backend NestJS و job worker
چه زمانی انتخابش میکنیم
برای CRUDهای domain-driven، پنلهای مدیریتی و سیستمهایی که type safety بین مدل و service ارزش دارد، Prisma سرعت توسعه خوبی میدهد. relation، transaction و migrationهای معمول نیز workflow یکدستی دارند.
چه زمانی انتخابش نمیکنیم
برای query تحلیلی بسیار پیچیده، bulk operation خاص یا قابلیت database-specific ممکن است SQL مستقیم یا adapter مکمل بهتر باشد. مجبورکردن همه queryها به abstraction ORM هدف نیست.
استفاده از ابزار مهم نیست؛ نحوه نگهداری آن مهم است.
- 01constraint واقعی در schema دیتابیس
- 02migration قابل بازبینی در Git
- 03select محدود به داده لازم
- 04N+1 و query count قابل مشاهده
- 05transaction فقط برای atomic boundary
- 06raw SQL وقتی مزیت واقعی دارد
چند سؤال مهمتر از اسم stack هستند.
Prisma یا SQL مستقیم؟
CRUD و queryهای معمول از type safety Prisma سود میبرند. query پیچیدهای که ORM آن را مبهم یا کند میکند میتواند به SQL مستقیم برود.
Migration خودکار در startup؟
در deployment تکinstance میتواند عملی باشد، ولی در معماری scale-out باید lock و ترتیب rollout روشن باشد. migration بخشی از release plan است، نه side effect تصادفی startup.
Repository layer لازم است؟
فقط وقتی domain یا query complexity آن را توجیه کند. wrapper یکبهیک روی همه methodهای Prisma صرفاً کد بیشتری تولید میکند.
پروژههایی که Prisma در stack آنها ثبت شده است.
وبسایت و سامانه مدیریتی SUMY
وبسایت دوزبانه گروه صنعتی SUMY بههمراه API، پایگاهداده و پنل اختصاصی برای مدیریت صفحات، محصولات، برندها و درخواستهای ورودی.
- React
- TypeScript
- NestJS
- PostgreSQL
- Prisma
- Docker
فناوری درون یک خروجی واقعی معنا پیدا میکند.
پرسشهای متداول درباره Prisma
01Prisma جای PostgreSQL است؟+
خیر. Prisma لایه schema/migration/data access است و PostgreSQL همچنان database واقعی و مسئول constraint، transaction و persistence است.
02آیا Prisma برای production قابل اتکاست؟+
بله، به شرط اینکه connection management، migration، query behavior و نسخهها مثل هر dependency production مدیریت شوند.
09 / NEXT STEP
اول مسئله را ببینیم، بعد stack را انتخاب کنیم.
اگر پروژه به این فناوری نیاز داشته باشد، دلیلش باید در معماری، عملکرد، تجربه کاربر یا هزینه نگهداری قابل توضیح باشد.
شرح پروژه