78 lines
2.1 KiB
Markdown
78 lines
2.1 KiB
Markdown
# 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`
|