Pertimbangkan kota dan negara bagian. Setiap kota ada di dalam negara bagian. Setiap negara bagian memiliki ibu kota.
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)
);
Masalah pertama - Anda tidak dapat membuat tabel ini seperti yang ditunjukkan, karena kunci asing tidak dapat mereferensikan kolom dalam tabel yang belum (belum) ada. Solusinya adalah membuatnya tanpa kunci asing, lalu tambahkan kunci asing setelahnya.
Masalah kedua - Anda tidak dapat menyisipkan baris ke salah satu tabel, karena setiap sisipan akan memerlukan baris yang sudah ada sebelumnya di tabel lain. Solusinya adalah mengatur salah satu kolom kunci asing menjadi NULL, dan memasukkan data itu dalam dua fase. misalnya
--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';