docs: tables.md 중복 설명 제거 (376줄→350줄)

- 모든 테이블의 설명 컬럼에서 자명한 설명 제거
- FK 참조, 제약조건, 특수값만 유지
- 테이블 구조 및 컬럼은 모두 유지
This commit is contained in:
happybell80 2025-10-02 19:03:28 +09:00
parent 88a15e3809
commit b7adf49a02

View File

@ -9,160 +9,134 @@
## 1. 조직 관련 테이블 ## 1. 조직 관련 테이블
### company ### company
- **용도**: 회사 정보 | 컬럼명 | 타입 | NULL | 설명 |
- **Primary Key**: id (UUID) |--------|------|------|------|
| id | UUID | NO | PK |
| 컬럼명 | 타입 | NULL | 기본값 | 설명 | | name | VARCHAR(255) | NO | |
|--------|------|------|--------|------| | url | VARCHAR(255) | YES | |
| id | UUID | NO | | 회사 ID | | created_at | TIMESTAMPTZ | YES | |
| name | VARCHAR(255) | NO | | 회사명 | | updated_at | TIMESTAMPTZ | YES | |
| url | VARCHAR(255) | YES | | 회사 URL |
| created_at | TIMESTAMPTZ | YES | CURRENT_TIMESTAMP | 생성 시각 |
| updated_at | TIMESTAMPTZ | YES | CURRENT_TIMESTAMP | 수정 시각 |
### team ### team
- **용도**: 팀 정보 | 컬럼명 | 타입 | NULL | 설명 |
- **Primary Key**: id (UUID) |--------|------|------|------|
| id | UUID | NO | PK |
| 컬럼명 | 타입 | NULL | 기본값 | 설명 | | company_id | UUID | NO | FK → company |
|--------|------|------|--------|------| | name | VARCHAR(32) | NO | |
| id | UUID | NO | | 팀 ID | | created_at | TIMESTAMPTZ | YES | |
| company_id | UUID | NO | | 회사 ID (FK → company) | | updated_at | TIMESTAMPTZ | YES | |
| name | VARCHAR(32) | NO | | 팀 이름 |
| created_at | TIMESTAMPTZ | YES | CURRENT_TIMESTAMP | 생성 시각 |
| updated_at | TIMESTAMPTZ | YES | CURRENT_TIMESTAMP | 수정 시각 |
### user ### user
- **용도**: 시스템 사용자 정보 | 컬럼명 | 타입 | NULL | 설명 |
- **Primary Key**: id (UUID) |--------|------|------|------|
| id | UUID | NO | PK |
| 컬럼명 | 타입 | NULL | 기본값 | 설명 | | team_id | UUID | NO | FK → team |
|--------|------|------|--------|------| | email | VARCHAR(255) | NO | UNIQUE |
| id | UUID | NO | | 사용자 ID | | name | VARCHAR(255) | YES | |
| team_id | UUID | NO | | 팀 ID (FK → team) | | picture | VARCHAR(500) | YES | |
| email | VARCHAR(255) | NO | | 이메일 (UNIQUE) | | oauth_provider | VARCHAR(50) | YES | google/slack |
| name | VARCHAR(255) | YES | | 사용자명 | | oauth_id | VARCHAR(255) | YES | |
| picture | VARCHAR(500) | YES | | 프로필 이미지 | | is_active | BOOLEAN | YES | |
| oauth_provider | VARCHAR(50) | YES | | OAuth 제공자 | | last_login_at | TIMESTAMPTZ | YES | |
| oauth_id | VARCHAR(255) | YES | | OAuth ID | | created_at | TIMESTAMPTZ | YES | |
| is_active | BOOLEAN | YES | | 활성 상태 | | updated_at | TIMESTAMPTZ | YES | |
| last_login_at | TIMESTAMPTZ | YES | | 마지막 로그인 | | username | VARCHAR(64) | YES | |
| created_at | TIMESTAMPTZ | YES | CURRENT_TIMESTAMP | 생성 시각 | | is_admin | BOOLEAN | NO | |
| updated_at | TIMESTAMPTZ | YES | CURRENT_TIMESTAMP | 수정 시각 |
| username | VARCHAR(64) | YES | | 사용자명 |
### workspace_member ### workspace_member
- **용도**: 워크스페이스 멤버십 | 컬럼명 | 타입 | NULL | 설명 |
- **Primary Key**: id (UUID) |--------|------|------|------|
| id | UUID | NO | PK |
| 컬럼명 | 타입 | NULL | 기본값 | 설명 | | user_id | UUID | NO | FK → user |
|--------|------|------|--------|------| | role | user_role | NO | OWNER/MEMBER/GUEST |
| id | UUID | NO | | 멤버십 ID | | is_active | BOOLEAN | YES | |
| user_id | UUID | NO | | 사용자 ID (FK → user) | | joined_at | TIMESTAMP | YES | |
| role | user_role | NO | GUEST | 역할 (OWNER/MEMBER/GUEST) | | updated_at | TIMESTAMP | YES | |
| is_active | BOOLEAN | YES | | 활성 상태 |
| joined_at | TIMESTAMP | YES | CURRENT_TIMESTAMP | 가입 시각 |
| updated_at | TIMESTAMP | YES | CURRENT_TIMESTAMP | 수정 시각 |
--- ---
## 2. 제품 및 로빙 테이블 ## 2. 제품 및 로빙 테이블
### product ### product
- **용도**: 제품 정보 | 컬럼명 | 타입 | NULL | 설명 |
- **Primary Key**: id (UUID) |--------|------|------|------|
| id | UUID | NO | PK |
| 컬럼명 | 타입 | NULL | 기본값 | 설명 | | name | VARCHAR(32) | NO | |
|--------|------|------|--------|------| | app_id | VARCHAR(16) | YES | |
| id | UUID | NO | | 제품 ID | | scope | JSON | YES | |
| name | VARCHAR(32) | NO | | 제품명 | | description | VARCHAR(256) | YES | |
| app_id | VARCHAR(16) | YES | | 앱 ID | | created_at | TIMESTAMPTZ | YES | |
| scope | JSON | YES | | 권한 범위 | | updated_at | TIMESTAMPTZ | YES | |
| description | VARCHAR(256) | YES | | 설명 |
| created_at | TIMESTAMPTZ | YES | CURRENT_TIMESTAMP | 생성 시각 |
| updated_at | TIMESTAMPTZ | YES | CURRENT_TIMESTAMP | 수정 시각 |
### robeing ### robeing
- **용도**: 로빙 엔티티 정보 | 컬럼명 | 타입 | NULL | 설명 |
- **Primary Key**: id (UUID) |--------|------|------|------|
| id | UUID | NO | PK |
| 컬럼명 | 타입 | NULL | 기본값 | 설명 | | product_id | UUID | NO | FK → product |
|--------|------|------|--------|------| | team_id | UUID | NO | FK → team |
| id | UUID | NO | | 로빙 ID | | name | VARCHAR(32) | YES | |
| product_id | UUID | NO | | 제품 ID (FK → product) | | level | INTEGER | YES | |
| team_id | UUID | NO | | 팀 ID (FK → team) | | experience | INTEGER | YES | |
| name | VARCHAR(32) | YES | | 로빙 이름 | | memory | INTEGER | YES | |
| level | INTEGER | YES | 1 | 레벨 | | compute | INTEGER | YES | |
| experience | INTEGER | YES | 0 | 경험치 | | react | INTEGER | YES | |
| memory | INTEGER | YES | 10 | 메모리 스탯 | | empathy | INTEGER | YES | |
| compute | INTEGER | YES | 10 | 연산 스탯 | | leadership | INTEGER | YES | |
| react | INTEGER | YES | 10 | 반응 스탯 | | updated_at | TIMESTAMPTZ | YES | |
| empathy | INTEGER | YES | 10 | 공감 스탯 | | created_at | TIMESTAMPTZ | YES | |
| leadership | INTEGER | YES | 10 | 리더십 스탯 | | robeing_container_id | VARCHAR(64) | YES | |
| updated_at | TIMESTAMPTZ | YES | CURRENT_TIMESTAMP | 수정 시각 | | robeing_container_url | VARCHAR(128) | YES | |
| created_at | TIMESTAMPTZ | YES | CURRENT_TIMESTAMP | 생성 시각 |
| robeing_container_id | VARCHAR(64) | YES | | 컨테이너 ID |
| robeing_container_url | VARCHAR(128) | YES | | 컨테이너 URL |
--- ---
## 3. Slack 통합 테이블 ## 3. Slack 통합 테이블
### slack_workspace ### slack_workspace
- **용도**: Slack 워크스페이스 정보 | 컬럼명 | 타입 | NULL | 설명 |
- **Primary Key**: id (UUID) |--------|------|------|------|
| id | UUID | NO | PK |
| 컬럼명 | 타입 | NULL | 기본값 | 설명 | | team_id | UUID | NO | FK → team |
|--------|------|------|--------|------| | slack_team_id | VARCHAR(32) | YES | |
| id | UUID | NO | | 워크스페이스 ID | | bot_token | VARCHAR(255) | YES | |
| team_id | UUID | NO | | 팀 ID (FK → team) | | is_enterprise_install | BOOLEAN | YES | |
| slack_team_id | VARCHAR(32) | YES | | Slack 팀 ID | | is_active | BOOLEAN | YES | |
| bot_token | VARCHAR(255) | YES | | 봇 토큰 | | installed_at | TIMESTAMPTZ | YES | |
| is_enterprise_install | BOOLEAN | YES | | 엔터프라이즈 설치 | | updated_at | TIMESTAMPTZ | YES | |
| is_active | BOOLEAN | YES | | 활성 상태 | | created_at | TIMESTAMPTZ | YES | |
| installed_at | TIMESTAMPTZ | YES | CURRENT_TIMESTAMP | 설치 시각 |
| updated_at | TIMESTAMPTZ | YES | CURRENT_TIMESTAMP | 수정 시각 |
| created_at | TIMESTAMPTZ | YES | CURRENT_TIMESTAMP | 생성 시각 |
--- ---
## 4. 사용자 설정 및 토큰 테이블 ## 4. 사용자 설정 및 토큰 테이블
### user_preference ### user_preference
- **용도**: 사용자 개인 설정 | 컬럼명 | 타입 | NULL | 설명 |
- **Primary Key**: id (INTEGER) |--------|------|------|------|
| id | INTEGER | NO | PK |
| 컬럼명 | 타입 | NULL | 기본값 | 설명 | | user_id | UUID | NO | FK → user |
|--------|------|------|--------|------| | slack_user_id | VARCHAR(32) | YES | |
| id | INTEGER | NO | | 설정 ID | | news_keywords | VARCHAR(128)[] | YES | |
| user_id | UUID | NO | | 사용자 ID (FK → user) | | email_filter | VARCHAR(128)[] | YES | |
| slack_user_id | VARCHAR(32) | YES | | Slack 사용자 ID | | briefing_enabled | BOOLEAN | YES | |
| news_keywords | VARCHAR(128)[] | YES | | 뉴스 키워드 | | briefing_time | TIME | YES | |
| email_filter | VARCHAR(128)[] | YES | | 이메일 필터 | | updated_at | TIMESTAMPTZ | YES | |
| briefing_enabled | BOOLEAN | YES | true | 브리핑 활성화 | | created_at | TIMESTAMPTZ | YES | |
| briefing_time | TIME | YES | 09:00:00 | 브리핑 시간 |
| updated_at | TIMESTAMPTZ | YES | CURRENT_TIMESTAMP | 수정 시각 |
| created_at | TIMESTAMPTZ | YES | CURRENT_TIMESTAMP | 생성 시각 |
### gmail_token ### gmail_token
- **용도**: Gmail OAuth 토큰 | 컬럼명 | 타입 | NULL | 설명 |
- **Primary Key**: id (UUID) |--------|------|------|------|
| id | UUID | NO | PK |
| 컬럼명 | 타입 | NULL | 기본값 | 설명 | | user_id | UUID | NO | FK → user |
|--------|------|------|--------|------| | token_data | JSONB | YES | |
| id | UUID | NO | | 토큰 ID | | oauth_config | JSONB | YES | |
| user_id | UUID | NO | | 사용자 ID (FK → user) | | scopes | JSONB | YES | |
| token_data | JSONB | YES | | 토큰 데이터 | | metadata | JSONB | YES | |
| oauth_config | JSONB | YES | | OAuth 설정 | | expiry | TIMESTAMP | YES | |
| scopes | JSONB | YES | | 권한 범위 | | is_equipped | BOOLEAN | YES | |
| metadata | JSONB | YES | | 메타데이터 | | equipped_to | VARCHAR(50) | YES | |
| expiry | TIMESTAMP | YES | | 만료 시각 | | token_type | VARCHAR | YES | |
| is_equipped | BOOLEAN | YES | false | 장착 상태 | | expires_at | DOUBLE PRECISION | YES | |
| equipped_to | VARCHAR(50) | YES | | 장착 대상 | | created_at | TIMESTAMPTZ | YES | |
| token_type | VARCHAR | YES | Bearer | 토큰 타입 | | updated_at | TIMESTAMPTZ | YES | |
| expires_at | DOUBLE PRECISION | YES | | 만료 시간 |
| created_at | TIMESTAMPTZ | YES | CURRENT_TIMESTAMP | 생성 시각 |
| updated_at | TIMESTAMPTZ | YES | CURRENT_TIMESTAMP | 수정 시각 |
--- ---
@ -174,16 +148,16 @@
| 컬럼명 | 타입 | NULL | 기본값 | 설명 | | 컬럼명 | 타입 | NULL | 기본값 | 설명 |
|--------|------|------|--------|------| |--------|------|------|--------|------|
| id | INTEGER | NO | | 로그 ID | | id | INTEGER | NO | | PK |
| user_id | UUID | NO | | 사용자 ID (FK → user) | | user_id | UUID | NO | | FK → user |
| channel_id | VARCHAR(16) | YES | | 채널 ID | | channel_id | VARCHAR(16) | YES | | |
| message | VARCHAR | YES | | 사용자 메시지 | | message | VARCHAR | YES | | |
| response | VARCHAR | YES | | 응답 메시지 | | response | VARCHAR | YES | | |
| intent | VARCHAR(256) | YES | | 의도 분석 | | intent | VARCHAR(256) | YES | | |
| confidence | DOUBLE PRECISION | YES | | 신뢰도 | | confidence | DOUBLE PRECISION | YES | | |
| thread_ts | VARCHAR(128) | YES | | 스레드 타임스탬프 | | thread_ts | VARCHAR(128) | YES | | |
| timestamp | TIMESTAMPTZ | YES | | 대화 시각 | | timestamp | TIMESTAMPTZ | YES | | |
| channel_type | VARCHAR(32) | YES | | 채널 타입 | | channel_type | VARCHAR(32) | YES | | |
### news ### news
- **용도**: 뉴스 데이터 - **용도**: 뉴스 데이터
@ -191,11 +165,11 @@
| 컬럼명 | 타입 | NULL | 기본값 | 설명 | | 컬럼명 | 타입 | NULL | 기본값 | 설명 |
|--------|------|------|--------|------| |--------|------|------|--------|------|
| id | UUID | NO | | 뉴스 ID | | id | UUID | NO | | PK |
| user_id | UUID | YES | | 사용자 ID (FK → user) | | user_id | UUID | YES | | FK → user |
| data | JSONB | YES | | 뉴스 데이터 | | data | JSONB | YES | | |
| created_at | TIMESTAMPTZ | YES | CURRENT_TIMESTAMP | 생성 시각 | | created_at | TIMESTAMPTZ | YES | CURRENT_TIMESTAMP | |
| updated_at | TIMESTAMPTZ | YES | CURRENT_TIMESTAMP | 수정 시각 | | updated_at | TIMESTAMPTZ | YES | CURRENT_TIMESTAMP | |
### rb_news ### rb_news
- **용도**: 뉴스 발행 관리 - **용도**: 뉴스 발행 관리
@ -203,15 +177,15 @@
| 컬럼명 | 타입 | NULL | 기본값 | 설명 | | 컬럼명 | 타입 | NULL | 기본값 | 설명 |
|--------|------|------|--------|------| |--------|------|------|--------|------|
| id | UUID | NO | gen_random_uuid() | 뉴스 ID | | id | UUID | NO | gen_random_uuid() | PK |
| title | TEXT | NO | | 뉴스 제목 | | title | TEXT | NO | | |
| url | TEXT | NO | | 뉴스 URL (UNIQUE) | | url | TEXT | NO | | UNIQUE |
| summary | TEXT | YES | | 뉴스 요약 | | summary | TEXT | YES | | |
| slack_message_ts | VARCHAR(100) | YES | | Slack 메시지 타임스탬프 | | slack_message_ts | VARCHAR(100) | YES | | |
| slack_channel_id | VARCHAR(100) | YES | | Slack 채널 ID | | slack_channel_id | VARCHAR(100) | YES | | |
| is_published | BOOLEAN | YES | false | 발행 상태 | | is_published | BOOLEAN | YES | false | |
| published_at | TIMESTAMPTZ | YES | | 발행 시각 | | published_at | TIMESTAMPTZ | YES | | |
| created_at | TIMESTAMPTZ | YES | now() | 생성 시각 | | created_at | TIMESTAMPTZ | YES | now() | |
**인덱스**: **인덱스**:
- `rb_news_pkey`: PRIMARY KEY (id) - `rb_news_pkey`: PRIMARY KEY (id)
@ -226,19 +200,19 @@
| 컬럼명 | 타입 | NULL | 기본값 | 설명 | | 컬럼명 | 타입 | NULL | 기본값 | 설명 |
|--------|------|------|--------|------| |--------|------|------|--------|------|
| id | UUID | NO | gen_random_uuid() | 문서 ID | | id | UUID | NO | gen_random_uuid() | PK |
| team_id | UUID | NO | | 팀 ID (FK → team) | | team_id | UUID | NO | | FK → team |
| filename | VARCHAR(255) | NO | | 파일명 | | filename | VARCHAR(255) | NO | | |
| file_hash | VARCHAR(64) | NO | | SHA256 해시 | | file_hash | VARCHAR(64) | NO | | SHA256 |
| file_size | BIGINT | YES | | 파일 크기 (bytes) | | file_size | BIGINT | YES | | bytes |
| mime_type | VARCHAR(100) | YES | | MIME 타입 | | mime_type | VARCHAR(100) | YES | | |
| storage_path | TEXT | NO | | 저장 경로 (/mnt/hdd/uploads/{team_id}/) | | storage_path | TEXT | NO | | /mnt/hdd/uploads/{team_id}/ |
| text_content | TEXT | YES | | 추출된 텍스트 | | text_content | TEXT | YES | | |
| chunk_count | INTEGER | YES | 0 | ChromaDB 청크 수 | | chunk_count | INTEGER | YES | 0 | ChromaDB 청크 수 |
| processing_status | VARCHAR(20) | YES | 'pending' | 처리 상태 (pending/completed/failed) | | processing_status | VARCHAR(20) | YES | 'pending' | pending/completed/failed |
| metadata | JSONB | YES | '{}' | 메타데이터 (uploaded_by, tags, summary 등) | | metadata | JSONB | YES | '{}' | uploaded_by, tags, summary 등 |
| created_at | TIMESTAMPTZ | YES | CURRENT_TIMESTAMP | 생성 시각 | | created_at | TIMESTAMPTZ | YES | CURRENT_TIMESTAMP | |
| updated_at | TIMESTAMPTZ | YES | CURRENT_TIMESTAMP | 수정 시각 | | updated_at | TIMESTAMPTZ | YES | CURRENT_TIMESTAMP | |
**인덱스**: **인덱스**:
- `idx_team_doc_hash`: UNIQUE (team_id, file_hash) - 팀별 파일 중복 방지 - `idx_team_doc_hash`: UNIQUE (team_id, file_hash) - 팀별 파일 중복 방지
@ -253,22 +227,22 @@
| 컬럼명 | 타입 | NULL | 기본값 | 설명 | | 컬럼명 | 타입 | NULL | 기본값 | 설명 |
|--------|------|------|--------|------| |--------|------|------|--------|------|
| id | UUID | NO | gen_random_uuid() | 토큰 ID | | id | UUID | NO | gen_random_uuid() | PK |
| user_id | UUID | NO | | 사용자 ID (FK → user) | | user_id | UUID | NO | | FK → user |
| access_token | TEXT | YES | | 액세스 토큰 (개별 저장용) | | access_token | TEXT | YES | | 개별 저장용 |
| refresh_token | TEXT | YES | | 리프레시 토큰 (개별 저장용) | | refresh_token | TEXT | YES | | 개별 저장용 |
| token_type | VARCHAR(50) | YES | 'Bearer' | 토큰 타입 | | token_type | VARCHAR(50) | YES | 'Bearer' | |
| expires_at | TIMESTAMP | YES | | 토큰 만료 시각 | | expires_at | TIMESTAMP | YES | | |
| scopes | JSONB | YES | | OAuth 스코프 목록 | | scopes | JSONB | YES | | |
| domain_id | VARCHAR(255) | YES | | NAVER WORKS 도메인 ID | | domain_id | VARCHAR(255) | YES | | |
| service_account | VARCHAR(255) | YES | | 서비스 계정 | | service_account | VARCHAR(255) | YES | | |
| metadata | JSONB | YES | | 사용자 메타데이터 | | metadata | JSONB | YES | | |
| created_at | TIMESTAMPTZ | YES | CURRENT_TIMESTAMP | 생성 시각 | | created_at | TIMESTAMPTZ | YES | CURRENT_TIMESTAMP | |
| updated_at | TIMESTAMPTZ | YES | CURRENT_TIMESTAMP | 수정 시각 | | updated_at | TIMESTAMPTZ | YES | CURRENT_TIMESTAMP | |
| username | VARCHAR(255) | YES | | 사용자명 | | username | VARCHAR(255) | YES | | |
| account_id | VARCHAR(255) | YES | | NAVER WORKS 계정 ID | | account_id | VARCHAR(255) | YES | | |
| token_data | JSONB | YES | | 토큰 데이터 (통합 저장용) | | token_data | JSONB | YES | | 통합 저장용 |
| oauth_config | JSONB | YES | | OAuth 설정 정보 | | oauth_config | JSONB | YES | | |
| is_equipped | BOOLEAN | YES | false | Passport 장착 여부 | | is_equipped | BOOLEAN | YES | false | Passport 장착 여부 |
**인덱스**: **인덱스**:
@ -315,18 +289,18 @@
| 컬럼명 | 타입 | NULL | 기본값 | 설명 | | 컬럼명 | 타입 | NULL | 기본값 | 설명 |
|--------|------|------|--------|------| |--------|------|------|--------|------|
| created_at | TIMESTAMPTZ | NO | | 분석 시각 (파티션 키) | | created_at | TIMESTAMPTZ | NO | | 파티션 키 |
| user_id | UUID | YES | | 사용자 ID (user 테이블 참조) | | user_id | UUID | YES | | user 테이블 참조 |
| company_id | UUID | YES | | 회사 ID | | company_id | UUID | YES | | |
| robeing_id | VARCHAR(50) | YES | | 로빙 ID | | robeing_id | VARCHAR(50) | YES | | |
| emotion_type | VARCHAR(20) | YES | | 'user' 또는 'robeing' | | emotion_type | VARCHAR(20) | YES | | user/robeing |
| probs | JSONB | NO | | 7개 감정 확률 분포 | | probs | JSONB | NO | | 7개 감정 확률 분포 |
| entropy | DOUBLE PRECISION | YES | | 감정 엔트로피 값 | | entropy | DOUBLE PRECISION | YES | | |
| model_version | VARCHAR(50) | YES | | 모델 버전 (예: onnx-7emotions-v1) | | model_version | VARCHAR(50) | YES | | onnx-7emotions-v1 등 |
| meta | JSONB | YES | | 메타데이터 (source, message_length 등) | | meta | JSONB | YES | | source, message_length 등 |
| text_hash | VARCHAR(64) | YES | | 텍스트 SHA256 해시 | | text_hash | VARCHAR(64) | YES | | SHA256 |
| top_emotions | JSONB | YES | | Top-p 복합 감정 배열 [{"label", "probability"}] | | top_emotions | JSONB | YES | | [{"label", "probability"}] |
| cumulative_p | DOUBLE PRECISION | YES | | 누적 확률 (Top-p 70%) | | cumulative_p | DOUBLE PRECISION | YES | | Top-p 70% |
**인덱스**: **인덱스**:
- `emotion_readings_created_at_idx`: btree (created_at DESC) - `emotion_readings_created_at_idx`: btree (created_at DESC)