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

Bisakah Kunci Asing menjadi nol?

Kolom (atau kolom) dari kunci utama harus NOT NULL. Catatan tidak dapat diidentifikasi secara unik oleh NULL. Jadi kolom ID di ujung referensi kunci asing harus didefinisikan sebagai NOT NULL.

Namun, itu adalah keputusan desain yang sah untuk hubungan kunci asing menjadi opsional, dan cara untuk mewakilinya adalah dengan membuat akhir referensi dari kunci opsional, yaitu mengizinkan NULL.

Dalam istilah pemodelan data, apa yang telah Anda gambarkan adalah busur (eksklusif):"tabel ... dengan dua atau lebih kunci asing di mana satu dan hanya satu dari mereka dapat menjadi non-null." Dalam pemodelan logis, busur sangat dapat diterima, tetapi ada pendapat kuat yang mendukung penerapannya sebagai tabel terpisah. Dalam skenario Anda, itu akan menjadi Sale generik tabel ditambah dua sub-jenis tabel, VehicleSale dan PieceSale .

Keuntungan dari implementasi tabel terpisah adalah:

  • lebih mudah untuk menerapkan batasan kunci asing;
  • lebih mudah untuk menambahkan kolom tambahan yang berkaitan dengan (misalnya) penjualan kendaraan yang tidak berlaku untuk penjualan satuan;
  • lebih mudah untuk memperluas model dengan sub-jenis tambahan;
  • model data yang lebih jelas, yang dapat menyederhanakan pengembangan aplikasi.

Namun, keuntungannya tidak semuanya satu arah. Meskipun cukup mudah untuk memastikan bahwa Sale berlaku untuk VehicleSale atau PieceSale tetapi tidak keduanya, menerapkan aturan bahwa Sale harus memiliki catatan anak benar-benar menjadi sangat buruk.

Jadi, saran yang berlaku adalah bahwa busur eksklusif salah, dan umumnya saran yang baik. Tapi itu tidak sejelas yang terlihat beberapa orang.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Formulir Oracle dalam R12/R12.2

  2. Tabel kueri dari database ORACLE lain

  3. Hitung Jumlah durasi dalam kueri sql

  4. Mengakses tabel pengguna lain dalam Oracle Stored Procedure

  5. Data dikelompokkan berdasarkan tanggal di Oracle sql