Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Bagaimana cara memastikan integritas antara tabel yang tidak terkait?

Anda dapat melakukannya menggunakan redundansi terkontrol dan batasan FK komposit:

CREATE TABLE offr (
    offr_id INT NOT NULL,
    coy_id INT NOT NULL,
    PRIMARY KEY (offr_id),
    FOREIGN KEY (coy_id) REFERENCES ins_coy (coy_id),
    UNIQUE KEY (offr_id, coy_id)
);

Saya menambahkan kunci unik komposit (offr_id, coy_id) untuk mendukung batasan FK komposit pada subscribe tabel.

CREATE TABLE provide (
    coy_id INT NOT NULL,
    type_id INT NOT NULL,
    PRIMARY KEY (coy_id, type_id),
    FOREIGN KEY (coy_id) REFERENCES ins_coy (coy_id)
);

Kunci utama komposit di sini sangat cocok untuk batasan FK komposit pada subscribe tabel.

CREATE TABLE subscribe (
    naf_no INT NOT NULL,
    coy_id INT NOT NULL,
    type_id INT NOT NULL,
    PRIMARY KEY (naf_no, type_id),
    FOREIGN KEY (naf_no, coy_id) REFERENCES offr (offr_id, coy_id),
    FOREIGN KEY (coy_id, type_id) REFERENCES provide (coy_id, type_id)
);

Kendala FK gabungan yang tumpang tindih akan memastikan bahwa petugas hanya dapat berlangganan asuransi yang ditawarkan oleh perusahaan tempat dia terdaftar. coy_id secara logis berlebihan tetapi diperlukan untuk integritas dan tidak ada risiko anomali pembaruan karena kendala FK.

Atau, Anda dapat menggunakan pemicu untuk memeriksa apakah nilai terkait melalui gabungan dalam:

CREATE TRIGGER check_subscribe BEFORE INSERT OR UPDATE ON subscribe
FOR EACH ROW
WHEN NOT EXISTS (
    SELECT 1
    FROM offr
    INNER JOIN provide ON offr.coy_id = provide.coy_id
    WHERE offr.offr_id = new.naf_no AND provide.type_id = new.type_id
)
RAISE_APPLICATION_ERROR (num => -20000, msg => 'Officers can only subscribe to types provided by their company');

Penafian:Saya tidak dapat menguji ini di SqlFiddle dan tidak menginstal Oracle, tetapi mudah-mudahan ini akan mengarahkan Anda ke arah yang benar.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengapa saya mendapatkan kesalahan java.lang.AbstractMethodError:oracle.jdbc.driver.OracleConnection?

  2. COLLATION() Fungsi di Oracle

  3. Oracle BI Publisher - Cara memformat angka sebagai teks agar angka nol di depan tidak hilang

  4. Dapatkan hasil dari prosedur tersimpan Oracle

  5. Bagaimana saya bisa menyingkirkan tag XML kosong yang tidak diinginkan?