
# U0000004：GaussDB的外键引用列必须是主键或者唯一键
#### 描述
**数据库类型与版本**
- 源库类型与版本：所有涉及表外键的源数据库类型。
- 目标库类型与版本：GaussDB集中式版。
**语法示例**
当UGO识别到外键的引用列不是主键或者唯一键时，将生成此错误提示。
GaussDB集中式版表外键约束的引用列必须是唯一键或者主键，如下示例在GaussDB集中式版中不支持。
```
CREATE TABLE demo1 (
    id INT,
    demo1_col VARCHAR(64)
);
CREATE TABLE demo2 (
    id INT,
    demo2_col VARCHAR(64),
    CONSTRAINT demo2_fk FOREIGN KEY (id) REFERENCES demo1 (id)
);
```
#### 改造建议
**方案一** ：如下示例所示，删除表外键约束。
```
CREATE TABLE demo2 (
    id INT,
    demo2_col VARCHAR(64)/*,
    CONSTRAINT demo2_fk FOREIGN KEY (id) REFERENCES demo1 (id)*/
);
```
此时需要通过业务来保证demo2表id列对demo1表id列的引用关系。
**方案二**：如下示例所示，将外键引用的列修改为主键约束或者唯一约束。
**ALTER TABLE demo1 ADD UNIQUE(id);**
这种情况下会修改demo1表的数据完整性约束，需要您充分评估业务影响。
