Denk aan steden en staten. Elke stad bestaat binnen een staat. Elke staat heeft een hoofdstad.
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)
);
Eerste probleem - U kunt deze tabellen niet maken zoals weergegeven, omdat een externe sleutel niet kan verwijzen naar een kolom in een tabel die (nog) niet bestaat. De oplossing is om ze aan te maken zonder de externe sleutels en daarna de externe sleutels toe te voegen.
Tweede probleem - u kunt geen rijen invoegen in beide tabellen, omdat voor elke invoeging een reeds bestaande rij in de andere tabel nodig is. De oplossing is om een van de refererende-sleutelkolommen op NULL te zetten en die gegevens in twee fasen in te voegen. bijv.
--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';