# identity 子系统 — doris数据库相关表与关联关系（供参考）


---

## 1. 数据库全景

| 数据库 | 说明 | 与 identity 的关系 |
|--------|------|-------------------|
| `ods_app_base_data` | APP基础数据（用户、设备、好友、产品） | **核心** — 用户身份主数据 |
| `ods_app_app_community` | 社区数据（帖子、评论、关注） | 行为数据，辅助归并 |
| `ods_app_jh_data` | JOYHUB事件数据 | 行为数据，辅助归并 |
| `ods_oa_oaaftersales` | OA售后系统（客户、订单、测评） | **核心** — 非APP用户身份线索 |
| `app_tag_data` | 标签数据 | **关键** — 已有 OneID 归并表 |

---

## 2. 核心发现：已存在的 OneID 归并表

### `app_tag_data.user_oneid` — 用户唯一标识归并表（6 字段，已有数据）

> **这是 identity 子系统 M2（归并引擎）的核心参考**，已实现 uuid → one_id 的归并逻辑

| 字段 | 类型 | 键 | 说明 |
|------|------|---|------|
| `uuid` | VARCHAR(64) | UNI, NOT NULL | 原始客户唯一标识符 |
| `one_id` | VARCHAR(64) | NOT NULL | 用户唯一标识（归并后的ID） |
| `bridge_uuid` | STRING | | 当前 uuid 对应的非当前桥接 uuid |
| `association_fields` | STRING | | 关联字段 |
| `detail` | STRING | | uuid 指向 one_id 的证据说明（JSON） |
| `update_time` | DATETIME(3) | | 同步更新时间 |

**关键设计点**：
- `uuid` → `one_id` 是多对一关系（多个 uuid 可归并到同一个 one_id）
- `bridge_uuid` 记录桥接关联，用于跨系统身份串联
- `detail` 字段存储归并证据（JSON），与设计文档中 `person_profiles.merge_evidence` 概念一致
- `association_fields` 记录关联字段，对应设计文档中的线索类型

---

## 3. 核心表状态

设计文档定义的 4 张核心表 **尚未在数据库中创建**：

| 表名 | 设计文档定义 | 数据库状态 | 与现有表的关系 |
|------|-------------|-----------|--------------|
| `person_profiles` | 真实人主表 | **不存在** | 可参考 `app_tag_data.user_oneid`（one_id） |
| `person_identity_links` | 身份线索关联表 | **不存在** | 可参考 `ods_oa_oaaftersales.customer_platform_info`（type映射线索类型） |
| `contact_context_snapshots` | 上下文快照 | **不存在** | 需聚合多表新建 |
| `device_records` | 设备变化记录 | **不存在** | 可参考 `user_device_token_log`（已有252万条记录） |

---

## 4. 已存在的数据源表

### 4.1 用户与身份核心表

#### `ods_app_base_data.users` — 用户主表（36 字段）

> identity 子系统的核心用户数据源，提供 JOYHUB ID、邮箱、设备号等身份线索

| 字段 | 类型 | 键 | 说明 |
|------|------|---|------|
| `id` | BIGINT | UNI | 用户ID（JOYHUB ID） |
| `userName` | STRING | | 用户名 |
| `email` | STRING | | 邮箱 |
| `deviceToken` | VARCHAR(300) | | 设备推送令牌 |
| `IMEI` | STRING | | 设备IMEI |
| `sysType` | VARCHAR(765) | | 系统类型（安卓/IOS/Windows Phone） |
| `deviceId` | STRING | | 设备ID |
| `appVersion` | VARCHAR(90) | | APP版本 |
| `contact_information` | VARCHAR(765) | | 联系方式（电话号码） |
| `mobile` | STRING | | 手机号 |
| `area_code` | BIGINT | | 区域代码（美国1，中国86） |
| `status` | TINYINT | | 1活跃/2封禁/3注销 |
| `sysTime` | DATETIME | | 系统时间（注册时间） |
| `created_at` | DATETIME | | 创建时间 |

#### `ods_app_base_data.user_login_last` — 最近登录信息（21 字段）

> 提供设备型号、系统版本、APP版本、国家等信息，是设备变化识别（M4）的重要数据源

| 字段 | 类型 | 键 | 说明 |
|------|------|---|------|
| `UserId` | BIGINT | UNI | 用户ID → 关联 `users.id` |
| `deviceId` | STRING | | 设备ID |
| `deviceModel` | VARCHAR(150) | | 手机型号 |
| `device` | VARCHAR(150) | | 手机系统 |
| `sysType` | VARCHAR(150) | | 系统设备信息与版本 |
| `appVersion` | VARCHAR(45) | | APP版本号 |
| `appChannel` | INT | | 渠道 |
| `countryName` | VARCHAR(600) | | 国家名称 |
| `countryCode` | VARCHAR(30) | | 国家缩写 |
| `Time` | DATETIME | | 登录时间 |
| `Ip` | STRING | | IP地址 |

#### `ods_app_base_data.user_device_token_log` — 设备令牌变更日志（7 字段，252万行）

> 记录设备令牌的添加和更新，可用于追踪设备变化

| 字段 | 类型 | 键 | 说明 |
|------|------|---|------|
| `id` | INT | UNI | 主键 |
| `user_id` | INT | | 用户ID → 关联 `users.id` |
| `type` | TINYINT | | 0添加/1更新 |
| `device_id` | STRING | | 设备ID |
| `new_device_token` | VARCHAR(300) | | 新设备令牌 |
| `created_at` | DATETIME | | 创建时间 |
| `client_time` | DATETIME | | 客户端时间 |

#### `ods_app_base_data.user_contact_information_history` — 联系方式变更历史（11 字段，20万行）

> 记录用户手机号等联系方式的变更历史，可用于身份线索追踪

| 字段 | 类型 | 键 | 说明 |
|------|------|---|------|
| `id` | DECIMAL(20,0) | UNI | 主键 |
| `user_id` | BIGINT | | 用户ID → 关联 `users.id` |
| `user_type` | VARCHAR(150) | | 用户角色 |
| `area_code` | BIGINT | | 区域代码 |
| `mobile` | STRING | | 手机号 |
| `area_id` | INT | | 区域ID |
| `marketing_phone` | TINYINT | | 营销电话开关 |
| `marketing_sms` | TINYINT | | 个性化广告开关 |
| `status` | SMALLINT | | 1生效中/2已过期 |
| `verify_status` | SMALLINT | | 短信验证状态：1通过/2未通过 |
| `created_at` | BIGINT | | 创建时间 |

#### `ods_app_base_data.banned_device_id` — 设备封禁表（3 字段，6831行）

| 字段 | 类型 | 键 | 说明 |
|------|------|---|------|
| `id` | INT | UNI | 主键 |
| `device_id` | VARCHAR(765) | | 封禁设备ID |
| `created_at` | INT | | 创建时间 |

#### `ods_app_base_data.blacklist_users_aggregate` — 用户黑名单汇总（8 字段）

> 按 uid、设备、IP 维度的黑名单，用于风险判断

| 字段 | 类型 | 键 | 说明 |
|------|------|---|------|
| `id` | INT | UNI | 主键 |
| `target_id` | INT | | 1=uid, 2=设备, 3=IP |
| `target_value` | VARCHAR(1500) | | 字段值 |
| `category_id` | INT | | 黑名单类别ID |
| `describe` | VARCHAR(1500) | | 加入原因 |


### 4.2 OA 售后系统 — 客户身份数据

#### `ods_oa_oaaftersales.customer` — 客户主表（22 字段，23万行）

| 字段 | 类型 | 键 | 说明 |
|------|------|---|------|
| `id` | DECIMAL(20,0) | UNI | 客户ID |
| `name` | STRING | | 客户名 |
| `country` | VARCHAR(60) | | 国家 |
| `is_black` | TINYINT | | 是否黑名单 |
| `high_risk` | TINYINT | | 是否高风险 |
| `erp_contact` | STRING | | ERP联系方式 |
| `erp_pay_account` | VARCHAR(1500) | | ERP付款账号 |

#### `ods_oa_oaaftersales.customer_platform_info` — 客户平台信息（8 字段，26万行）

| 字段 | 类型 | 键 | 说明 |
|------|------|---|------|
| `id` | BIGINT | UNI | 主键 |
| `type` | TINYINT | | **1电话/2邮箱/3joyhub_id/4邮箱编码/5twitter/6facebook** |
| `customer_id` | INT | | 客户ID → 关联 `customer.id` |
| `account` | STRING | | 账号值 |
| `is_delete` | TINYINT | | 是否删除 |

#### `ods_oa_oaaftersales.customer_address` — 客户地址（18 字段，5631行）

> 提供姓名+地址组合，可用于 ORDER_NAME_ADDRESS 线索归并

| 字段 | 类型 | 键 | 说明 |
|------|------|---|------|
| `id` | BIGINT | UNI | 主键 |
| `customer_id` | INT | | 客户ID → 关联 `customer.id` |
| `recipient_name` | STRING | | 收件人姓名 |
| `phone` | STRING | | 电话 |
| `zip_code` | STRING | | 邮编 |
| `country` | VARCHAR(300) | | 国家 |
| `city` | STRING | | 城市 |
| `state` | STRING | | 州/省 |
| `detail` | VARCHAR(1500) | | 详细地址 |

#### `ods_oa_oaaftersales.customer_payment_account` — 客户付款账号（12 字段，10万行）

> 提供收款信息（银行卡、PayPal等），可作为身份归并线索

| 字段 | 类型 | 键 | 说明 |
|------|------|---|------|
| `id` | BIGINT | UNI | 主键 |
| `ct_id` | INT | | 客户ID → 关联 `customer.id` |
| `pay_name` | VARCHAR(150) | | 支付方式 |
| `account_number` | STRING | | 账号 |
| `account_name` | STRING | | 账户名 |
| `card_no` | VARCHAR(300) | | 卡号 |

#### `ods_oa_oaaftersales.customer_bind` — 客户绑定关系（6 字段，4980行）

> 客户间的绑定关系，已有归并概念

| 字段 | 类型 | 键 | 说明 |
|------|------|---|------|
| `id` | BIGINT | UNI | 主键 |
| `customer_ids` | STRING | | 绑定的客户ID集合 |
| `unbind_time` | DATETIME | | 解绑时间 |
| `is_deleted` | TINYINT | | 是否删除 |

#### `ods_oa_oaaftersales.customer_bind_log` — 客户绑定日志（6 字段，1.2万行）

| 字段 | 类型 | 键 | 说明 |
|------|------|---|------|
| `id` | BIGINT | UNI | 主键 |
| `user_id` | INT | | 操作人ID |
| `bind_customer_ids` | STRING | | 绑定的客户ID |
| `type` | VARCHAR(765) | | 操作类型 |

#### `ods_oa_oaaftersales.evaluation_order` — 测评订单（55+ 字段，45万行）

> 包含丰富的身份线索：邮箱、电话、JOYHUB ID、社交媒体账号

| 字段 | 类型 | 键 | 说明 |
|------|------|---|------|
| `id` | BIGINT | UNI | 订单ID |
| `ct_id` | INT | | 客户ID → 关联 `customer.id` |
| `amazon_order_id` | STRING | | 亚马逊订单号 |
| `email` | STRING | | 邮箱 |
| `phone` | STRING | | 电话 |
| `joyhub_id` | VARCHAR(150) | | JOYHUB ID |
| `twitter` | STRING | | Twitter账号 |
| `facebook` | STRING | | Facebook账号 |

#### `ods_oa_oaaftersales.lingxing_order` — 亚马逊订单（30+ 字段，2142万行）

| 字段 | 类型 | 键 | 说明 |
|------|------|---|------|
| `id` | DECIMAL(20,0) | UNI | 订单ID |
| `amazon_order_id` | VARCHAR(150) | | 亚马逊订单号 |
| `buyer_name` | VARCHAR(765) | | 买家姓名 |
| `buyer_email` | VARCHAR(765) | | 买家邮箱 |
| `phone` | VARCHAR(90) | | 电话 |
| `postal_code` | VARCHAR(765) | | 邮编 |
| `address` | VARCHAR(765) | | 地址 |

#### `ods_oa_oaaftersales.phone_records` — 电话记录（30+ 字段，8万行）

| 字段 | 类型 | 键 | 说明 |
|------|------|---|------|
| `id` | BIGINT | UNI | 主键 |
| `ct_id` | INT | | 客户ID → 关联 `customer.id` |
| `phone` | STRING | | 电话 |
| `email` | STRING | | 邮箱 |
| `joyhub_id` | VARCHAR(150) | | JOYHUB ID |

### 4.3 社区行为表

#### `ods_app_app_community.posts` — 帖子表（35 字段）

| 字段 | 类型 | 键 | 说明 |
|------|------|---|------|
| `id` | DECIMAL(20,0) | UNI | 帖子ID |
| `user_id` | INT | | 用户ID → 关联 `users.id` |
| `status` | SMALLINT | | 10待审核/20拒绝/30通过 |
| `deleted_at` | INT | | 删除时间（0=未删除） |

#### `ods_app_app_community.post_likes` — 点赞表（5 字段）

| 字段 | 类型 | 键 | 说明 |
|------|------|---|------|
| `id` | DECIMAL(20,0) | UNI | 主键 |
| `post_id` | BIGINT | | 帖子ID → 关联 `posts.id` |
| `user_id` | INT | | 用户ID → 关联 `users.id` |

#### `ods_app_app_community.comments` — 评论表（14 字段）

| 字段 | 类型 | 键 | 说明 |
|------|------|---|------|
| `id` | DECIMAL(20,0) | UNI | 评论ID |
| `post_id` | DECIMAL(20,0) | | 帖子ID → 关联 `posts.id` |
| `user_id` | DECIMAL(20,0) | | 用户ID → 关联 `users.id` |

#### `ods_app_app_community.follows` — 关注关系表（7 字段）

| 字段 | 类型 | 键 | 说明 |
|------|------|---|------|
| `id` | DECIMAL(20,0) | UNI | 主键 |
| `user_id` | INT | | 关注者ID → 关联 `users.id` |
| `following_user_id` | INT | | 被关注者ID → 关联 `users.id` |

#### `ods_app_base_data.friends` — 好友关系表（6 字段）

| 字段 | 类型 | 键 | 说明 |
|------|------|---|------|
| `id` | DECIMAL(20,0) | UNI | 主键 |
| `user_id` | DECIMAL(20,0) | | 用户ID → 关联 `users.id` |
| `friend_id` | DECIMAL(20,0) | | 好友ID → 关联 `users.id` |

### 4.4 事件行为表

#### `ods_app_jh_data.events` — APP事件表（18 字段）

> event_type: 13=home, 8=玩具连接, 5=视频等

| 字段 | 类型 | 键 | 说明 |
|------|------|---|------|
| `id` | BIGINT | UNI | 事件ID |
| `add_date` | DATE | UNI | 记录日期 |
| `uid` | BIGINT | | 用户ID → 关联 `users.id` |
| `event_type` | INT | | 事件类型 |
| `pid` | BIGINT | | 产品ID → 关联 `def_product_list.id` |

#### `ods_app_jh_data.remote_events` — 远程连接事件表（15 字段）

| 字段 | 类型 | 键 | 说明 |
|------|------|---|------|
| `id` | BIGINT | UNI | 事件ID |
| `uid` | BIGINT | | 用户ID → 关联 `users.id` |
| `call_sn` | VARCHAR(600) | | 远程序列号（格式：uid1_uid2_uuid） |
| `mode` | INT | | 1文字/2语音/3视频 |


---

## 5. 表关联关系图

```
┌─────────────────────────────────────────────────────────────────────────┐
│                        identity 子系统数据关系                           │
└─────────────────────────────────────────────────────────────────────────┘

                          ┌───────────────────────┐
                          │  app_tag_data         │
                          │    .user_oneid        │
                          │  uuid ──► one_id      │
                          │  (已有归并逻辑)        │
                          └───────────┬───────────┘
                                      │ uuid 可能是 email/phone/device
                                      ▼
┌──────────────────────────────────────────────────────────────────────┐
│                    ods_app_base_data（APP用户体系）                   │
│                                                                      │
│  users ◄── user_profiles (user_id)                                   │
│    │       user_login_last (UserId) ── deviceId, deviceModel         │
│    │       user_device_token_log (user_id) ── 252万条设备变更记录     │
│    │       user_contact_information_history (user_id) ── 20万条变更   │
│    │       friends (user_id / friend_id)                             │
│    │       banned_device_id (device_id) ── 设备封禁                   │
│    │       blacklist_users_aggregate (target_id+target_value)        │
│    │                                                                 │
│    └── id = JOYHUB_ID                                                │
└──────────────────────────────────────────────────────────────────────┘

┌──────────────────────────────────────────────────────────────────────┐
│                    ods_oa_oaaftersales（OA售后体系）                  │
│                                                                      │
│  customer ◄── customer_platform_info (customer_id)                   │
│    │            type: 1电话/2邮箱/3joyhub_id/5twitter/6facebook       │
│    │         customer_address (customer_id) ── 姓名+地址+电话         │
│    │         customer_payment_account (ct_id) ── 收款账号             │
│    │         customer_bind (customer_ids) ── 客户绑定关系             │
│    │         customer_bind_log ── 绑定操作日志                        │
│    │         evaluation_order (ct_id) ── 邮箱/电话/joyhub_id/社媒     │
│    │         phone_records (ct_id) ── 电话/邮箱/joyhub_id            │
│    │         order_refund (ct_id) ── 返款详情                        │
│    │                                                                 │
│  lingxing_order ── buyer_name + buyer_email + phone + address        │
│    └── lingxing_order_item (amazon_order_id)                         │
└──────────────────────────────────────────────────────────────────────┘

┌──────────────────────────────────────────────────────────────────────┐
│                    社区行为（ods_app_app_community）                  │
│                                                                      │
│  posts ◄── post_likes (post_id, user_id)                             │
│    │       comments (post_id, user_id)                               │
│    └── follows (user_id, following_user_id)                          │
└──────────────────────────────────────────────────────────────────────┘

┌──────────────────────────────────────────────────────────────────────┐
│                     事件行为（ods_app_jh_data）                       |
│                                                                      │
│  events (uid, event_type, pid)                                       │
│  communities (uid, event_type)                                       │
│  remote_events (uid, call_sn ── 含对端uid)                           │
└──────────────────────────────────────────────────────────────────────┘
```

---

## 6. identity 设计表与现有表的字段映射

### 6.1 person_identity_links（身份线索关联表）— 待建

| clue_type | 设计文档定义 | 数据来源表 | 来源字段 | 数据量级 |
|-----------|-------------|-----------|---------|---------|
| JOYHUB_ID | JOYHUB用户ID | `users.id` | id | - |
| EMAIL | 邮箱 | `users.email` / `evaluation_order.email` / `lingxing_order.buyer_email` / `edm_contact_user.email` / `customer_platform_info`(type=2) | email | - |
| PHONE | 电话 | `users.contact_information` / `users.mobile` / `evaluation_order.phone` / `lingxing_order.phone` / `customer_platform_info`(type=1) | phone | - |
| DEVICE | 设备号 | `users.deviceId` / `user_login_last.deviceId` / `user_device_token_log.device_id` | deviceId | 252万条日志 |
| ORDER_NAME_ADDRESS | 订单姓名+地址 | `lingxing_order.buyer_name` + `lingxing_order.address` / `customer_address.recipient_name` + `customer_address.detail` | name+address | 5631条地址 |
| SOCIAL_ACCOUNT | 社交媒体（扩展） | `evaluation_order.twitter` / `evaluation_order.facebook` / `customer_platform_info`(type=5,6) | twitter/facebook | - |
| PAYMENT_ACCOUNT | 收款账号（扩展） | `customer_payment_account.account_number` / `customer.erp_pay_account` | account | 10万条 |

### 6.2 device_records（设备变化记录）— 待建

| 设计字段 | 数据来源表 | 来源字段 |
|---------|-----------|---------|
| `joyhub_id` | `users.id` | id |
| `device_id` | `users.deviceId` / `user_login_last.deviceId` / `user_device_token_log.device_id` | deviceId |
| `device_model` | `user_login_last.deviceModel` | deviceModel |
| `os_version` | `user_login_last.device` / `user_login_last.sysType` | device/sysType |
| `app_version` | `user_login_last.appVersion` / `users.appVersion` | appVersion |
| `change_type` | `user_device_token_log.type` | 0=NEW, 1=UPDATE |

### 6.3 contact_context_snapshots（上下文快照）— 待建

| 设计字段 | 数据来源子系统 | 来源表 |
|---------|--------------|--------|
| `identity_snapshot` | identity | person_profiles + person_identity_links |
| `transaction_snapshot` | planning | lingxing_order, lingxing_order_item |
| `service_snapshot` | support | order_refund, evaluation_order, phone_records |
| `risk_snapshot` | risk | customer.is_black, customer.high_risk, banned_device_id, blacklist_users_aggregate |
| `device_snapshot` | identity(M4) | device_records, user_login_last |
| `outreach_snapshot` | outreach | （待确认） |


