Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bisakah kunci asing menjadi NULL dan/atau duplikat?

Jawaban singkat:Ya, bisa NULL atau duplikat.

Saya ingin menjelaskan mengapa kunci asing mungkin perlu nol atau mungkin perlu unik atau tidak unik. Pertama, ingat kunci Asing hanya mengharuskan nilai di bidang itu harus ada terlebih dahulu di tabel yang berbeda (tabel induk). Itu saja menurut definisi FK. Null menurut definisi bukanlah nilai. Null artinya kita belum tahu berapa nilainya.

Biarkan saya memberi Anda contoh kehidupan nyata. Misalkan Anda memiliki database yang menyimpan proposal penjualan. Misalkan lebih lanjut bahwa setiap proposal hanya memiliki satu staf penjualan yang ditugaskan dan satu klien. Jadi tabel proposal Anda akan memiliki dua kunci asing, satu dengan ID klien dan satu dengan ID perwakilan penjualan. Namun, pada saat catatan dibuat, perwakilan penjualan tidak selalu ditugaskan (karena belum ada yang bebas mengerjakannya), jadi ID klien diisi tetapi ID perwakilan penjualan mungkin nol. Dengan kata lain, biasanya Anda memerlukan kemampuan untuk memiliki FK nol ketika Anda mungkin tidak mengetahui nilainya pada saat data dimasukkan, tetapi Anda mengetahui nilai lain dalam tabel yang perlu dimasukkan. Untuk mengizinkan null di FK umumnya yang harus Anda lakukan adalah mengizinkan null di bidang yang memiliki FK. Nilai nol terpisah dari gagasan bahwa itu adalah FK.

Apakah unik atau tidak unik berkaitan dengan apakah tabel memiliki hubungan satu-satu atau satu-banyak ke tabel induk. Sekarang jika Anda memiliki hubungan satu-satu, adalah mungkin bahwa Anda dapat memiliki semua data dalam satu tabel, tetapi jika tabel terlalu lebar atau jika data pada topik yang berbeda (karyawan - contoh asuransi @tbone memberi misalnya), maka Anda ingin tabel terpisah dengan FK. Anda kemudian ingin membuat FK ini juga PK (yang menjamin keunikan) atau memberikan batasan unik di atasnya.

Sebagian besar FK adalah untuk hubungan satu ke banyak dan itulah yang Anda dapatkan dari FK tanpa menambahkan batasan lebih lanjut di lapangan. Jadi, Anda memiliki tabel pesanan dan tabel detail pesanan misalnya. Jika pelanggan memesan sepuluh item sekaligus, ia memiliki satu pesanan dan sepuluh catatan detail pesanan yang berisi ID pesanan yang sama dengan FK.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara memperbaiki Status Tertunda Pemulihan di Database SQL Server?

  2. Bagaimana cara menemukan direktori data untuk contoh SQL Server?

  3. Kembalikan Tipe Data Dasar dari Nilai Varian SQL di SQL Server

  4. bagaimana cara mendeklarasikan variabel global di SQL Server ..?

  5. Simpan byte[] ke dalam database SQL Server dari C#