@wipal/agent-team 1.0.4 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/.claude/commands/skills/discover.md +127 -0
  2. package/.claude/commands/skills/install.md +225 -0
  3. package/.claude/commands/skills/review.md +234 -0
  4. package/.claude/commands/utils/learn.md +142 -0
  5. package/.claude/commands/utils/retrospect.md +62 -0
  6. package/.claude/commands/utils/switch.md +113 -0
  7. package/.claude/commands/utils/sync.md +183 -0
  8. package/.claude/rules/common/general-rules.md +6 -0
  9. package/.claude/rules/role-rules/dev-be-rules.md +241 -0
  10. package/.claude/rules/role-rules/dev-fe-rules.md +76 -0
  11. package/.claude/skills/SKILL-INDEX.md +24 -5
  12. package/.claude/skills/core/knowledge-graph/SKILL.md +214 -0
  13. package/.claude/skills/core/sequential-thinking/SKILL.md +112 -0
  14. package/.claude/skills/core/sequential-thinking/references/advanced.md +122 -0
  15. package/.claude/skills/core/sequential-thinking/references/examples.md +274 -0
  16. package/.claude/skills/domain/architecture/c4-architecture/SKILL.md +314 -0
  17. package/.claude/skills/domain/architecture/c4-architecture/references/advanced-patterns.md +552 -0
  18. package/.claude/skills/domain/architecture/c4-architecture/references/c4-syntax.md +492 -0
  19. package/.claude/skills/domain/architecture/c4-architecture/references/common-mistakes.md +437 -0
  20. package/.claude/skills/domain/architecture/mermaid-diagrams/SKILL.md +238 -0
  21. package/.claude/skills/domain/architecture/mermaid-diagrams/references/advanced-features.md +556 -0
  22. package/.claude/skills/domain/architecture/mermaid-diagrams/references/architecture-diagrams.md +192 -0
  23. package/.claude/skills/domain/architecture/mermaid-diagrams/references/c4-diagrams.md +410 -0
  24. package/.claude/skills/domain/architecture/mermaid-diagrams/references/class-diagrams.md +361 -0
  25. package/.claude/skills/domain/architecture/mermaid-diagrams/references/erd-diagrams.md +510 -0
  26. package/.claude/skills/domain/architecture/mermaid-diagrams/references/flowcharts.md +450 -0
  27. package/.claude/skills/domain/architecture/mermaid-diagrams/references/sequence-diagrams.md +394 -0
  28. package/.claude/skills/domain/backend/testing-be/SKILL.md +121 -17
  29. package/.claude/skills/domain/design/design-system/SKILL.md +169 -0
  30. package/.claude/skills/domain/design/html-css-output/SKILL.md +253 -0
  31. package/.claude/skills/domain/design/mockup-creation/SKILL.md +230 -0
  32. package/.claude/skills/domain/design/responsive-design/SKILL.md +207 -0
  33. package/.claude/skills/domain/design/ui-design/SKILL.md +124 -0
  34. package/.claude/skills/domain/frontend/testing-fe/SKILL.md +143 -38
  35. package/.claude/skills/domain/frontend/ui-ux-pro-max/README.md +45 -0
  36. package/.claude/skills/domain/frontend/ui-ux-pro-max/SKILL.md +404 -0
  37. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/charts.csv +26 -0
  38. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/colors.csv +97 -0
  39. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/icons.csv +101 -0
  40. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/landing.csv +31 -0
  41. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/products.csv +97 -0
  42. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/react-performance.csv +45 -0
  43. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/astro.csv +54 -0
  44. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  45. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
  46. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
  47. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  48. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
  49. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
  50. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  51. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/react.csv +54 -0
  52. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
  53. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  54. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  55. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/vue.csv +50 -0
  56. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/styles.csv +68 -0
  57. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/typography.csv +58 -0
  58. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
  59. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  60. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/web-interface.csv +31 -0
  61. package/.claude/skills/domain/frontend/ui-ux-pro-max/scripts/core.py +253 -0
  62. package/.claude/skills/domain/frontend/ui-ux-pro-max/scripts/design_system.py +1067 -0
  63. package/.claude/skills/domain/frontend/ui-ux-pro-max/scripts/search.py +114 -0
  64. package/.claude/skills/domain/product/requirements-clarity/SKILL.md +340 -0
  65. package/.claude/skills/skills-registry.yaml +103 -8
  66. package/README.md +107 -33
  67. package/README.npm.md +252 -0
  68. package/TUTORIAL.md +256 -0
  69. package/bin/agent-team.js +26 -7
  70. package/config/roles.yaml +107 -0
  71. package/docs/01-architecture.md +699 -0
  72. package/docs/02-setup-guide.md +634 -0
  73. package/docs/03-skills-guide.md +628 -0
  74. package/docs/04-workflows.md +792 -0
  75. package/docs/05-model-strategy.md +550 -0
  76. package/docs/06-extend-guide.md +1226 -0
  77. package/docs/07-quick-reference.md +578 -0
  78. package/docs/08-skills-discovery.md +342 -0
  79. package/docs/README.md +134 -0
  80. package/docs/rqm.md +560 -0
  81. package/package.json +9 -3
  82. package/scripts/postinstall.js +46 -0
  83. package/src/commands/add.js +131 -67
  84. package/src/commands/init.js +419 -9
  85. package/src/commands/list.js +20 -16
  86. package/src/commands/projects.js +127 -0
  87. package/src/commands/setup-hooks.js +261 -0
  88. package/src/index.js +0 -1
  89. package/src/utils/file-utils.js +147 -50
  90. package/src/utils/global-registry.js +224 -0
  91. package/templates/CLAUDE.md.tmpl +128 -20
  92. package/templates/MEMORY.md.tmpl +119 -0
  93. package/templates/agent.md.tmpl +205 -0
  94. package/templates/code/nestjs-controller.ts.tmpl +49 -0
  95. package/templates/code/nestjs-dto.ts.tmpl +63 -0
  96. package/templates/code/nestjs-service.ts.tmpl +45 -0
  97. package/templates/code/react-component.tsx.tmpl +24 -0
  98. package/templates/code/react-hook.ts.tmpl +54 -0
  99. package/templates/code/test.spec.ts.tmpl +50 -0
  100. package/templates/code/vue-component.vue.tmpl +49 -0
  101. package/templates/code/vue-composable.ts.tmpl +54 -0
  102. package/templates/knowledge.md.tmpl +152 -17
  103. package/templates/meeting-notes.md.tmpl +110 -0
  104. package/templates/memory/hooks.memory.json +50 -0
  105. package/templates/memory/settings.memory.json +16 -0
  106. package/templates/reports/bug-report.md.tmpl +164 -0
  107. package/templates/reports/code-review.md.tmpl +201 -0
  108. package/templates/reports/sprint-report.md.tmpl +218 -0
  109. package/templates/roles/ba.md +53 -0
  110. package/templates/roles/designer.md +82 -0
  111. package/templates/roles/dev-be.md +49 -0
  112. package/templates/roles/dev-fe.md +49 -0
  113. package/templates/roles/devops.md +53 -0
  114. package/templates/roles/pm.md +49 -0
  115. package/templates/roles/qa.md +53 -0
  116. package/templates/roles/sa.md +49 -0
  117. package/templates/roles/tech-lead.md +132 -0
  118. package/templates/skills/memory/memory-status.md +78 -0
  119. package/templates/skills/memory/recall.md +160 -0
  120. package/templates/skills/memory/reflect.md +168 -0
  121. package/templates/skills/memory/remember.md +105 -0
  122. package/templates/tasks/lessons.md.tmpl +77 -0
  123. package/templates/tasks/todo.md.tmpl +53 -0
  124. package/src/commands/switch.js +0 -53
@@ -0,0 +1,510 @@
1
+ # Entity Relationship Diagrams (ERD)
2
+
3
+ ERDs model database schemas, showing tables (entities), their columns (attributes), and relationships between tables. Essential for database design and documentation.
4
+
5
+ ## Basic Syntax
6
+
7
+ ```mermaid
8
+ erDiagram
9
+ CUSTOMER ||--o{ ORDER : places
10
+ ```
11
+
12
+ ## Defining Entities
13
+
14
+ ```mermaid
15
+ erDiagram
16
+ CUSTOMER
17
+ ORDER
18
+ PRODUCT
19
+ ```
20
+
21
+ ## Entity Attributes
22
+
23
+ Define columns with type and constraints:
24
+
25
+ ```mermaid
26
+ erDiagram
27
+ CUSTOMER {
28
+ int id PK
29
+ string email UK
30
+ string name
31
+ string phone
32
+ datetime created_at
33
+ }
34
+ ```
35
+
36
+ **Attribute format:** `type name constraints`
37
+
38
+ **Common constraints:**
39
+ - `PK` - Primary Key
40
+ - `FK` - Foreign Key
41
+ - `UK` - Unique Key
42
+ - `NN` - Not Null
43
+
44
+ ## Relationships
45
+
46
+ ### Relationship Symbols
47
+
48
+ **Cardinality indicators:**
49
+ - `||` - Exactly one
50
+ - `|o` - Zero or one
51
+ - `}{` - One or many
52
+ - `}o` - Zero or many
53
+
54
+ **Relationship line:**
55
+ - `--` - Non-identifying relationship
56
+ - `..` - Identifying relationship (rare in practice)
57
+
58
+ ### Common Relationships
59
+
60
+ ```mermaid
61
+ erDiagram
62
+ %% One-to-One
63
+ USER ||--|| PROFILE : has
64
+
65
+ %% One-to-Many
66
+ CUSTOMER ||--o{ ORDER : places
67
+
68
+ %% Many-to-Many (with junction table)
69
+ STUDENT }o--o{ COURSE : enrolls
70
+ STUDENT ||--o{ ENROLLMENT : has
71
+ COURSE ||--o{ ENROLLMENT : includes
72
+
73
+ %% Optional Relationships
74
+ EMPLOYEE |o--o{ DEPARTMENT : manages
75
+ ```
76
+
77
+ ### Relationship with Labels
78
+
79
+ ```mermaid
80
+ erDiagram
81
+ AUTHOR ||--o{ BOOK : writes
82
+ BOOK }o--|| PUBLISHER : "published by"
83
+ READER }o--o{ BOOK : reads
84
+ ```
85
+
86
+ ## Data Types
87
+
88
+ Use standard database types:
89
+ - `int`, `bigint`, `smallint`
90
+ - `varchar`, `text`, `char`
91
+ - `decimal`, `float`, `double`
92
+ - `boolean`, `bool`
93
+ - `date`, `datetime`, `timestamp`
94
+ - `json`, `jsonb`
95
+ - `uuid`
96
+ - `blob`, `bytea`
97
+
98
+ ## Comprehensive Example: E-Commerce Database
99
+
100
+ ```mermaid
101
+ erDiagram
102
+ CUSTOMER ||--o{ ORDER : places
103
+ CUSTOMER ||--o{ REVIEW : writes
104
+ CUSTOMER ||--o{ ADDRESS : has
105
+ ORDER ||--|{ LINE_ITEM : contains
106
+ PRODUCT ||--o{ LINE_ITEM : "ordered in"
107
+ PRODUCT }o--|| CATEGORY : "belongs to"
108
+ PRODUCT ||--o{ REVIEW : receives
109
+ PRODUCT ||--o{ INVENTORY : tracks
110
+ ORDER ||--|| PAYMENT : "paid by"
111
+ ORDER ||--o| SHIPMENT : "shipped via"
112
+
113
+ CUSTOMER {
114
+ uuid id PK
115
+ varchar email UK "NOT NULL"
116
+ varchar name "NOT NULL"
117
+ varchar phone
118
+ timestamp created_at "DEFAULT NOW()"
119
+ timestamp updated_at
120
+ }
121
+
122
+ ADDRESS {
123
+ uuid id PK
124
+ uuid customer_id FK
125
+ varchar street "NOT NULL"
126
+ varchar city "NOT NULL"
127
+ varchar state
128
+ varchar postal_code
129
+ varchar country "NOT NULL"
130
+ boolean is_default
131
+ }
132
+
133
+ ORDER {
134
+ uuid id PK
135
+ uuid customer_id FK "NOT NULL"
136
+ decimal total "NOT NULL"
137
+ varchar status "NOT NULL"
138
+ timestamp order_date "DEFAULT NOW()"
139
+ timestamp shipped_date
140
+ timestamp delivered_date
141
+ }
142
+
143
+ LINE_ITEM {
144
+ uuid id PK
145
+ uuid order_id FK "NOT NULL"
146
+ uuid product_id FK "NOT NULL"
147
+ int quantity "NOT NULL"
148
+ decimal price_per_unit "NOT NULL"
149
+ decimal subtotal "COMPUTED"
150
+ }
151
+
152
+ PRODUCT {
153
+ uuid id PK
154
+ varchar sku UK "NOT NULL"
155
+ varchar name "NOT NULL"
156
+ text description
157
+ decimal price "NOT NULL"
158
+ uuid category_id FK
159
+ boolean is_active "DEFAULT TRUE"
160
+ timestamp created_at "DEFAULT NOW()"
161
+ }
162
+
163
+ CATEGORY {
164
+ uuid id PK
165
+ varchar name UK "NOT NULL"
166
+ text description
167
+ uuid parent_category_id FK
168
+ }
169
+
170
+ INVENTORY {
171
+ uuid id PK
172
+ uuid product_id FK "NOT NULL"
173
+ int quantity "DEFAULT 0"
174
+ varchar warehouse_location
175
+ timestamp last_updated
176
+ }
177
+
178
+ REVIEW {
179
+ uuid id PK
180
+ uuid customer_id FK "NOT NULL"
181
+ uuid product_id FK "NOT NULL"
182
+ int rating "CHECK 1-5"
183
+ text comment
184
+ timestamp created_at "DEFAULT NOW()"
185
+ }
186
+
187
+ PAYMENT {
188
+ uuid id PK
189
+ uuid order_id FK "NOT NULL"
190
+ varchar payment_method "NOT NULL"
191
+ decimal amount "NOT NULL"
192
+ varchar status "NOT NULL"
193
+ varchar transaction_id UK
194
+ timestamp processed_at
195
+ }
196
+
197
+ SHIPMENT {
198
+ uuid id PK
199
+ uuid order_id FK "NOT NULL"
200
+ varchar carrier
201
+ varchar tracking_number
202
+ timestamp shipped_date
203
+ timestamp estimated_delivery
204
+ timestamp actual_delivery
205
+ }
206
+ ```
207
+
208
+ ## Blog Platform Schema
209
+
210
+ ```mermaid
211
+ erDiagram
212
+ USER ||--o{ POST : creates
213
+ USER ||--o{ COMMENT : writes
214
+ POST ||--o{ COMMENT : receives
215
+ POST }o--o{ TAG : tagged_with
216
+ POST ||--o{ POST_TAG : has
217
+ TAG ||--o{ POST_TAG : applied_to
218
+ POST }o--|| CATEGORY : "belongs to"
219
+ USER ||--o{ LIKE : gives
220
+ POST ||--o{ LIKE : receives
221
+ COMMENT ||--o{ LIKE : receives
222
+
223
+ USER {
224
+ bigint id PK "AUTO_INCREMENT"
225
+ varchar email UK "NOT NULL"
226
+ varchar username UK "NOT NULL"
227
+ varchar password_hash "NOT NULL"
228
+ varchar display_name
229
+ text bio
230
+ varchar avatar_url
231
+ timestamp created_at "DEFAULT NOW()"
232
+ timestamp last_login
233
+ }
234
+
235
+ POST {
236
+ bigint id PK "AUTO_INCREMENT"
237
+ bigint user_id FK "NOT NULL"
238
+ bigint category_id FK
239
+ varchar title "NOT NULL"
240
+ varchar slug UK "NOT NULL"
241
+ text content "NOT NULL"
242
+ text excerpt
243
+ varchar featured_image_url
244
+ varchar status "NOT NULL DEFAULT 'draft'"
245
+ int view_count "DEFAULT 0"
246
+ timestamp published_at
247
+ timestamp created_at "DEFAULT NOW()"
248
+ timestamp updated_at
249
+ }
250
+
251
+ COMMENT {
252
+ bigint id PK "AUTO_INCREMENT"
253
+ bigint user_id FK "NOT NULL"
254
+ bigint post_id FK "NOT NULL"
255
+ bigint parent_comment_id FK "NULL"
256
+ text content "NOT NULL"
257
+ varchar status "DEFAULT 'pending'"
258
+ timestamp created_at "DEFAULT NOW()"
259
+ }
260
+
261
+ CATEGORY {
262
+ bigint id PK "AUTO_INCREMENT"
263
+ varchar name UK "NOT NULL"
264
+ varchar slug UK "NOT NULL"
265
+ text description
266
+ bigint parent_id FK
267
+ }
268
+
269
+ TAG {
270
+ bigint id PK "AUTO_INCREMENT"
271
+ varchar name UK "NOT NULL"
272
+ varchar slug UK "NOT NULL"
273
+ }
274
+
275
+ POST_TAG {
276
+ bigint post_id FK "NOT NULL"
277
+ bigint tag_id FK "NOT NULL"
278
+ }
279
+
280
+ LIKE {
281
+ bigint id PK "AUTO_INCREMENT"
282
+ bigint user_id FK "NOT NULL"
283
+ varchar likeable_type "NOT NULL"
284
+ bigint likeable_id "NOT NULL"
285
+ timestamp created_at "DEFAULT NOW()"
286
+ }
287
+ ```
288
+
289
+ ## Social Media Schema
290
+
291
+ ```mermaid
292
+ erDiagram
293
+ USER ||--o{ POST : creates
294
+ USER ||--o{ FOLLOW : follows
295
+ USER ||--o{ FOLLOW : "followed by"
296
+ POST ||--o{ LIKE : receives
297
+ POST ||--o{ COMMENT : has
298
+ USER ||--o{ LIKE : gives
299
+ USER ||--o{ COMMENT : makes
300
+ USER ||--o{ NOTIFICATION : receives
301
+ POST ||--o{ POST_MEDIA : contains
302
+ USER }o--o{ GROUP : "member of"
303
+ USER ||--o{ MESSAGE : sends
304
+ USER ||--o{ MESSAGE : receives
305
+
306
+ USER {
307
+ uuid id PK
308
+ varchar username UK "NOT NULL"
309
+ varchar email UK "NOT NULL"
310
+ varchar password_hash "NOT NULL"
311
+ varchar full_name
312
+ text bio
313
+ varchar profile_picture_url
314
+ varchar cover_photo_url
315
+ boolean is_verified "DEFAULT FALSE"
316
+ boolean is_private "DEFAULT FALSE"
317
+ timestamp created_at "DEFAULT NOW()"
318
+ }
319
+
320
+ POST {
321
+ uuid id PK
322
+ uuid user_id FK "NOT NULL"
323
+ text content
324
+ varchar visibility "DEFAULT 'public'"
325
+ int likes_count "DEFAULT 0"
326
+ int comments_count "DEFAULT 0"
327
+ int shares_count "DEFAULT 0"
328
+ timestamp created_at "DEFAULT NOW()"
329
+ timestamp edited_at
330
+ }
331
+
332
+ POST_MEDIA {
333
+ uuid id PK
334
+ uuid post_id FK "NOT NULL"
335
+ varchar media_type "NOT NULL"
336
+ varchar media_url "NOT NULL"
337
+ int display_order
338
+ }
339
+
340
+ FOLLOW {
341
+ uuid id PK
342
+ uuid follower_id FK "NOT NULL"
343
+ uuid following_id FK "NOT NULL"
344
+ timestamp created_at "DEFAULT NOW()"
345
+ }
346
+
347
+ LIKE {
348
+ uuid id PK
349
+ uuid user_id FK "NOT NULL"
350
+ uuid post_id FK "NOT NULL"
351
+ timestamp created_at "DEFAULT NOW()"
352
+ }
353
+
354
+ COMMENT {
355
+ uuid id PK
356
+ uuid user_id FK "NOT NULL"
357
+ uuid post_id FK "NOT NULL"
358
+ uuid parent_comment_id FK
359
+ text content "NOT NULL"
360
+ int likes_count "DEFAULT 0"
361
+ timestamp created_at "DEFAULT NOW()"
362
+ }
363
+
364
+ MESSAGE {
365
+ uuid id PK
366
+ uuid sender_id FK "NOT NULL"
367
+ uuid receiver_id FK "NOT NULL"
368
+ text content "NOT NULL"
369
+ boolean is_read "DEFAULT FALSE"
370
+ timestamp created_at "DEFAULT NOW()"
371
+ timestamp read_at
372
+ }
373
+
374
+ NOTIFICATION {
375
+ uuid id PK
376
+ uuid user_id FK "NOT NULL"
377
+ varchar notification_type "NOT NULL"
378
+ text content "NOT NULL"
379
+ boolean is_read "DEFAULT FALSE"
380
+ varchar related_entity_type
381
+ uuid related_entity_id
382
+ timestamp created_at "DEFAULT NOW()"
383
+ }
384
+
385
+ GROUP {
386
+ uuid id PK
387
+ varchar name "NOT NULL"
388
+ text description
389
+ uuid created_by FK "NOT NULL"
390
+ boolean is_private "DEFAULT FALSE"
391
+ timestamp created_at "DEFAULT NOW()"
392
+ }
393
+ ```
394
+
395
+ ## Best Practices
396
+
397
+ 1. **Name entities in UPPERCASE** - Convention for clarity
398
+ 2. **Use singular names** - `USER` not `USERS`, `ORDER` not `ORDERS`
399
+ 3. **Define all constraints** - Document PKs, FKs, UKs, NOT NULL
400
+ 4. **Show cardinality accurately** - Be precise about one-to-many vs many-to-many
401
+ 5. **Include timestamps** - created_at, updated_at for auditing
402
+ 6. **Document computed columns** - Mark calculated/derived values
403
+ 7. **Add meaningful comments** - Use quotes for constraints and descriptions
404
+ 8. **Consider junction tables** - Explicitly model many-to-many relationships
405
+ 9. **Use appropriate types** - Match database-specific types
406
+ 10. **Show indexes** - Document UK (unique keys) beyond PKs
407
+
408
+ ## Common Patterns
409
+
410
+ ### Self-Referencing (Hierarchical)
411
+ ```mermaid
412
+ erDiagram
413
+ CATEGORY ||--o{ CATEGORY : "parent of"
414
+
415
+ CATEGORY {
416
+ uuid id PK
417
+ varchar name "NOT NULL"
418
+ uuid parent_id FK "NULLABLE"
419
+ }
420
+ ```
421
+
422
+ ### Junction Table (Many-to-Many)
423
+ ```mermaid
424
+ erDiagram
425
+ STUDENT }o--o{ COURSE : enrolls
426
+ STUDENT ||--o{ ENROLLMENT : has
427
+ COURSE ||--o{ ENROLLMENT : includes
428
+
429
+ STUDENT {
430
+ uuid id PK
431
+ varchar name "NOT NULL"
432
+ }
433
+
434
+ ENROLLMENT {
435
+ uuid student_id FK PK
436
+ uuid course_id FK PK
437
+ date enrolled_date
438
+ varchar grade
439
+ }
440
+
441
+ COURSE {
442
+ uuid id PK
443
+ varchar title "NOT NULL"
444
+ }
445
+ ```
446
+
447
+ ### Polymorphic Relationship
448
+ ```mermaid
449
+ erDiagram
450
+ COMMENT {
451
+ uuid id PK
452
+ uuid user_id FK
453
+ varchar commentable_type "NOT NULL"
454
+ uuid commentable_id "NOT NULL"
455
+ text content
456
+ }
457
+
458
+ POST {
459
+ uuid id PK
460
+ varchar title
461
+ }
462
+
463
+ VIDEO {
464
+ uuid id PK
465
+ varchar title
466
+ }
467
+ ```
468
+
469
+ ### Soft Deletes
470
+ ```mermaid
471
+ erDiagram
472
+ USER {
473
+ uuid id PK
474
+ varchar email UK
475
+ varchar name
476
+ timestamp deleted_at "NULLABLE"
477
+ }
478
+ ```
479
+
480
+ ### Audit Trail
481
+ ```mermaid
482
+ erDiagram
483
+ DOCUMENT ||--o{ DOCUMENT_VERSION : has
484
+
485
+ DOCUMENT {
486
+ uuid id PK
487
+ varchar title "NOT NULL"
488
+ int current_version "DEFAULT 1"
489
+ }
490
+
491
+ DOCUMENT_VERSION {
492
+ uuid id PK
493
+ uuid document_id FK "NOT NULL"
494
+ int version_number "NOT NULL"
495
+ text content "NOT NULL"
496
+ uuid modified_by FK
497
+ timestamp created_at "DEFAULT NOW()"
498
+ }
499
+ ```
500
+
501
+ ## Tips for Database Design
502
+
503
+ 1. **Normalize appropriately** - Balance normalization with query performance
504
+ 2. **Use surrogate keys** - UUID or auto-increment integers as PKs
505
+ 3. **Index foreign keys** - Essential for join performance
506
+ 4. **Plan for soft deletes** - Add deleted_at columns instead of hard deletes
507
+ 5. **Version critical data** - Maintain history for important entities
508
+ 6. **Set appropriate defaults** - created_at, status, boolean flags
509
+ 7. **Consider denormalization** - Counts and cached values for performance
510
+ 8. **Use enum/check constraints** - Enforce valid values at database level