如何在数组数据类型的元素上添加外键约束

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在数组数据类型的元素上添加外键约束相关的知识,希望对你有一定的参考价值。

我正在尝试执行此hsql查询但我得到了execetion,因为PATIENTVISIT中的'SYMPTOMS'是Array Varchar()类型,其中表SYMPTOMS中的'SYMPTOM_NAME'是varchr()类型:

 ALTER TABLE PATIENTVISIT ADD CONSTRAINT IF NOT EXISTS 
 PATIENTVISIT_SYMPTOMS_FK FOREIGN KEY (SYMPTOMS) REFERENCES SYMPTOMS(SYMPTOM_NAME);

我得到的例外是:

 java.sql.SQLSyntaxErrorException: incompatible data types in combination in statement [ALTER TABLE PATIENTVISIT ADD CONSTRAINT IF NOT EXISTS PATIENTVISIT_SYMPTOMS_FK FOREIGN KEY (SYMPTOMS) REFERENCES SYMPTOMS(SYMPTOM_NAME)]

如何解决此问题或解决方法是什么?

答案

您只希望将SYSMPTOM_NAME列中的值用作PATIENTVISIT中数组的元素。只允许识别的SYMPTOM_NAME值作为有效症状。

无法使用FOREIGN KEY定义此类约束。

您可以在PATIENTVISIT表上使用TRIGGER,该表根据SYMPTOMS表中的元素检查数组的所有元素,如果存在无法识别的值,则抛出异常。

CREATE TRIGGER CHECK_VALUES BEFORE INSERT ON PATIENTVISIT REFERENCING NEW  ROW AS NEWROW FOR EACH ROW 
BEGIN ATOMIC
 IF EXISTS (SELECT TRUE FROM UNNEST (NEWROW.SYMPTOMS) X(A) LEFT JOIN SYMPTOMS ON X.A = SYMPTOMS.SYMPTOM_NAME WHERE SYMPTOMS.SYMPTOM_NAME IS NULL)
  THEN
    SIGNAL SQLSTATE '45000';
  END IF;
END

以上是关于如何在数组数据类型的元素上添加外键约束的主要内容,如果未能解决你的问题,请参考以下文章

SQL中如何为表添加外键约束

如何修复此错误 3734:无法在 MySQL WorkBench 上添加外键约束?

怎么添加外键约束

数据库 两表互为外键,如何添加数据

SQL 怎样删除有外键约束的表

在MySQL中如何设置主键和外键