patterns-entity-modeling
Modeling Domain Entities
Overview
Extract and model domain entities from requirements using Domain-Driven Design principles. This skill covers entity identification, attribute definition, relationship modeling, and state machine documentation.
When to Use
- Creating data-model.md from requirements or specifications
- Extracting entities from user stories and functional requirements
- Defining attributes, types, and constraints for entities
- Modeling relationships between entities with cardinality
- Documenting state machines for stateful entities
- Brownfield analysis of existing data models
When NOT to Use
- API contract design - Use
humaninloop:patterns-api-contractsinstead - Database schema migration - This skill is conceptual, not implementation
- When data model already exists and is complete - Don't duplicate work
- Pure validation rules - Model entities first, then add validation
- Technical architecture decisions - Use
humaninloop:patterns-technical-decisions
Entity Extraction
Identification Heuristics
Look for entities in:
| Source | Pattern | Example |
|---|---|---|
| User stories | "As a [Role]..." | User, Admin, Guest |
| Subjects | "The [Entity] must..." | Task, Order, Product |
| Actions | "...create a [Entity]" | Comment, Message, Report |
| Possessives | "[Entity]'s [attribute]" | User's profile, Order's items |
| Status mentions | "[Entity] status" | TaskStatus, OrderState |
Entity vs. Attribute Decision
IF concept has its own lifecycle → Entity
IF concept only exists within another → Attribute
IF concept connects two entities → Relationship (possibly join entity)
IF concept has just one value → Attribute
Examples:
- "user email" → Attribute of User (just one value)
- "user address" → Could be Entity (if reused) or Attribute (if embedded)
- "order items" → Separate entity (has own lifecycle)
- "task status" → Enum/attribute (limited values)
Brownfield Entity Status
When modeling in brownfield projects:
| Status | Meaning | Action |
|---|---|---|
[NEW] |
Entity doesn't exist | Create full definition |
[EXTENDS EXISTING] |
Adding to existing entity | Document new fields only |
[REUSES EXISTING] |
Using existing as-is | Reference only |
[RENAMED] |
Avoiding collision | Document new name + reason |
Attribute Definition
Standard Attributes
Every entity typically needs:
| Field | Type | Required | Description |
|---|---|---|---|
| id | Identifier | Yes | Primary key |
| createdAt | Timestamp | Yes | Creation time |
| updatedAt | Timestamp | Yes | Last modification |
| deletedAt | Timestamp | No | Soft delete marker |
Attribute Format
| Attribute | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| id | UUID | Yes | auto-generated | Unique identifier |
| email | Email | Yes | - | User's email address |
| name | Text(100) | No | null | Display name |
| role | Enum[admin,member,guest] | Yes | member | Access level |
| isVerified | Boolean | Yes | false | Email verified flag |
Conceptual Types
Use conceptual types (not database-specific):
| Conceptual Type | Description |
|---|---|
Identifier / UUID |
Unique identifier |
Text / Text(N) |
String with optional max length |
Email |
Email format string |
URL |
URL format string |
Integer |
Whole number |
Decimal / Decimal(P,S) |
Decimal with precision |
Boolean |
True/false |
Timestamp |
Date and time |
Date |
Date only |
Enum[values] |
Fixed set of values |
JSON |
Structured data |
Reference(Entity) |
Foreign key reference |
PII Identification
Mark sensitive fields:
| Attribute | Type | Required | PII | Description |
|-----------|------|----------|-----|-------------|
| email | Email | Yes | **PII** | User's email |
| phone | Text(20) | No | **PII** | Phone number |
| ssn | Text(11) | No | **PII-SENSITIVE** | Social security |
Relationship Modeling
Relationships connect entities with defined cardinality: One-to-One (1:1), One-to-Many (1:N), or Many-to-Many (N:M).
See RELATIONSHIP-PATTERNS.md for detailed patterns, join entity examples, and documentation formats.
Relationship Diagram (Text)
## Entity Relationships
User ──1:N──▶ Task (owns) User ──1:N──▶ Session (has) User ◀──N:M──▶ Project (via ProjectMember) Task ──N:1──▶ Project (belongs to)
State Machine Modeling
Entities with status fields need state transition documentation.
See STATE-MACHINES.md for patterns, diagram formats, and common workflows.
When to Model State
Model state machines when:
- Entity has a
statusorstatefield - Requirements mention workflow or lifecycle
- Specific actions change entity state
- Certain actions only valid in certain states
Validation Rules
Constraints and validation rules ensure data integrity.
See VALIDATION-RULES.md for constraint patterns, format validations, and business rule documentation.
data-model.md Structure
# Data Model: {feature_id}
> Entity definitions and relationships for the feature.
> Generated by Domain Architect.
---
## Summary
| Entity | Attributes | Relationships | Status |
|--------|------------|---------------|--------|
| User | 8 | 3 | [EXTENDS EXISTING] |
| Session | 5 | 1 | [NEW] |
| ...
---
## Entity: User [EXTENDS EXISTING]
> Existing entity extended with authentication fields.
### Attributes
| Attribute | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| passwordHash | Text | Yes | - | Hashed password |
| lastLoginAt | Timestamp | No | null | Last login time |
### Existing Attributes (Not Modified)
| Attribute | Type | Description |
|-----------|------|-------------|
| id | UUID | Existing primary key |
| email | Email | Existing email field |
---
## Entity: Session [NEW]
> User authentication session.
### Attributes
| Attribute | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| id | UUID | Yes | auto | Session identifier |
| userId | Reference(User) | Yes | - | Owning user |
| token | Text(255) | Yes | - | Session token |
| expiresAt | Timestamp | Yes | - | Expiration time |
| createdAt | Timestamp | Yes | auto | Creation time |
### Relationships
| Relationship | Type | Target | Description |
|--------------|------|--------|-------------|
| user | N:1 | User | Session belongs to user |
---
## Relationships
[Relationship documentation]
---
## State Machines
[State machine documentation if applicable]
---
## Traceability
| Entity | Source Requirements |
|--------|---------------------|
| User | FR-001, FR-002, US#1 |
| Session | FR-003, US#2 |
Quality Checklist
Before finalizing entity model, verify:
- Every noun from requirements evaluated for entity status
- Each entity has id, createdAt, updatedAt fields
- All attributes have type, required flag, description
- Relationships include cardinality and direction
- PII fields marked and documented
- State machines documented for stateful entities
- Brownfield status indicated for each entity
- Traceability to requirements documented
Common Mistakes
Missing Entities
❌ Skipping entities mentioned in requirements ("we'll add that later") ✅ Evaluate every noun from requirements for entity status
Anemic Entities
❌ Entity with only id field and no attributes
✅ Every entity needs meaningful attributes that describe its purpose
Implementation Types
❌ Using VARCHAR(255), INT(11), BIGINT in data model
✅ Use conceptual types: Text(100), Integer, Identifier
Undefined Relationships
❌ Reference attributes without relationship documentation
✅ Every Reference(Entity) needs cardinality and relationship description
Hidden State Machines
❌ Status/state fields without transition documentation ✅ Every status field needs state machine diagram and valid transitions
Unmarked PII
❌ Email, phone, address fields without PII markers
✅ Always mark sensitive data with **PII** or **PII-SENSITIVE**
Orphan Entities
❌ Entities with no relationships to other entities ✅ Every entity connects to at least one other entity (or is explicitly standalone)
More from deepeshbodh/human-in-loop
analysis-screenshot
This skill MUST be invoked when the user says "analyze screenshot", "extract design tokens", "pull colors from screenshot", "component inventory", "break down this UI", or "design extraction". SHOULD also invoke when user mentions "screenshot", "color palette", "typography", "spacing", or "component catalog".
14patterns-technical-decisions
This skill MUST be invoked when the user says "evaluate alternatives", "make technology choice", "document decision", "technology choice", "trade-offs", "decision record", "rationale", or "why we chose". SHOULD also invoke when user mentions "alternatives" or "NEEDS CLARIFICATION".
6strategy-core
Universal workflow patterns (validation, gap classification, pass evolution, halt escalation) consumed by the State Analyst to inform Supervisor briefings.
6using-git-worktrees
This skill MUST be invoked when the user says "create worktree", "isolated workspace", "parallel branch work", "git worktree", "feature isolation", or "branch workspace". SHOULD also invoke when starting feature work that needs isolation from current workspace.
6patterns-interface-design
This skill MUST be invoked when the user says "interface design", "UI design", "component design", "visual design", "styling", "dark mode", "spacing", "typography hierarchy", or "surface elevation". SHOULD also invoke when user mentions "frontend aesthetics" or "UI components".
6analysis-codebase
This skill MUST be invoked when the user says "analyze codebase", "scan project", "detect tech stack", "codebase analysis", "collision risk", or "brownfield". SHOULD also invoke when user mentions "existing code" or "project context".
6