Zum Inhalt springen

Fremdschlüssel in Oracle


Alex_winf01

Empfohlene Beiträge

Ich bin gerade dabei, die Tabellen in Oracle einzupflegen. Dabei habe ich folgendes Problem:

CREATE TABLE tabelle1

(

	nummer	varchar(10) 	NOT NULL,

	Jahr	Numeric(4) 	NOT NULL,

	nummer2	varchar(9)	NOT NULL,

	Primary Key(nummer, Jahr, nummer2)

);
CREATE TABLE IGFALL

(

	kh_id 					varchar(9) NOT NULL,

	kd_jahr 				Numeric(4) NOT NULL,

	fa_id 					Numeric(6) NOT NULL,

	PRIMARY KEY (kh_id, kd_jahr, fa_id),

	FOREIGN KEY (kh_id, kd_jahr) REFERENCES IK_Ueberleitung (nummer, jahr),

);

Nun bekomme ich folgenden Fehler:

ORA-02270: kein entsprechender Primär- o. eindeutiger Schlüssel für diese Spaltenliste.

Und es ist die Spalte nummer angegeben. Woran kann das liegen? Danke schon mal für die Hilfe.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also, folgendes habe ich mir angeschaut:

CREATE TABLE p

( p1 INTEGER NOT NULL, 

 p2 INTEGER NOT NULL, 

 PRIMARY KEY (p1, p2)

);

Was ist da bitte schön anders zu meinem CREATE TABLE:
CREATE TABLE tabelle1

(

	nummer	varchar(10) 	NOT NULL,

	Jahr	Numeric(4) 	NOT NULL,

	nummer2	varchar(9)	NOT NULL,

	Primary Key(nummer, Jahr, nummer2)

);

:confused:

Link zu diesem Kommentar
Auf anderen Seiten teilen

@ Tastenstreichler

Sorry, da habe ich mich hier im Forum vertippt. Da steht natürlich Tabelle1.:confused:

So sieht es bei mir aus:

CREATE TABLE IGFALL

(

	kh_id 					varchar(9) NOT NULL,

	kd_jahr 				Numeric(4) NOT NULL,

	fa_id 					Numeric(6) NOT NULL,

	PRIMARY KEY (kh_id, kd_jahr, fa_id),

	FOREIGN KEY (kh_id, kd_jahr) REFERENCES Tabelle1(nummer, jahr)

);

Bearbeitet von Alex_winf01
Link zu diesem Kommentar
Auf anderen Seiten teilen

@ Tastenstreicher

gerne:

CREATE TABLE tabelle1

(

	nummer	varchar(9) 	NOT NULL,

	Jahr	Numeric(4) 	NOT NULL,

	nummer2	varchar(9)	NOT NULL

);

Dann mache ich:
alter table tabelle1 add constraint tabelle1_pk unique (nummer, Jahr, nummer2);
Dann lege ich die 2. Tabelle an:
CREATE TABLE IGFALL

(

	kh_id 					varchar(9) NOT NULL,

	kd_jahr 				Numeric(4) NOT NULL,

	fa_id 					Numeric(6) NOT NULL

);
Dann mache ich:
alter table IGFALL add constraint igfall_pk unique (kh_id, kd_jahr, fa_id);

So, nun soll kh_id als Fremdschlüssel kh_id auf nummer und kd_jahr auf Jahr der Tabelle tabelle1 referenzieren.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Versuch mal das folgende gleich reinzukopieren. Soviel ich mitbekommen habe, willst Du doch nur jeweils 2 Spalten verbinden?



CREATE TABLE tabelle1

(

  nummer  varchar(9)  NOT NULL,

  Jahr  Numeric(4)   NOT NULL,

  nummer2  varchar(9)	NOT NULL,

  Primary Key(nummer, Jahr, nummer2)

);


alter table tabelle1 add constraint tabelle1_uni unique (nummer, Jahr);


CREATE TABLE IGFALL

(

  kh_id   varchar(9)   NOT NULL,

  kd_jahr  Numeric(4)   NOT NULL,

  fa_id   Numeric(6)   NOT NULL,

  PRIMARY KEY (kh_id, kd_jahr, fa_id)

);


ALTER table igfall ADD CONSTRAINT igfall_foreign FOREIGN KEY(kh_id, kd_jahr) REFERENCES tabelle1 (nummer, Jahr);


Ich hoffe ich habe keine Tippfehler gemacht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

also wenn ich auch noch meinen Senf dazu geben darf :D :

1. Ein PK ist impliziet schon Unique. Da brauchst Du keinen extra Unique Constraint mehr drauf setzen.

2. Ich kann nur dringendst empfehlen keine fachlichen Spalten als PK zu verwenden. Egal wie unveränderbar fest die auch momentan sein mögen. Fachliche Spalten haben in einem rein technischen PK nichts verloren. Dann braucht man auch keine seltsamen Kapriolen zu drehen.

Das würde dann z.B. so aussehen:

CREATE TABLE tabelle1

(

  id number primary key,

  nummer  varchar(9)  NOT NULL,

  Jahr  Numeric(4)   NOT NULL,

  nummer2  varchar(9)	NOT NULL

);


CREATE TABLE IGFALL

(

  id primary key,

  id_tabelle1 references tabelle1,

  kh_id   varchar(9)   NOT NULL,

  kd_jahr  Numeric(4)   NOT NULL,

  fa_id   Numeric(6)   NOT NULL

);

3. Der Datentyp in Oracle heißt VARCHAR2. Auch wenn varchar erlaubt ist, ist er grundsätzlich for future use reserviert. Oracle rät davon ab VARCHAR zu verwenden.

Dim

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...