Saya tahu subjek ini sedikit kontroversial dan ada banyak berbagai artikel / opini beredar di internet. Sayangnya, sebagian besar dari mereka menganggap orang itu tidak tahu apa perbedaan antara NULL dan string kosong. Jadi mereka bercerita tentang hasil yang mengejutkan dengan bergabung / agregat dan umumnya melakukan pelajaran SQL sedikit lebih maju. Dengan melakukan ini, mereka benar-benar kehilangan inti dan karena itu tidak berguna bagi saya. Jadi semoga pertanyaan ini dan semua jawaban akan sedikit bergerak maju.
Misalkan saya memiliki tabel dengan informasi pribadi (nama, kelahiran, dll) di mana salah satu kolom adalah alamat email dengan tipe varchar. Kami berasumsi bahwa karena alasan tertentu beberapa orang mungkin tidak ingin memberikan alamat email. Saat memasukkan data seperti itu (tanpa email) ke dalam tabel, ada dua pilihan yang tersedia: setel ke NULL atau setel ke string kosong (''). Mari kita asumsikan bahwa saya menyadari semua implikasi teknis dari memilih satu solusi di atas yang lain dan saya dapat membuat query SQL yang benar untuk kedua skenario. Masalahnya adalah bahkan ketika kedua nilai berbeda pada tingkat teknis, mereka sama persis pada tingkat logis. Setelah melihat NULL dan '' Saya sampai pada satu kesimpulan: Saya tidak tahu alamat email orang itu. Juga tidak peduli seberapa keras saya mencoba, Saya tidak dapat mengirim email menggunakan NULL atau string kosong, jadi tampaknya sebagian besar server SMTP di luar sana setuju dengan logika saya. Jadi saya cenderung menggunakan NULL di mana saya tidak tahu nilai dan menganggap string kosong adalah hal yang buruk.
Setelah beberapa diskusi intens dengan rekan-rekan saya datang dengan dua pertanyaan:
apakah saya benar dengan berasumsi bahwa menggunakan string kosong untuk nilai yang tidak diketahui menyebabkan database "berbohong" tentang fakta? Untuk lebih tepatnya: menggunakan ide SQL tentang apa itu nilai dan apa yang tidak, saya mungkin sampai pada kesimpulan: kita memiliki alamat email, hanya dengan mengetahui itu bukan nol. Tetapi kemudian, ketika mencoba mengirim e-mail saya akan sampai pada kesimpulan yang bertentangan: tidak, kami tidak memiliki alamat e-mail, bahwa @! # $ Database pasti berbohong!
Apakah ada skenario logis di mana string kosong '' bisa menjadi pembawa informasi penting yang baik (selain nilai dan tidak ada nilai), yang akan merepotkan / tidak efisien untuk disimpan dengan cara lain (seperti kolom tambahan). Saya telah melihat banyak posting yang mengklaim bahwa kadang-kadang ada baiknya menggunakan string kosong bersama dengan nilai nyata dan NULL, tetapi sejauh ini belum melihat skenario yang logis (dalam hal desain SQL / DB).
PS Beberapa orang akan tergoda untuk menjawab, bahwa itu hanya masalah selera pribadi. Saya tidak setuju. Bagi saya itu adalah keputusan desain dengan konsekuensi penting. Jadi saya ingin melihat jawaban di mana pendapat tentang ini didukung oleh beberapa alasan logis dan / atau teknis.
''
bahkan di Oracle, tidak sama dengan NULL
. Misalnya, memberikan CHAR(1)
kolom nilai yang ''
akan dihasilkan ' '
(yaitu spasi), bukan NULL
. Selain itu, jika Jacek menggunakan Oracle, pertanyaan ini kemungkinan tidak akan muncul :-)
'' IS NULL
dievaluasi true
dalam PL / SQL.