sql >> Database teknologi >  >> RDS >> Oracle

Er cirkulære referencer acceptable i databasen?

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';

  1. Sådan oprettes fremmednøglebegrænsning på flere kolonner i SQL Server - SQL Server / TSQL vejledning del 67

  2. Sådan fungerer MATCH MOD I MariaDB

  3. jQuery Valider fjernmetodebrug for at kontrollere, om brugernavnet allerede eksisterer

  4. Hvordan CONVERT_TZ() virker i MariaDB