Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Czy odwołania cykliczne są dopuszczalne w bazie danych?

Weź pod uwagę miasta i stany. Każde miasto istnieje w państwie. Każdy stan ma stolicę.

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

Pierwszy problem — nie można utworzyć tych tabel, jak pokazano, ponieważ klucz obcy nie może odwoływać się do kolumny w tabeli, która (jeszcze) nie istnieje. Rozwiązaniem jest utworzenie ich bez kluczy obcych, a następnie dodanie kluczy obcych.

Drugi problem - nie możesz wstawić wierszy do żadnej tabeli, ponieważ każde wstawienie będzie wymagało wcześniejszego wiersza w drugiej tabeli. Rozwiązaniem jest ustawienie jednej z kolumn klucza obcego na wartość NULL i wstawienie tych danych w dwóch fazach. np.

--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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA - 00933 zamieszanie ze sprzężeniem wewnętrznym i as

  2. Kiedy muszę użyć średnika, a kiedy ukośnika w Oracle SQL?

  3. .patch_storage

  4. Wstaw obiekt BLOB w bazie danych Oracle za pomocą C#

  5. Jak przekonwertować wiersze na kolumny w Oracle?