[SQL] Unique Constraint

Status
Nicht offen für weitere Antworten.

Evolver

Bekanntes Mitglied
Ich habe nun eine SQL-Problem und ich kann die Lösung einfach nicht finden. Es etwas umfangreich, aber es wäre schön, wenn es sich trotzdem mal jemand ansehen könnte. Ich habe 3 Tabellen,die zusammenhängen, und immer wenn ich Elemente (bestehend aus einem Eintrag pro Tabelle) einfügen will erhalte ich Meldungen, dass UniqueConstraints verletzt sind.

Die Tabellen sind wie folgt definiert:
Code:
CREATE TABLE  "UMLMDEPENDENCY" 
   (	"VERSION" NUMBER(20,0), 
	"ID" VARCHAR2(255), 
	"STATUS" VARCHAR2(6) NOT NULL ENABLE, 
	"EDITOR" VARCHAR2(20), 
	"EDIT_DATE" TIMESTAMP (6), 
	"NAME" VARCHAR2(255), 
	"VISIBILITY" VARCHAR2(9), 
	"DBTYPE" VARCHAR2(30) NOT NULL ENABLE, 
	"ROLENAME" VARCHAR2(255), 
	"IDPARENT" VARCHAR2(255) NOT NULL ENABLE, 
	"VERSIONPARENT" NUMBER(20,0) NOT NULL ENABLE, 
	"MAPPINGKEY" NUMBER(20,0), 
	 CHECK (status IN ('INSERT','CHANGE', 'DELETE')) ENABLE, 
	 CHECK (visibility IN ('public', 'protected', 'private', 'package')) ENABLE, 
	 CHECK (dbType IN ('Dependency', 'Usage', 'Abstraction', 'Realization', 'Substitution', 'InterfaceRealization')) ENABLE, 
	 CONSTRAINT "UMLMDEPENDENCY_KEY" PRIMARY KEY ("VERSION", "ID") ENABLE, 
	 CONSTRAINT "UMLMDEPENDENCY_MK" FOREIGN KEY ("MAPPINGKEY")
	  REFERENCES  "UMLMOPAQUEEXPRESSION" ("TABLEKEY") ENABLE, 
	 CONSTRAINT "UMLMDEPENDENCY_PK" FOREIGN KEY ("VERSIONPARENT", "IDPARENT")
	  REFERENCES  "UMLMPACKAGE" ("VERSION", "ID") ENABLE, 
	 CONSTRAINT "UMLMDEPENDENCY_V" FOREIGN KEY ("VERSION")
	  REFERENCES  "VERSIONEN" ("TABLEKEY") ENABLE
   )


CREATE TABLE  "UMLMDEPENDENCYCLIENT" 
   (	"TABLEKEY" NUMBER(20,0), 
	"EDITOR" VARCHAR2(20), 
	"EDIT_DATE" TIMESTAMP (6), 
	"CLIENTID" VARCHAR2(255) NOT NULL ENABLE, 
	"CLIENTVERSION" NUMBER(20,0) NOT NULL ENABLE, 
	"CLIENTTABLENAME" VARCHAR2(255) NOT NULL ENABLE, 
	"DEPENDENCYID" VARCHAR2(255) NOT NULL ENABLE, 
	"DEPENDENCYVERSION" NUMBER(20,0) NOT NULL ENABLE, 
	 PRIMARY KEY ("TABLEKEY") ENABLE, 
	 CONSTRAINT "UMLMDEPENDENCYCLIENT_DK" FOREIGN KEY ("DEPENDENCYVERSION", "DEPENDENCYID")
	  REFERENCES  "UMLMDEPENDENCY" ("VERSION", "ID") ENABLE
   )



CREATE TABLE  "UMLMDEPENDENCYSUPPLIER" 
   (	"TABLEKEY" NUMBER(20,0), 
	"EDITOR" VARCHAR2(20), 
	"EDIT_DATE" TIMESTAMP (6), 
	"SUPPLIERID" VARCHAR2(255) NOT NULL ENABLE, 
	"SUPPLIERVERSION" NUMBER(20,0) NOT NULL ENABLE, 
	"SUPPLIERTABLENAME" VARCHAR2(255) NOT NULL ENABLE, 
	"DEPENDENCYID" VARCHAR2(255) NOT NULL ENABLE, 
	"DEPENDENCYVERSION" NUMBER(20,0) NOT NULL ENABLE, 
	 PRIMARY KEY ("TABLEKEY") ENABLE, 
	 CONSTRAINT "UMLMDEPENDENCYSUPPLIER_DK" FOREIGN KEY ("DEPENDENCYVERSION", "DEPENDENCYID")
	  REFERENCES  "UMLMDEPENDENCY" ("VERSION", "ID") ENABLE
   )

Das Ganze stellte eine Bezeihung dar und Client und Supplier sind deren "Mitglieder". Nun will ich eine Beziehung einfügen:
Code:
INSERT INTO umlmdependency (version, id, status, editor, edit_date, name, visibility, dbtype, rolename, idparent, versionparent, mappingkey)
VALUES (9, '-4d4c86dd:11575884e99:-7fa6', 'INSERT', 'BA', TO_TIMESTAMP_TZ('2007-10-06 15:37:45.89', 'YYYY-MM-DD HH24:MI:SS.FF'), null, 'public', 'InterfaceRealization', 'ownedMember', '-4d4c86dd:11575884e99:-7ff4', 9, null)

INSERT INTO umlmdependencysupplier (tablekey, editor, edit_date, supplierid, supplierversion, suppliertablename, dependencyid, dependencyversion)
VALUES (3, 'BA', TO_TIMESTAMP_TZ('2007-10-06 15:37:46.468', 'YYYY-MM-DD HH24:MI:SS.FF'), '-4d4c86dd:11575884e99:-7fa7', 9, 'UMLMClassifier', '-4d4c86dd:11575884e99:-7fa6', 9)

INSERT INTO umlmdependencyclient (tablekey, editor, edit_date, clientid, clientversion, clienttablename, dependencyid, dependencyversion)
VALUES (3, 'BA', TO_TIMESTAMP_TZ('2007-10-06 15:37:48.765', 'YYYY-MM-DD HH24:MI:SS.FF'), '-4d4c86dd:11575884e99:-7faa', 9, 'UMLMClassifier', '-4d4c86dd:11575884e99:-7fa6', 9)

Aber für den Client und den Supplier erhalte ich die Fehlermeldung, ein Unique Constraint sei verletzt oder so. Ich kann auch nach intensiver Suche den Fehler nicht finden. Bitte helft mir!
 
G

Guest

Gast
Ich habe es etwas modifiziert in einer H2 Datenbank angelegt (die FKs der nicht existierenden Tabellen entfernt und
die Timestamp-Konvertierung an die Syntax von H2 angepasst) und die drei Datensätze eingefügt. Keine Probleme.
Die Ursache muss also an bereits bestehenden Daten liegen. Prüfe auch die Constraints der FKs, ob da nicht irgendwo
per Default 'unique' angelegt wurde. Wenn eine Constraint-Verletzung vorliegt, sollte die Fehlermeldung die Id/Bezeichnung
des Constraints enthalten, welches die Ursache ist.
 

Evolver

Bekanntes Mitglied
Ganz selbststicher habe ich gestern behauptet, es läge nicht am Tablekey. Schließlich erzeuge ich den mit einer altbewährten Funktion, die auch in anderen Tabllen ihren Dienst tut. Heute habe ich dann festgestellt, dass ich den Tyblekey aus der falschen Tabelle geholt habe, darum kam es zu Überschneidungen.

@Gast: Danke für die Mühe.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben