sql >> Databáze >  >> RDS >> Oracle

Jsou v databázi přijatelné kruhové odkazy?

Zvažte města a státy. Každé město existuje v rámci státu. Každý stát má hlavní město.

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

První problém - Nemůžete vytvořit tyto tabulky, jak je znázorněno, protože cizí klíč nemůže odkazovat na sloupec v tabulce, která (zatím) neexistuje. Řešením je vytvořit je bez cizích klíčů a poté cizí klíče přidat.

Druhý problém – do žádné tabulky nelze vložit řádky, protože každé vložení bude vyžadovat již existující řádek v druhé tabulce. Řešením je nastavit jeden ze sloupců cizího klíče na hodnotu NULL a vložit tato data ve dvou fázích. např.

--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. SQL Jedinečné omezení napříč více tabulkami

  2. Proč se v SQL nemůže NULL shodovat s NULL?

  3. Jak nastavit oblast časového pásma pro připojení JDBC a vyhnout se tomu, že oblast časového pásma SqlException nebyla nalezena?

  4. Převeďte datový typ časového razítka do unixového časového razítka Oracle