with one click
database-schema-design
Design database schema for the project
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
Design database schema for the project
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
Use when creating pages under src/app/(site)/(authorized)/admin/. Covers list/detail/edit/create page patterns with DataTable/DataView/DataForm, repositories under src/repositories/, request schemas under src/requests/admin/, and AdminPageHeader breadcrumbs.
Use when modifying Better Auth + Prisma authentication: src/libraries/auth.ts, src/libraries/auth-client.ts, src/proxy.ts, src/services/auth_service.ts, auth-related actions.ts, or prisma/schema.prisma auth models (User/Session/Account/Verification). Covers session helpers, URL/secret env resolution, DB TLS, and PUBLIC_PATHS.
Use when creating or modifying files under src/repositories/, src/models/, or src/requests/. Covers BaseRepository inheritance (Prisma/API/Local/Airtable/Dify), Zod schema placement, and separation between repository and schema files.
Use when changing this template's mail delivery backend, reviewing email env setup, switching between `ses` and `smtp`, or adding a new provider such as Resend, SendGrid, Postmark, or Mailgun. Covers EMAIL_PROVIDER routing, EMAIL_FROM priority, dynamic import for Node-only SDKs, and test coverage for both email.test.ts and Better Auth callback smoke.
Use when adding or changing translations in messages/ja.json or messages/en.json, using getTranslations/useTranslations, or updating next-intl configuration under src/i18n/. Covers message key hierarchy, Server/Client Component APIs, dynamic and rich-text patterns, and JSON duplicate-key pitfalls.
Use when adding or modifying pages under src/app, or components under src/components (atoms/molecules/organisms) in this Next.js App Router project. Covers Server/Client Component boundary, Atomic Design placement, Server Actions in actions.ts, URL-based state management, sidebar active-state, and shadcn-only atoms rule.
| name | database-schema-design |
| description | Design database schema for the project |
ããã¯ãRDBã®ããŒã¿ã¹ããŒããèšèšããéã«ãå®ãã¹ãã«ãŒã«ãèšãããã®ã§ããã
ãã®ãããªã«ãŒã«ãèšããçç±ã¯ãã«ãŒã«ã®çµ±äžã«ãã£ãŠã¡ã³ããã³ã¹ããããã§ããããããšããã ãã§ãªããDB Schemaãã¶ã€ã³ã®éã«ãè¿·ã£ãããå²åŠã®éãããæãããããããšããªãããããã§ããã
ãããã£ãŠãããã«æžãããŠããã«ãŒã«ããèªåã®å²åŠãšéã£ãŠããããšæããéçºè ãããã¯ãã§ããããããããã®ãããžã§ã¯ããšããŠèšèšãéçºãããã®ã«é¢ããŠã¯ãããã§ç€ºãããã«ãŒã«ã«åã£ãŠèšèšãè¡ãããã«ã
RDB(Relational Database)ãšããŠãPostgreSQLãå©çšããããšãåæãšããã
data ã¯è€æ°åœ¢ã§ãããããããã¥ããããå©çšããªããã©ã€ããªãŒããŒã®ã«ã©ã å㯠id ãšãããuser_id ã®ããã«ããŒãã«åã®åæ°åœ¢ãã€ããæµåãããããããã§ã¯ãã¹ãŠ id ã§çµ±äžããã
ãã©ã€ããªãŒããŒã®åœ¢åŒã§ããããUUID v4 ããã㯠BigIntã®å€ãšããããã©ã€ããªãŒããŒã®åœ¢åŒã¯ããããžã§ã¯ãå šäœã§çµ±äžãããUUID ãšé£ç¶ããæ°å€ã®ã©ã¡ãã䜿ãã¹ããã¯ããããžã§ã¯ãã®æ§æ Œã«ãã£ãŠç°ãªãããIDãã€ãã£ãŠçæé ã«ãœãŒãããå¿ èŠãããããŒãã«ãæãå Žåã«ã¯ BigIntããããã§ãªããã° UUIDãå©çšãããšããã
ãªããæ°å€ã䜿ãå ŽåãInt (32bit) ã§ã¯ãªããBigInt (64bit) ãå©çšãããããã¯ãå°æ¥æ¡ããµããçºçãããªã¹ã¯ãå°ãã§ãæããããã§ããã
ã«ã©ã åã¯Snake Caseã«ãããuser_id ã access_token ãšãã£ã圢åŒã«ãªãã
ã«ã©ã åã¯ããããèŠãã ãã§äœãæ ŒçŽãããŠããã®ããããããæ³åã§ãããã®ãæãŸããããããã£ãŠããªãã¹ãäžè¬çãªåç§°ãçšããããããžã§ã¯ãå ã§åãæå³ã®ã«ã©ã ã¯å¿ ãåãååã«ããããããããããæå€§ééèŠèŠããã
æ¥æã衚ãã«ã©ã ã¯ãcreated_at ã registered_at ã®ããã«ãéå»åœ¢ã®åŸã« _at ã®Prefixãã€ããã
ããŒã¿å㯠BigInt ãå©çšããUnix Timestampã§å€ãæ±ãããã®çç±ã¯ãparseãç°¡åã§ãã¿ã€ã ãŸãŒã³ã«ãã圱é¿ãåãããã»ãšãã©ã®èšèªã®æéãæ±ãã©ã€ãã©ãªã§æšæºã§ãµããŒããããŠããããã§ãããRDBMSã¯DateTimeãæ±ãå°çšã®åãçšæããŠããããã¿ã€ã ãŸãŒã³ã®åãæ±ãã«å·®ç°ãããããŸãã¿ã€ã ãŸãŒã³ã®å€ãããã®DBã®èšå®ïŒãOSã®èšå®ïŒã«äŸåãããããããŒã¿ããªãã£ãäžããæããããããã§ããã
ãã ããã¿ã€ã ãŸãŒã³ã®é¢ä¿ã®ãªãããæ¥ä»ãã®ããŒã¿ã«é¢ããŠã¯ãDateåãå©çšãããããããã®æ
å ±ããæ¬åœã«æ¥ä»ã ãã§å°æ¥ã«æž¡ã£ãŠäºè¶³ããŠããã®ãã¯ãããåå³ããå¿
èŠããããããšãã°ãç»é²æ¥ããä¿åããŠããããã£ãå Žåã§ããå°æ¥æéãå¿
èŠã«ãªããããããªãã®ã§ãUnixTimestamp ã«ããŠãããã»ããè¯ããããããªãã
ããã¹ãã«ã©ã 㯠VARCHAR ã§ã¯ãªããTEXTãå©çšãããããã¯ãPostgreSQLã«ãããŠã¯ã2ã€ã®ã¿ã€ãã®éãã¯ãVARCHAR ãæååã®é·ãããã§ãã¯ããããšã ãã§ããããã以å€ã¯åãã§ããããã§ããã
ãã¹ãŠã®ããŒãã«ã«ã¯ãã¬ã³ãŒãã®äœææ¥æã衚ã created_at ãšãæçµæŽæ°æ¥æã衚ã updated_at ãçšæããäœææãæŽæ°æã«èªåã§ãã®æéãã»ãããããããã«ããã
ãã®2ã€ã®ã«ã©ã ã«é¢ããŠã¯ãæ¥æã衚ããŠããã UnixTimestampã§ã¯ãªããTIMESTAMPåãå©çšããã
ãã®çç±ã¯ããããã®ããŒã¿ããã¬ãŒã ã¯ãŒã¯ã«ãã£ãŠã¯èªåçã«æ±ãããããããã®ä»æ§ã«åãããããã§ããã
ãªãããã®2ã€ã®æ å ±ã¯ãçŽç²ã«ãã®ã³ã°ãšãã©ãã«æã®åé¡åãåãã«å©çšããã«ãšã©ãããµãŒãã¹ãã·ã¹ãã ã®ããžãã¹ããžãã¯äžã«ãããŠããã®å€ã䜿ã£ãŠäœãã倿ããŠã¯ãªããªãã
ããšãã°ãusers ã® created_atãå©çšããŠããŠãŒã¶ãŒã®ç»é²æ¥æã倿ããŠã¯ãªããªãããããŠãŒã¶ãŒã®ç»é²æ¥æãå©çšããå Žåã¯ããã®ä»£ããã«ãregistered_atãšããå¥ã®ã«ã©ã ïŒIntåïŒãçšæããŠå©çšããã
ããã¯ãcreated_atãšupdated_atã®ã«ã©ã ããããŒã¿ã®ç§»è¡ãªã©æå³ããªãã¿ã€ãã³ã°ã§å€æŽãããå¯èœæ§ãããããã§ããã
ãã©ã°ã衚ãã«ã©ã ã¯ãis_ ãhas_ ãªã©ã®Prefixãã€ããããšã§ããããã¯ã£ãããšãã©ã°ã§ãããboolean ã§ããããšããããããã«ãããPrefixãis_ ãªã®ãhas_ãªã®ãããã以å€ãªã®ãã¯ããã©ã°ã®æå³ã«ãã£ãŠé©åãªãã®ãéžæããã
ã«ã©ã ã«æ ŒçŽããããŒã¿ãšããŠãããžãã¯ãã³ããŒã®å©çšã¯çµ¶å¯Ÿã«é¿ããã
ããšãã° orders ãšããããŒãã«ã«ã泚æã®ç¶æ³ã衚ã status ãšããã«ã©ã ããã£ããšããããã®å Žåããã®ã«ã©ã ã®ããŒã¿åãIntã«ããŠã1ã ã£ããæ³šæå®äºã2ã ã£ããé
éåŠçå®äºãã®ãããªèšèšãããããšã¯çµ¶å¯Ÿã«ããŠã¯ãªããªãã
ãªããªãããã®å Žåãããããã®æ°å€ãäœã衚ããŠããããç¥ããªããã°ãå 容ãçè§£ããããšãã§ããªãããã§ããããããŒãã«ã ããèŠãŠãæå³ãããããçè§£ã§ããããšããååã«åããããšã«ãªãã
ãããã£ãŠãstatusã®ã«ã©ã ã¯æåååãšããŠãordered ã delivered ãšãã£ãæååãæ ŒçŽããããã«ããã
ååãšããŠNULLã¯èš±å®¹ããªãèšèšãšãããNULLã蚱容ããå Žåã¯ãNULLã«æå³ãããå Žåã®ã¿ãšãããNULLã«æå³ãããå Žåãšã¯ãNULLã§ããããšã§æç€ºçã«ããã®ã«ã©ã ã®ããŒã¿ãååšããªãããšã衚ãå Žåã§ããã
ãªã©ã§ãããNULLã蚱容ããå Žåã¯ãã³ã¡ã³ãã§ãã®çç±ãèšè¿°ããã
ããžãã¹èŠä»¶çã«æãããªåæå€ãšããŠèšå®å¯èœãªæ å ±ãååšããå Žåã¯ããã®å€ãèšå®ããã
ãã ããåæå€å€ãäžæã§ãæç€ºçã«ã¬ã³ãŒãäœææã«å€ãèšå®ããããšãããžãã¹èŠä»¶äžå¿ é ãªå Žåã¯ãããã©ã«ãå€ãèšå®ããªããããšãã°ãå»çç³»ã®ã·ã¹ãã ã§ãæ£è ã®äœæž©ãèšé²ããããŒãã«ãããå Žåããã®ããŒãã«ã«ã¯ããã©ã«ãå€ãèšå®ãããšãééã£ãæ å ±ãèšé²ãããæããããã®ã§ãèšé²ããªãã
ååãšããŠãããžãã¹äžã®è¿œè·¡å¯èœæ§ïŒãã¬ãŒãµããªãã£ïŒãå¿ èŠãªããŒã¿ã«ã¯è«çåé€ãæ¡çšããããæäœéã«ãšã©ããã
è«çåé€ãè¡ãå Žå㯠deleted_at ãšããã«ã©ã ãçšæãããã®ã«ã©ã ã«åé€ãè¡ãããæ¥æãæ ŒçŽãããNULLã§ããã°åé€ãããŠããªãããšããããã ãããã¬ãŒã ã¯ãŒã¯ã«ãã£ãŠç°ãªãæ¹æ³ãåãããŠããå Žåã¯ãããã«æºããæ§é ãšããã
ããŒãã«å士ã®Relationã衚çŸããå Žåã¯ãå€éšããŒãèšå®ãããããã®ååã¯ãäŸãã° users ããŒãã«ã® id ã«ã©ã ãå¥ã®ããŒãã«ããæå®ããå Žåã«ã¯ user_id ãšããæãã§ãããŒãã«åã®åæ°åœ¢ã«ã«ã©ã åãé£çµããŠè¡šãã
Many to many ã®Relationã衚ãå Žåã¯ãRelation Tableãå®çŸ©ãããããã®å Žåã¯ãäŸãã° users ãš roles ã®å Žåã§ããã°ãuser_roles ã®ããã«ãçæ¹ã®åæ°åœ¢ã«ä»æ¹ã®è€æ°åœ¢ãé£çµãã圢ãšããŠãå
éšã«ã¯ user_id ãš role_id ãå«ãŸããããã«ãããã©ã¡ããåæ°åœ¢ã«ãããã¯ãããŒãã«å士ã®é¢ä¿æ§ãèæ
®ããããéèŠãšæãããããŒã¿ãéžæããã