Unique Fehler bei Insert

Kerugal

Benutzer
Beiträge
6
Hallo zusammen. ich komme gerade an einer Stelle nicht weiter, wie ich genau vorgehen soll.

Ich poste hier nur einen kleinen ausschnitt, sonst wird es glaube ich zuviel
Code:
DROP TABLE Arbeit;
DROP TABLE Arbeitspaket;
DROP TABLE Projekt;

CREATE TABLE Projekt(
PrNr INTEGER NOT NULL,
PrName VARCHAR (50),
PrLeiter  VARCHAR (50),
PRIMARY KEY(PrNr)
);

CREATE TABLE Arbeitspaket(
PrNr INTEGER NOT NULL,
PakNr INTEGER NOT NULL,
PakName VARCHAR (50),
PakLeiter  VARCHAR (50),
PRIMARY KEY(PakNr),
FOREIGN KEY(PrNr) REFERENCES Projekt(PrNr)
);

CREATE TABLE Arbeit(
PakNr INTEGER NOT NULL,
MiName VARCHAR (50),
Anteil INTEGER,
PRIMARY KEY(MiName),
FOREIGN KEY(PakNr) REFERENCES Arbeitspaket(PakNr)
);

INSERT INTO PROJEKT (PrNr,PrName,PrLeiter)
VALUES(3,'Fehlzeitendatenbank','Wachtig');

INSERT INTO Arbeitspaket (PrNr,PakNr,PakName,PakLeiter)
VALUES(1,1,'Analyse','Wichtig');


INSERT INTO Arbeit (PakNr,MiName,Anteil)
VALUES(1,'Wichtig',50);

Das problem,bei der letzten Tabelle Arbeit, tritt ein Fehler auf
*Cause: An UPDATE or INSERT statement attempted to insert a duplicate key.
For Trusted Oracle configured in DBMS MAC mode, you may see
this message if a duplicate entry exists at a different level.

Irgendwie stehe ich auf dem Schlauch...PakNr und MiName sollen Keys sein, sollte ich sie dann anders deklarieren?

Vielen Dank im Vorraus
 
Werbung:
In PostgreSQL kommt:

Code:
test=# CREATE TABLE Projekt(
test(# PrNr INTEGER NOT NULL,
test(# PrName VARCHAR (50),
test(# PrLeiter  VARCHAR (50),
test(# PRIMARY KEY(PrNr)
test(# );
CREATE TABLE
test=*#
test=*# CREATE TABLE Arbeitspaket(
test(# PrNr INTEGER NOT NULL,
test(# PakNr INTEGER NOT NULL,
test(# PakName VARCHAR (50),
test(# PakLeiter  VARCHAR (50),
test(# PRIMARY KEY(PakNr),
test(# FOREIGN KEY(PrNr) REFERENCES Projekt(PrNr)
test(# );
CREATE TABLE
test=*#
test=*# CREATE TABLE Arbeit(
test(# PakNr INTEGER NOT NULL,
test(# MiName VARCHAR (50),
test(# Anteil INTEGER,
test(# PRIMARY KEY(MiName),
test(# FOREIGN KEY(PakNr) REFERENCES Arbeitspaket(PakNr)
test(# );
CREATE TABLE
test=*#
test=*# INSERT INTO PROJEKT (PrNr,PrName,PrLeiter)
test-# VALUES(3,'Fehlzeitendatenbank','Wachtig');
INSERT 0 1
test=*#
test=*# INSERT INTO Arbeitspaket (PrNr,PakNr,PakName,PakLeiter)
test-# VALUES(1,1,'Analyse','Wichtig');
ERROR:  insert or update on table "arbeitspaket" violates foreign key constraint "arbeitspaket_prnr_fkey"
DETAIL:  Key (prnr)=(1) is not present in table "projekt".
test=*#
test=*#
test=*# INSERT INTO Arbeit (PakNr,MiName,Anteil)
test-# VALUES(1,'Wichtig',50);
ERROR:  insert or update on table "arbeit" violates foreign key constraint "arbeit_paknr_fkey"
DETAIL:  Key (paknr)=(1) is not present in table "arbeitspaket".

was ja so auch Sinn macht und korrekt ist.
 
Bei mir ist auch der FK verletzt, eventuell hast du aber nur einen relevanten Eintrag vergessen und auch das Problem wird durch einen INSERT verursacht der in deiner gekürzten Fassung nicht steht.
 
Oh man, ich könnte gerade verzweifeln. Ich hab nochmal ein wenig rumprobiert aber er zeigt immer noch die Schlüsselverletzung an.
Hier nochmal der gesamte Code
Code:
DROP TABLE Arbeit;
DROP TABLE Arbeitspaket;
DROP TABLE Projekt;

CREATE TABLE Projekt(
PrNr INTEGER NOT NULL,
PrName VARCHAR (50),
PrLeiter  VARCHAR (50),
PRIMARY KEY(PrNr)
);

CREATE TABLE Arbeitspaket(
PrNr INTEGER NOT NULL,
PakNr INTEGER NOT NULL,
PakName VARCHAR (50),
PakLeiter  VARCHAR (50)
);

Alter Table Arbeitspaket
ADD
PRIMARY KEY(PakNr);
Alter Table Arbeitspaket
ADD
FOREIGN KEY(PrNr) REFERENCES Projekt(PrNr);

CREATE TABLE Arbeit(
PakNr INTEGER NOT NULL,
MiName VARCHAR (50) NOT NULL,
Anteil INTEGER
);

ALTER TABLE Arbeit
ADD
FOREIGN KEY(PakNr) REFERENCES Arbeitspaket(PakNr);
ALTER TABLE Arbeit
ADD
PRIMARY KEY(MiName);

INSERT INTO PROJEKT (PrNr,PrName,PrLeiter)
VALUES(1,'Notendatenbank','Wichtig');
INSERT INTO PROJEKT (PrNr,PrName,PrLeiter)
VALUES(2,'Adressdatenbank','Wuchtig');
INSERT INTO PROJEKT (PrNr,PrName,PrLeiter)
VALUES(3,'Fehlzeitendatenbank','Wachtig');

INSERT INTO Arbeitspaket (PrNr,PakNr,PakName,PakLeiter)
VALUES(1,1,'Analyse','Wichtig');
INSERT INTO Arbeitspaket (PrNr,PakNr,PakName,PakLeiter)
VALUES(1,2,'Modell','Wuchtig');
INSERT INTO Arbeitspaket (PrNr,PakNr,PakName,PakLeiter)
VALUES(1,3,'Implementierung','Mittel');
INSERT INTO Arbeitspaket (PrNr,PakNr,PakName,PakLeiter)
VALUES(2,4,'Modell','Durch');
INSERT INTO Arbeitspaket (PrNr,PakNr,PakName,PakLeiter)
VALUES(2,5,'Implementierung','Mittel');
INSERT INTO Arbeitspaket (PrNr,PakNr,PakName,PakLeiter)
VALUES(3,6,'Modell','Schnitt');
INSERT INTO Arbeitspaket (PrNr,PakNr,PakName,PakLeiter)
VALUES(3,7,'Implemtierung','Hack');


INSERT INTO Arbeit (PakNr,MiName,Anteil)
VALUES(1,'Wichtig',50);
INSERT INTO Arbeit (PakNr,MiName,Anteil)
VALUES(1,'Klein',30);
INSERT INTO Arbeit (PakNr,MiName,Anteil)
VALUES(2,'Winzig',100);
INSERT INTO Arbeit (PakNr,MiName,Anteil)
VALUES(3,'Hack',70);
INSERT INTO Arbeit (PakNr,MiName,Anteil)
VALUES(4,'Maler',40);
INSERT INTO Arbeit (PakNr,MiName,Anteil)
VALUES(4,'Schreiber',30);
INSERT INTO Arbeit (PakNr,MiName,Anteil)
VALUES(6,'Maler',30);
INSERT INTO Arbeit (PakNr,MiName,Anteil)
VALUES(6,'Schreiber',40);
INSERT INTO Arbeit (PakNr,MiName,Anteil)
VALUES(7,'Hack',50);

Das komische ist, das er mir den ersten Fehler bei Zeile 74 anzeigt. also bei

INSERT INTO Arbeit (PakNr,MiName,Anteil)
VALUES(6,'Maler',30);

Ich sehe aber darin keinen Sinn...ich habe ja kein Attribut als Unique gekennzeichnet, oder?
 
Ok, jetzt habe ich zumindest erkannt wo der Fehler liegt.
Wenn ich MiName in der Tabelle Arbeit doppelt deklariere...
Aber dann stellt sich die Frage bei mir, wie umgehe ich dieses Problem wenn ich in als Key benutzen soll, aber auch doppelt vorkommen soll?

Vielen Dank übrigends schonmal für die tolle Hilfe hier :)
 
Werbung:
Zurück
Oben