機器文件DB ER DiagramCopy MarkdownOpen 本頁由 backend/scripts/generate_er_diagram.py 自動產生,手動編輯將被覆寫。 產生時間:2026-07-06 11:12 資料來源:SQLAlchemy Base.metadata(與 alembic migration 同源),共 31 張 table。 album_contents FK uuid album_id FK uuid content_id PK integer id integer sort_order albums nullable integer age_max nullable integer age_min nullable varchar cover_image_url timestamp_with_time_zone created_at nullable FK uuid created_by nullable text description PK uuid id varchar name nullable date publish_date varchar publish_status varchar slug timestamp_with_time_zone updated_at nullable FK uuid updated_by api_usage_records nullable FK uuid child_profile_id nullable smallint chunk_count nullable FK uuid content_id nullable varchar content_type timestamp_with_time_zone created_at integer duration_ms nullable varchar error_code nullable FK uuid family_id nullable FK uuid generation_job_id PK uuid id bigint input_units nullable varchar model_name varchar operation bigint output_units nullable jsonb request_metadata smallint retry_attempt varchar service_type varchar status characters nullable varchar avatar_image_url varchar character_name timestamp_with_time_zone created_at PK uuid id boolean is_active boolean is_yibi_owned text personality_prompt varchar slug nullable varchar tts_voice_model_id timestamp_with_time_zone updated_at child_profiles nullable varchar avatar_url date birth_date smallint birth_day nullable smallint birth_hour smallint birth_month smallint birth_year timestamp_with_time_zone created_at varchar creation_form nullable timestamp_with_time_zone deleted_at jsonb development_goals jsonb emotions jsonb expert_settings FK uuid family_id jsonb favorite_characters PK uuid id varchar language varchar nickname nullable jsonb personality_prior_vector jsonb personality_tags jsonb selected_values nullable varchar star_sign timestamp_with_time_zone updated_at container_bindings timestamp_with_time_zone bound_at timestamp_with_time_zone created_at PK uuid id FK uuid physical_container_id container_binding_status status nullable timestamp_with_time_zone unbound_at FK uuid virtual_container_id contents nullable integer age_max nullable integer age_min nullable varchar audio_url nullable FK uuid character_id nullable FK uuid child_profile_id varchar content_type nullable varchar contract_number timestamp_with_time_zone created_at nullable FK uuid created_by nullable text description nullable integer duration_seconds nullable FK uuid family_id nullable FK uuid generation_job_id PK uuid id boolean is_active boolean is_approved varchar language nullable jsonb license_info nullable jsonb licensor_contact jsonb metadata integer play_count nullable varchar publisher nullable numeric royalty_rate varchar source_type nullable varchar teaching_goal nullable text text_content varchar title timestamp_with_time_zone updated_at nullable FK uuid updated_by cost_rates timestamp_with_time_zone created_at nullable FK uuid created_by varchar currency timestamp_with_time_zone effective_from PK uuid id varchar rate_type numeric rate_value varchar service_type deletion_audit_log timestamp_with_time_zone created_at varchar event_type FK uuid family_id PK uuid id nullable FK uuid initiated_by_user_id nullable timestamp_with_time_zone scheduled_hard_delete_at timestamp_with_time_zone updated_at device_secrets timestamp_with_time_zone created_at FK varchar device_serial PK uuid id nullable timestamp_with_time_zone revoked_at text secret_encrypted devices nullable timestamp_with_time_zone bound_at timestamp_with_time_zone created_at nullable timestamp_with_time_zone deleted_at nullable timestamp_with_time_zone device_secret_revoked_at varchar device_serial nullable FK uuid family_id nullable varchar firmware_version PK uuid id nullable timestamp_with_time_zone last_event_at nullable timestamp_with_time_zone last_seen_at jsonb metadata varchar status timestamp_with_time_zone updated_at families bigint config_version timestamp_with_time_zone created_at PK uuid id varchar name varchar plan_type nullable timestamp_with_time_zone soft_deleted_at varchar status timestamp_with_time_zone updated_at family_favorites FK uuid content_id timestamp_with_time_zone created_at FK uuid family_id PK uuid id timestamp_with_time_zone updated_at family_invitations timestamp_with_time_zone created_at varchar email timestamp_with_time_zone expires_at nullable timestamp_with_time_zone expiry_notified_at FK uuid family_id PK uuid id FK uuid inviter_user_id varchar role varchar status varchar token family_members timestamp_with_time_zone created_at FK uuid family_id PK uuid id varchar role FK uuid user_id generation_jobs nullable jsonb character_override nullable FK uuid child_profile_id nullable timestamp_with_time_zone completed_at jsonb content_types timestamp_with_time_zone created_at nullable text error_message nullable FK uuid family_id PK uuid id jsonb input_params nullable timestamp_with_time_zone last_progress_at nullable jsonb learning_goal_override float progress nullable FK uuid prompt_template_id jsonb result_content_ids integer retry_count nullable timestamp_with_time_zone started_at varchar status jsonb sub_status nullable varchar theme FK uuid user_id milestone_checkoffs timestamp_with_time_zone checked_at FK uuid checked_by FK uuid child_profile_id varchar dimension_code FK uuid family_id PK uuid id nullable text notes varchar skill_id persona_bindings timestamp_with_time_zone bound_at FK uuid child_profile_id FK uuid family_id PK uuid id FK uuid physical_container_id nullable FK uuid updated_by physical_containers timestamp_with_time_zone created_at nullable varchar device_serial nullable timestamp_with_time_zone first_activated_at PK uuid id nullable timestamp_with_time_zone manufactured_at varchar physical_id nullable varchar product_sku container_trigger_type trigger_type container_physical_type type play_history nullable FK uuid child_profile_id nullable FK uuid content_id nullable varchar device_id PK uuid id timestamp_with_time_zone started_at preset_themes timestamp_with_time_zone created_at nullable text description integer display_order nullable varchar icon_url PK uuid id boolean is_active varchar name varchar slug timestamp_with_time_zone updated_at story_prompt_templates varchar age_group timestamp_with_time_zone created_at PK uuid id boolean is_active text language_guide varchar prompt_type text system_prompt timestamp_with_time_zone updated_at nullable FK uuid updated_by story_quick_reactions FK uuid child_id timestamp_with_time_zone created_at FK uuid family_id PK uuid id varchar reaction FK uuid story_id story_ratings jsonb answers FK uuid child_id timestamp_with_time_zone created_at FK uuid family_id PK uuid id FK uuid story_id timestamp_with_time_zone submitted_at token_categories nullable integer age_max nullable integer age_min varchar category_type nullable varchar cover_image_url timestamp_with_time_zone created_at nullable FK uuid created_by nullable text description PK uuid id boolean is_active jsonb metadata varchar name nullable varchar publisher nullable varchar slug varchar source_type timestamp_with_time_zone updated_at nullable FK uuid updated_by token_category_contents FK uuid content_id timestamp_with_time_zone created_at PK uuid id integer sort_order FK uuid token_category_id tokens nullable timestamp_with_time_zone activated_at timestamp_with_time_zone created_at nullable varchar device_serial nullable FK uuid family_id PK uuid id jsonb metadata varchar physical_id varchar status FK uuid token_category_id usage_daily_summaries nullable varchar content_type timestamp_with_time_zone created_at nullable numeric estimated_cost integer failed_calls nullable FK uuid family_id PK uuid id varchar service_type integer success_calls date summary_date integer total_calls bigint total_duration_ms bigint total_input_units bigint total_output_units timestamp_with_time_zone updated_at users nullable varchar auth_provider nullable varchar avatar_url timestamp_with_time_zone created_at varchar display_name varchar email nullable varchar firebase_uid nullable varchar google_id nullable varchar hashed_password PK uuid id boolean is_active nullable varchar provider_sub varchar role integer token_version timestamp_with_time_zone updated_at virtual_container_playlists timestamp_with_time_zone added_at FK uuid content_id PK uuid id boolean is_removable integer position FK uuid virtual_container_id virtual_containers timestamp_with_time_zone created_at FK uuid family_account_id PK uuid id boolean is_editable integer max_playlist_items nullable varchar name container_virtual_type type timestamp_with_time_zone updated_at album_id content_id created_by updated_by child_profile_id content_id family_id generation_job_id family_id physical_container_id virtual_container_id character_id child_profile_id family_id generation_job_id created_by updated_by created_by family_id initiated_by_user_id device_serial family_id content_id family_id family_id inviter_user_id family_id user_id child_profile_id family_id prompt_template_id user_id child_profile_id family_id checked_by child_profile_id family_id physical_container_id updated_by child_profile_id content_id updated_by child_id story_id family_id child_id story_id family_id created_by updated_by content_id token_category_id family_id token_category_id family_id content_id virtual_container_id family_account_id 機器文件CI 自動重生的 ER diagram 與 OpenSpec 狀態OpenSpec 完成狀態Next Page