自引用 table:唯一约束失败 (SQL)

Self Referencing table : UNIQUE constraint failed (SQL)

建筑

我有以下自引用 table。每个实体都与 1 到多个实体有关系。

表格

因为它是一对多关系,所以我用 table.

表示 Relation
CREATE TABLE ENTITY (ID TEXT PRIMARY KEY NOT NULL, VALUE TEXT);
CREATE TABLE RELATION (ID_SOURCE TEXT NOT NULL, ID_DESTINATION TEXT NOT NULL, PREDICAT TEXT, PRIMARY KEY(ID_SOURCE, ID_DESTINATION), FOREIGN KEY(ID_SOURCE) REFERENCES ENTITE(ID), FOREIGN KEY(ID_DESTINATION) REFERENCES ENTITE(ID));

问题

当我插入值时出现以下错误:

UNIQUE constraint failed: RELATION_ENTITY.ID, RELATION_ENTITY.ID_DESTINATION

我知道为什么会出现此错误。我在 table Relation 中插入相同的 ID,但值不同。实体 m.06y3r 引用具有两个不同值的实体 m.02jvmvm。我该如何解决这个设计错误?

ID_SOURCE    ID_DESTINATION          VALUE
 m.06y3r       m.02jvmvm        adopted_child.adoptive
 m.06y3r       m.02jvmvm        people.person.parents

这都是因为在 Relation table 中你有 PRIMARY KEY(ID_SOURCE, ID_DESTINATION) 所以这两个值必须创建唯一的集合。如果将其更改为 PRIMARY KEY(ID_SOURCE, ID_DESTINATION, VALUE),那么它应该可以正常工作。

编辑

下面评论中提到的解决方案示例:

CREATE TABLE RELATION (
    ID INT NOT NULL,
    ID_SOURCE TEXT NOT NULL,
    ID_DESTINATION TEXT NOT NULL,
    VALUE TEXT,

    PRIMARY KEY(ID), 
    UNIQUE (ID_SOURCE, ID_DESTINATION, VALUE)
    FOREIGN KEY(ID_SOURCE) REFERENCES ENTITE(ID),
    FOREIGN KEY(ID_DESTINATION) REFERENCES ENTITE(ID));

如果您想要 id_sourceid_destination 具有重复值的行,您可以使用代理项主键(如自动编号 int),可能 id_relation,以及其他三个列的唯一约束,或者扩展主键以也包含值列,这样它将是 PRIMARY KEY( ID_SOURCE, ID_DESTINATION, VALUE).

如果您想在联接中引用此 table,使用代理键可能会让您的生活更轻松。