Considérez les villes et les états. Chaque ville existe dans un état. Chaque état a une capitale.
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)
);
Premier problème - Vous ne pouvez pas créer ces tables comme indiqué, car une clé étrangère ne peut pas référencer une colonne dans une table qui n'existe pas (encore). La solution consiste à les créer sans les clés étrangères, puis à ajouter les clés étrangères par la suite.
Deuxième problème - vous ne pouvez pas insérer de lignes dans l'une ou l'autre des tables, car chaque insertion nécessitera une ligne préexistante dans l'autre table. La solution consiste à définir l'une des colonnes de clé étrangère sur NULL et à insérer ces données en deux phases. ex.
--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';