Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Các tham chiếu vòng tròn có được chấp nhận trong cơ sở dữ liệu không?

Xem xét các thành phố và tiểu bang. Mỗi thành phố tồn tại trong một tiểu bang. Mỗi tiểu bang có một thành phố thủ phủ.

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

Vấn đề đầu tiên - Bạn không thể tạo các bảng này như được hiển thị, vì khóa ngoại không thể tham chiếu đến một cột trong bảng chưa (chưa) tồn tại. Giải pháp là tạo chúng mà không có khóa ngoại, rồi thêm khóa ngoại sau đó.

Vấn đề thứ hai - bạn không thể chèn các hàng vào một trong hai bảng, vì mỗi lần chèn sẽ yêu cầu một hàng tồn tại trước trong bảng khác. Giải pháp là đặt một trong các cột khóa ngoại là NULL và chèn dữ liệu đó vào hai giai đoạn. ví dụ:

--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. Hợp nhất hai hàng thành một trong khi thay thế các giá trị rỗng

  2. Sống sót sau một cuộc kiểm tra Oracle

  3. Cách nhanh nhất để kiểm tra xem một số bản ghi trong một bảng cơ sở dữ liệu?

  4. Cách gửi email bằng Oracle 10 g Forms

  5. Tạo hồ sơ trong Oracle để bảo mật người dùng