diff --git a/source-inventory/DB_SCHEMA.md b/source-inventory/DB_SCHEMA.md new file mode 100644 index 0000000..a48219d --- /dev/null +++ b/source-inventory/DB_SCHEMA.md @@ -0,0 +1,78 @@ +# Database Schema + +## Entity: User + +### Table Definition + +```sql +CREATE TABLE users ( + id BIGINT AUTO_INCREMENT PRIMARY KEY, + username VARCHAR(50) NOT NULL UNIQUE, + email VARCHAR(100) NOT NULL UNIQUE, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +); +``` + +### Column Details + +| Column | Type | Constraints | Description | +|--------|------|-------------|-------------| +| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | Unique identifier | +| username | VARCHAR(50) | NOT NULL, UNIQUE | User's unique username | +| email | VARCHAR(100) | NOT NULL, UNIQUE | User's email address | +| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | Record creation time | +| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE | Last update time | + +### Indexes + +| Index Name | Column | Type | Description | +|------------|--------|------|-------------| +| idx_username | username | UNIQUE | Fast username lookup | +| idx_email | email | UNIQUE | Fast email lookup | + +### Entity Relationships + +``` +User (standalone entity, no foreign keys) +``` + +### JPA Entity Mapping + +```java +@Entity +@Table(name = "users") +public class User { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(nullable = false, unique = true, length = 50) + private String username; + + @Column(nullable = false, unique = true, length = 100) + private String email; + + @Column(name = "created_at", updatable = false) + private LocalDateTime createdAt; + + @Column(name = "updated_at") + private LocalDateTime updatedAt; +} +``` + +### Database Support + +| Environment | Database | Driver | +|-------------|----------|--------| +| Development | H2 (In-Memory) | org.h2.Driver | +| Test | H2 (In-Memory) | org.h2.Driver | +| Production | MySQL 8.x | com.mysql.cj.jdbc.Driver | +| Production | PostgreSQL 15+ | org.postgresql.Driver | + +### Migration Strategy + +- **Development**: Auto DDL (Hibernate) +- **Production**: Flyway Migration Scripts + - Location: `src/main/resources/db/migration/` + - Naming: `V{version}__{description}.sql`