簡體   English   中英

自我參照表:UNIQUE約束失敗(SQL)

[英]Self Referencing table : UNIQUE constraint failed (SQL)

建築

我有以下自我參考表。 每個實體與1到多個實體都有一個關系。

在此處輸入圖片說明

因為它是一對多關系,所以我用表表示“ 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約束失敗:RELATION_ENTITY.ID,RELATION_ENTITY.ID_DESTINATION

我知道為什么會收到此錯誤。 我在表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表中您具有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的重復值,則可以使用代理主鍵(例如autonumber int),也可以使用id_relation ,並為其他三列使用唯一約束,或者也可以擴展主鍵以包括value列因此它將是PRIMARY KEY(ID_SOURCE,ID_DESTINATION,VALUE)

如果要在聯接中引用此表,則使用代理鍵可能會使您的生活更輕松。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM