sql >> Database >  >> RDS >> Oracle

Probleem met het maken van externe sleutels in Oracle

Als je FK toevoegt, koppel je een kolom als kind van de tabel die u aan het maken bent, naar zijn ouder van de oudertafel. Daarom moet u de naam van de onderliggende kolom opgeven, evenals de naam van de bovenliggende kolom.

De algemene syntaxis is

CREATE TABLE table_name
(
  column1 datatype null/not null,
  column2 datatype null/not null,
  ...

  CONSTRAINT fk_column
    FOREIGN KEY (column1, column2, ... column_n)
    REFERENCES parent_table (column1, column2, ... column_n)
);

Merk op dat de kolommen tussen FOREIGN KEY haakjes, komen uit de tabel die u aan het maken bent, terwijl de kolommen tussenN REFERENCES PARENT_TABLE zijn van de bovenliggende tabel.

U heeft geen kolom met de naam CollectibleNum in jeDiecastItems . Daarom werkt het volgende prima door zo'n kolom toe te voegen:

CREATE TABLE collectibles 
  ( 
     collectiblenum NUMBER(10) NOT NULL, 
     CONSTRAINT collectibles_pk PRIMARY KEY(collectiblenum) 
  ); 

CREATE TABLE diecastitems 
  ( 
     diecastname    VARCHAR2(45) NOT NULL, 
     diecastcopy    NUMBER(2) NOT NULL, 
     diecastscale   VARCHAR2(25), 
     colorscheme    VARCHAR2(25), 
     diecastyear    NUMBER(4), 
     collectiblenum NUMBER(10),   --added column
     CONSTRAINT diecastitem_pk PRIMARY KEY(diecastname, diecastcopy), 
     CONSTRAINT diecastitem_collectible_fk FOREIGN KEY(collectiblenum) 
     REFERENCES collectibles(collectiblenum) 
  ); 

FIDDLE




  1. Zet postgres-datumweergave om in ISO 8601-tekenreeks

  2. Voorkomen dat wijzigingen worden opgeslagen waarvoor de tabel opnieuw moet worden gemaakt, negatieve effecten

  3. Optionele afhankelijkheden creëren

  4. CASE-expressies gebruiken in SQL Server