Overvej byer og stater. Hver by eksisterer i en stat. Hver stat har en hovedstad.
CREATE TABLE city (
city VARCHAR(32),
state VARCHAR(32) NOT NULL,
PRIMARY KEY (city),
FOREIGN KEY (state) REFERENCES state (state)
);
CREATE TABLE state (
state VARCHAR(32),
capital_city VARCHAR(32),
PRIMARY KEY (state),
FOREIGN KEY (capital_city) REFERENCES city (city)
);
Første problem - Du kan ikke oprette disse tabeller som vist, fordi en fremmednøgle ikke kan referere til en kolonne i en tabel, der (endnu) ikke eksisterer. Løsningen er at oprette dem uden fremmednøglerne, og så tilføje fremmednøglerne bagefter.
Andet problem - du kan ikke indsætte rækker i nogen af tabellerne, da hver indsættelse kræver en allerede eksisterende række i den anden tabel. Løsningen er at indstille en af de fremmede nøglekolonner til at være NULL og indsætte disse data i to faser. f.eks.
--Create state record
INSERT INTO state (state, capital_city) VALUES ('Florida', NULL);
--Create various city records
INSERT INTO city (city, state) VALUES ('Miami', 'Florida');
INSERT INTO city (city, state) VALUES ('Tallahassee', 'Florida');
INSERT INTO city (city, state) VALUES ('Orlando', 'Florida');
--Set one of the cities as the capital
UPDATE state SET capital_city = 'Tallahassee' WHERE state = 'Florida';