[英]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_source和id_destination的重復值,則可以使用代理主鍵(例如autonumber int),也可以使用id_relation
,並為其他三列使用唯一約束,或者也可以擴展主鍵以包括value列因此它將是PRIMARY KEY(ID_SOURCE,ID_DESTINATION,VALUE) 。
如果要在聯接中引用此表,則使用代理鍵可能會使您的生活更輕松。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.