Oracle
 sql >> база данни >  >> RDS >> Oracle

Приемливи ли са кръговите препратки в базата данни?

Помислете за градовете и щатите. Всеки град съществува в рамките на държава. Всеки щат има столица.

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

Първи проблем - Не можете да създадете тези таблици, както е показано, защото външен ключ не може да препраща към колона в таблица, която (все още) не съществува. Решението е да ги създадете без външни ключове и след това да добавите външните ключове.

Втори проблем - не можете да вмъквате редове в нито една таблица, тъй като всяко вмъкване ще изисква вече съществуващ ред в другата таблица. Решението е да зададете една от колоните с външния ключ да бъде NULL и да вмъкнете тези данни на две фази. напр.

--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. Как да заредя JAR файл в базата данни на Oracle?

  2. Lighty за Oracle

  3. Създаване или симулиране на двумерни масиви в PL/SQL

  4. Как да извлечете данни от курсора в Oracle, използвайки For Loop

  5. Escape символ на Oracle pl-sql (за ' )