# 检查数据库连接并获取表结构

## 接口地址

```
POST /database/check
```

## 请求参数

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| db_type | string | 是 | 数据库类型：`mysql`、`postgres`、`neo4j` |
| host | string | 是 | 数据库主机 |
| port | int | 是 | 数据库端口 |
| username | string | 是 | 用户名 |
| password | string | 否 | 密码 |
| database | string | 是 | 数据库名 |
| charset | string | 否 | 字符集，默认 `utf8mb4` |
| ssl_mode | string | 否 | SSL 模式 |
| database_id | string | 否 | 已存在的数据库ID，用于恢复字段映射 |
| uri | string | 否 | Neo4j 连接地址（如 bolt://localhost:7687），Neo4j 类型必填 |

## 请求示例（MySQL/PostgreSQL）

```json
{
  "db_type": "mysql",
  "host": "localhost",
  "port": 3306,
  "username": "root",
  "password": "root",
  "database": "students",
  "charset": "utf8mb4",
  "database_id": "xxx-xxx-xxx"
}
```

## 请求示例（Neo4j）

```json
{
  "db_type": "neo4j",
  "uri": "bolt://localhost:7687",
  "username": "neo4j",
  "password": "password",
  "database": "neo4j"
}
```

## 返回参数

| 参数 | 类型 | 说明 |
|------|------|------|
| success | bool | 是否连接成功 |
| message | string | 消息 |
| database | string | 数据库名 |
| tables | array | 表结构列表（MySQL/PostgreSQL） |
| graphs | object | 图谱数据（Neo4j） |

### tables[] 详情（关系型数据库）

| 参数 | 类型 | 说明 |
|------|------|------|
| table_name | string | 表名 |
| table_comment | string | 表注释 |
| ddl | string | 建表 DDL（带 COMMENT 的映射后 DDL） |
| columns | array | 列信息列表 |

### columns[] 详情

| 参数 | 类型 | 说明 |
|------|------|------|
| column_name | string | 列名 |
| data_type | string | 数据类型 |
| column_type | string | 完整列类型 |
| is_nullable | string | 是否可空（YES/NO） |
| default_value | string | 默认值 |
| column_key | string | 主键标识（PRI/MUL/UNI） |
| extra | string | 额外信息（如 auto_increment） |
| column_comment | string | 列注释 |
| mapped_name | string | 字段中文映射名（已保存的映射） |

### graphs 详情（Neo4j）

| 参数 |类型| 说明 |
|------|------|------|
| labels | array | 标签列表 |
| relationshipTypes | array | 关系类型列表 |
| nodes | array | 节点属性定义 |
| relationships | array | 关系属性定义 |

### graphs.labels[]

| 参数 | 类型 | 说明 |
|------|------|------|
| name | string | 标签名称 |
| count | int | 节点数量 |

### graphs.relationshipTypes[]

| 参数 | 类型 | 说明 |
|------|------|------|
| name | string | 关系类型名称 |
| count | int | 关系数量 |

### graphs.nodes[]

| 参数 | 类型 | 说明 |
|------|------|------|
| label | string | 节点标签名 |
| properties | array | 属性列表 |

### graphs.relationships[]

| 参数 | 类型 | 说明 |
|------|------|------|
| type | string | 关系类型名 |
| startLabel | string | 起始节点标签 |
| endLabel | string | 目标节点标签 |
| properties | array | 属性列表 |

## 返回示例（MySQL/PostgreSQL）

```json
{
  "success": true,
  "message": "connection successful",
  "database": "students",
  "tables": [
    {
      "table_name": "users",
      "table_comment": "用户表",
      "ddl": "CREATE TABLE `users` (\n  `id` int(10) unsigned NOT NULL COMMENT '用户ID'\n  ...\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4",
      "columns": [
        {
          "column_name": "id",
          "data_type": "int",
          "column_type": "int(10) unsigned",
          "is_nullable": "NO",
          "default_value": "",
          "column_key": "PRI",
          "extra": "auto_increment",
          "column_comment": "",
          "mapped_name": "用户ID"
        }
      ]
    }
  ]
}
```

## 返回示例（Neo4j）

```json
{
  "success": true,
  "message": "connection successful",
  "database": "neo4j",
  "graphs": {
    "labels": [
      {"name": "User", "count": 100},
      {"name": "Order", "count": 50}
    ],
    "relationshipTypes": [
      {"name": "KNOWS", "count": 30},
      {"name": "OWNS", "count": 20}
    ],
    "nodes": [
      {
        "label": "User",
        "properties": [
          {"name": "id", "type": "string"},
          {"name": "name", "type": "string"}
        ]
      }
    ],
    "relationships": [
      {
        "type": "KNOWS",
        "startLabel": "User",
        "endLabel": "User",
        "properties": [
          {"name": "since", "type": "date"}
        ]
      }
    ]
  }
}
```

## 使用场景

1. **关系型数据库**：
   - 首次连接：不传 `database_id`，获取实时表结构
   - 恢复映射：传入 `database_id`，返回已保存的 `mapped_name` 和 `ddl`

2. **Neo4j 图数据库**：
   - 连接 Neo4j 并获取图谱概览数据（标签、关系类型、属性定义）
   - 用于前端图可视化展示
