# 数据库设计文档 ## Android 本地数据库(Room) ### User 表 ```kotlin @Entity(tableName = "users") data class User( @PrimaryKey val id: String, val nickname: String, val avatarUrl: String?, val subscriptionType: String, // free, premium val createdAt: Long ) ``` ### Conversation 表 ```kotlin @Entity(tableName = "conversations") data class Conversation( @PrimaryKey val id: String, val userId: String, val startedAt: Long, val endedAt: Long?, val durationSeconds: Int, val summary: String?, val currentTopic: String?, // 当前话题 val conversationStage: String? // CHILDHOOD, EDUCATION, CAREER, FAMILY, BELIEFS, SUMMARY ) ``` ### ConversationSegment 表 ```kotlin @Entity(tableName = "conversation_segments") data class ConversationSegment( @PrimaryKey val id: String, val conversationId: String, val audioPath: String?, val transcriptText: String, val createdAt: Long, val processed: Boolean, val topicCategory: String? // 话题分类 ) ``` ### Chapter 表 ```kotlin @Entity(tableName = "chapters") data class Chapter( @PrimaryKey val id: String, val title: String, val content: String, val orderIndex: Int, val status: String, // draft, completed val updatedAt: Long, val category: String // 章节分类 ) ``` ### Book 表 ```kotlin @Entity(tableName = "books") data class Book( @PrimaryKey val id: String, val userId: String, val title: String, val totalPages: Int, val totalWords: Int, val updatedAt: Long ) ``` ## 后端数据库(SQLAlchemy) ### users 表 - id (String, Primary Key) - openid (String, Unique) - 微信 OpenID - nickname (String) - avatar_url (String, Nullable) - subscription_type (String) - free, premium - created_at (DateTime) ### conversations 表 - id (String, Primary Key) - user_id (String, Foreign Key -> users.id) - started_at (DateTime) - ended_at (DateTime, Nullable) - duration_seconds (Integer) - summary (String, Nullable) - status (String) - active, ended, processing - current_topic (String, Nullable) - conversation_stage (String, Nullable) - childhood, education, career, family, beliefs, summary ### segments 表 - id (String, Primary Key) - conversation_id (String, Foreign Key -> conversations.id) - audio_url (String, Nullable) - transcript_text (Text) - created_at (DateTime) - processed (Boolean, Default False) - topic_category (String, Nullable) - agent_response (Text, Nullable) ### chapters 表 - id (String, Primary Key) - user_id (String, Foreign Key -> users.id) - title (String) - content (Text) - order_index (Integer) - status (String) - draft, completed - images (JSON, Nullable) - 图片 URL 列表 - updated_at (DateTime) - category (String) - 章节分类 ### books 表 - id (String, Primary Key) - user_id (String, Foreign Key -> users.id) - title (String) - total_pages (Integer) - total_words (Integer) - cover_image_url (String, Nullable) - updated_at (DateTime)