
# DDL标签使用指南
DDL，即数据定义语言（Data Definition Language），是SQL（结构化查询语言）的一部分，用于定义和管理数据库的结构。导入DDL通常指的是将数据库结构定义导入到数据库管理系统中，以便创建或修改数据库的模式。
本章节将为您介绍一系列核心DDL标签，帮助简化您的开发流程并提高编辑效率。
#### 注意事项
- SwaggerCodeGen会将n、FALSE、 No和off转换成boolean类型的false，将Y、true、Yes和ON转换成boolean类型的true，所以在java代码编译时会报错。因此"是否生成客户端"开关打开时，表中定义上述字段时可使用"[别名标签]"给字段设置别名。
- 关系表标识：含有"_rel_"的表名，大小写不敏感。例如：t_rel_workspace4_workspace5。
 
#### 关系标签
- **一对多关系**
  在MANY一方的关系字段上添加标注：COMMENT 'relation("关联表名","关联表字段","ONE2MANY")'。
  DDL示例：
  ```
  CREATE TABLE `t_workspace2` (
      `id` varchar(200) NOT NULL,
      `new_name3` varchar(200) NOT NULL,
      `new_name4` varchar(200) NOT NULL,
      PRIMARY KEY (`id`)
  ) COMMENT = 'primaryKeyType("UUID")';
  CREATE TABLE `t_workspace3` (
      `id` varchar(200) NOT NULL,
      `new_name4` varchar(200) NOT NULL,
      `workspace2_id` varchar(200) NOT NULL COMMENT 'searchable;relation("t_workspace2","id","ONE2MANY")',
      PRIMARY KEY (`id`)
  ) COMMENT = 'primaryKeyType("UUID")';
  ```
  标签使用效果：
  ![](https://support.huaweicloud.com/usermanual-astropro/zh-cn_image_0000002012688929.png)
  
- **多对多关系**
  在多对多关系表的关系字段上添加标注：COMMENT = 'relation("关联表名","关联表字段","MANY2MANY")'。
  ![](https://support.huaweicloud.com/usermanual-astropro/public_sys-resources/note_3.0-zh-cn.png)
  此处关系的首要方关联字段写在关系的次要方关联字段前面，即workspace4_id字段在workspace5_id前面。示例中首要方：t_workspace4，次要方：t_workspace5。
  DDL示例：
  ```
  CREATE TABLE `t_workspace4` (
      `id` varchar(200) NOT NULL,
      `new_name3` varchar(200) NOT NULL,
      `new_name4` varchar(200) NOT NULL,
      PRIMARY KEY (`id`)
  ) COMMENT = 'primaryKeyType("UUID")';
  CREATE TABLE `t_workspace5` (
      `id` varchar(200) NOT NULL,
      `new_name3` varchar(200) NOT NULL,
      `new_name4` varchar(200) NOT NULL,
      `new_name5` varchar(200) NOT NULL,
      PRIMARY KEY (`id`)
  ) COMMENT = 'primaryKeyType("UUID")';
  CREATE TABLE `t_rel_workspace4_workspace5` (
      `new_name3` varchar(200) NOT NULL,
      `new_name4` varchar(200) NOT NULL,
      `workspace4_id` varchar(200) NOT NULL COMMENT 'relation("t_workspace4","id","MANY2MANY")',
      `workspace5_id` varchar(200) NOT NULL COMMENT 'relation("t_workspace5","id","MANY2MANY")',
      CONSTRAINT pk_t_rel_workspace4_workspace5 PRIMARY KEY (`workspace4_id`, `workspace5_id`)
  ) COMMENT = 'relWorkspace4Workspace5';
  ```
  标签使用效果：
  ![](https://support.huaweicloud.com/usermanual-astropro/zh-cn_image_0000002009934157.png)
  
- **聚合关系**
  在聚合关系的主表的关系字段上添加标注：COMMENT 'relation("关联表名","关联表字段","AGGREGATE")'。
  DDL示例：
  ```
  CREATE TABLE `t_spec_group` (
      `id` varchar(40) NOT NULL COMMENT 'id',
      `city_id` varchar(40) NOT NULL COMMENT 'relation("t_city","id","AGGREGATE")',
      `name` varchar(200) NULL,
      PRIMARY KEY (`id`)
  ) COMMENT = 'specGroup';
  CREATE TABLE `t_city` (
      `id` varchar(40) NOT NULL COMMENT 'id',
      `city` varchar(200) NULL,
      `dateType` date NOT NULL COMMENT 'dateType',
      PRIMARY KEY (`id`)
  ) COMMENT = 'city';
  ```
  标签使用效果：
  ![](https://support.huaweicloud.com/usermanual-astropro/zh-cn_image_0000001973296490.png)
  
- **树递归关系**
  在树递归关系BO表中的"parent_id"上添加标注：COMMENT 'relation("关联表名","关联表字段","RECURSIVE")'。
  DDL示例：
  ```
  CREATE TABLE `t_workspace6` (
      `parent_id` bigint(40) NULL COMMENT 'parent_id;relation("t_workspace6","id","RECURSIVE")',
      `id` bigint(40) NOT NULL,
      `new_name4` varchar(200) NOT NULL,
      `new_name5` varchar(200) NOT NULL,
      PRIMARY KEY (`id`)
  ) COMMENT = 'primaryKeyType("SNOWFLAKE")';
  ```
  标签使用效果：
  ![](https://support.huaweicloud.com/usermanual-astropro/zh-cn_image_0000002009937941.png)
  
 
#### 主键标签
在comment中使用函数形式表示主键类型。可选值为：UUID、SNOWFLAKE、AUTO_INCREASE_INT32、AUTO_INCREASE_INT64、USER_DEFINE。
参数说明：
- 标签名称：valueObject。
- 数据类型：boolean类型。
- 默认值：false。
标签规则
- UUID时主键应是字符类型。
- AUTO_INCREASE_INT32的主键应是int类型。
- AUTO_INCREASE_INT64的主键应是bigint类型。
- SNOWFLAKE时主键应是数值（int/long）类型。
- 非USER_DEFINE的主键时，主键名不是"id"。
- USER_DEFINE的主键时，未指定主键字段。
- 同时非USER_DEFINE时，可以不指定主键（即ddl中可以没有primary key的声明语句）。
- 当未指定标签时，指定主键情况下主键类型默认为USER_DEFINE； 未指定主键默认为UUID。
 
标签示例：
```
CREATE TABLE `t_workspace4` (
    `id` varchar(200) NOT NULL,
    `new_name3` varchar(200) NOT NULL,
    `new_name4` varchar(200) NOT NULL,
    PRIMARY KEY (`id`)
) COMMENT = 'primaryKeyType("UUID")';
```
标签使用效果：
![](https://support.huaweicloud.com/usermanual-astropro/zh-cn_image_0000002009939753.png)
#### 值对象标签
在comment中使用函数形式表示Value Object类型BO，标识作用于值对象表的number字段。
参数说明：
- 标签名称：valueObject。
- 数据类型：boolean类型。
- 默认值：false。
标签示例：
```
CREATE TABLE `t_workspace9` (
    `id` varchar(40) NOT NULL COMMENT 'id',
    `name` varchar(200) NOT NULL COMMENT 'name',
    PRIMARY KEY (`id`)
) COMMENT = 't_workspace9';
CREATE TABLE `t_object1` (
    `workspace9_id` varchar(0) NOT NULL COMMENT 'relation("t_workspace9","id","AGGREGATE")',
    `number` int NOT NULL COMMENT 'valueObject'
) COMMENT = 'object1';
```
标签使用效果：
![](https://support.huaweicloud.com/usermanual-astropro/zh-cn_image_0000001973463158.png)
#### 字段允许搜索标签
在comment中使用函数形式表示字段允许搜索，标识作用于表中需设置为searchable的字段。
参数说明：
- 标签名称：searchable。
- 数据类型：boolean类型。
- 默认值：false。
标签示例：
```
CREATE TABLE `t_workspace9` (
    `id` varchar(40) NOT NULL COMMENT 'id',
    `name` varchar(200) NOT NULL COMMENT 'name;searchable',
    PRIMARY KEY (`id`)
) COMMENT = 'workspace9';
```
与其他标签同时使用";"分隔使用示例：
```
CREATE TABLE `t_object1` (
    `workspace9_id` varchar(0) NOT NULL COMMENT 'relation("t_workspace9","id","AGGREGATE");searchable',
    `number` int NOT NULL COMMENT 'valueObject'
) COMMENT = 'object1';
```
标签使用效果：
![](https://support.huaweicloud.com/usermanual-astropro/zh-cn_image_0000001973307422.png)
 #### 别名标签
在comment中使用函数形式标识字段或表的别名，标识作用于表中字段或表名。
参数说明：
- 标签名称：alias。
- 数据类型：string类型。
- 默认值：空（原字段名或表名）。
标签示例：
```
CREATE TABLE `t_workspace9` (
    `id` varchar(40) NOT NULL COMMENT 'id',
    `name` varchar(200) NOT NULL COMMENT 'alias("rename");searchable',
    PRIMARY KEY (`id`)
) COMMENT = 'alias("workspace10")';
```
标签使用效果：
- 表名别名效果： ![](https://support.huaweicloud.com/usermanual-astropro/zh-cn_image_0000001973316534.png)
  

- 字段别名效果： ![](https://support.huaweicloud.com/usermanual-astropro/zh-cn_image_0000001973316910.png)
  
 
#### 字段数据类型标签
在comment中使用函数形式标识字段的数据类型，标识作用于表中字段，可使标识字段数据类型在模型中修改为标识类型。
参数说明：
- 标签名称：type。
- 数据类型：string类型。
- 默认值：空（原字段数据库类型对应的java类型）。
 
标签示例：
```
CREATE TABLE `t_workspace9` (
    `id` varchar(40) NOT NULL COMMENT 'id',
    `name` varchar(200) NOT NULL COMMENT 'type("integer")',
    PRIMARY KEY (`id`)
) COMMENT = 't_workspace9';
```
标签使用效果：
![](https://support.huaweicloud.com/usermanual-astropro/zh-cn_image_0000001973478826.png)
