Jika nama seseorang Null, lalu bagaimana cara memecahkan basis data?

55

Saya sedang membaca artikel ini di BBC. Ini bercerita tentang seseorang bernama Jenifer Null dan bagaimana dia menghadapi masalah sehari-hari saat menggunakan database online seperti memesan tiket pesawat, perbankan bersih dll.

Saya tidak berpengalaman dalam database dan saya jarang menggunakannya. Ketika saya membuat situs web untuk belajar, validasi formulir sisi server menggunakan ekspresi reguler. Dari apa yang saya ingat akan dengan senang hati menerima nama "Null". Saya belum mencobanya.

Bisakah seseorang menjelaskan teknis ketika situasi ini akan terjadi? Apakah validasi formulir hanya melakukan string == NULLatau sesuatu? Meski begitu saya tidak berpikir NULL is same as "NULL".

Souradeep Nanda
sumber
32
Artikel itu jelas ditulis oleh seorang jurnalis. Nulls adalah penyebab banyak kebingungan, Anda tidak akan mengharapkan wartawan menjadi kurang bingung.
ypercubeᵀᴹ
2
Semua orang: Komentar dengan tautan ke pertanyaan atau artikel terkait telah dipindahkan ke jawaban Wiki Komunitas di bawah ini. Harap edit (atau sarankan edit) untuk jawaban itu alih-alih menambahkan tautan lebih lanjut pada halaman ini.
Paul White

Jawaban:

42

Saya telah melihat antarmuka basis data (mis. Pustaka kerangka kerja) yang mengembalikan 'null' sebagai string untuk kolom nol. Saya percaya ada bendera yang akan mengaktifkan atau menonaktifkan ini untuk debugging. Bendera ini memungkinkan pengembang untuk dengan mudah menentukan apakah bidang kosong adalah hasil dari nilai nol atau nilai kosong. Ini adalah pengaturan yang buruk, terutama dalam produksi, dan akan menjelaskan masalah yang dijelaskan dalam artikel.

Pemrosesan sebaliknya dari mengubah 'null' ke nilai nol harus menghasilkan kesalahan aplikasi untuk bidang nama. Saya berharap ini agak cepat diselesaikan.

BillThor
sumber
Memang - ini sangat umum dalam kerangka kerja untuk bahasa yang tidak diketik di mana semua data dikonversi menjadi string. Sudah beberapa tahun sejak saya mengerjakannya, tapi saya percaya versi awal ColdFusion memiliki masalah ini, misalnya.
Jules
25

Ada kemungkinan besar bahwa sebagian besar kebingungan Anda berasal dari jurnalis. Artikel ini berbicara tentang masalah menggunakan seluruh sistem aplikasi, bukan hanya database. Sepenuhnya masuk akal karena ini adalah tulisan yang ditujukan untuk konsumsi massal, tetapi rincian teknisnya dikacaukan atau disalahpahami oleh penulis.

Kemungkinan sejumlah masalah ini disebabkan pada lapisan aplikasi, bukan API DB. Nilai-nilai ajaib adalah anti-pola yang sangat sulit untuk dihilangkan dari industri. Sangat mudah beberapa programmer bisa menulis suatu kondisi di sepanjang baris "seseorang mengetik 'nol'? Mereka pasti berarti tidak ada nilai, karena itulah yang berarti null!" Upaya sesat dalam mencegah injeksi SQL juga bisa bertanggung jawab atas penganiayaan Null yang disebutkan, atau nama belakang Hawaii yang berisi kutipan tunggal, yang juga merupakan pembatas string SQL standar.

Aplikasi yang salah mengubah nilai-nilai ini menjadi NULL atau string kosong dapat dengan mudah membuat kesalahan jika logika bisnis atau kendala DB mengharapkan sesuatu yang berbeda. Ini secara alami menghasilkan pengalaman pengguna yang membuat frustrasi persis seperti yang dijelaskan dalam artikel.

Nama Layar Esoterik
sumber
5
Saya tidak tahu O'Brian adalah orang Hawaii.
glglgl
19

Artikel itu sendiri menyertakan tautan ke pertanyaan Stack Overflow yang menunjukkan masalah; itu dalam aplikasi Flex di mana kode:

currentChild.appendChild("Fred");

akan menambahkan elemen yang berisi kata Fredke dokumen XML tetapi kode:

currentChild.appendChild("null");

akan menambahkan elemen kosong, bukan elemen yang mengandung teks "null".

XML, per se, tidak memiliki masalah dengan nilai teks "NULL", jadi termasuk teks seperti itu tidak akan menjadi masalah. Bahkan, NULLtidak memiliki arti khusus dalam XML sama sekali.

Lengkungan Tinggi
sumber
13

Satu hal yang saya pikir tidak pernah saya lihat disebutkan: Kami tidak hanya berbicara tentang SQL.

Nama mungkin mulai / berakhir di basis data ... tetapi untuk sampai ke sana biasanya melibatkan saluran GANDA. Basis data, Sql, php, html, javascript ... Java, C #, VB, Perl, Phython, Ruby, bash, batch, dll, dll, dll ...

Masing-masing langkah dalam pipa mungkin melibatkan konversi data dari satu format ke format lainnya. Dari tabel Sql, ke json, ke xml, ke CSV, dll ...

Pada titik mana pun dalam rantai rumit ini, itu hanya akan mengambil satu tempat pemrograman yang buruk atau bahasa pemrograman fuzzy (Javascript null handling misalnya) ...

Jadi jangan membatasi diri Anda pada masalah yang ada di database ... karena itu bisa di mana saja di "tumpukan".

WernerCD
sumber
4

Basis data relasional harus mengakomodasi nilai yang hilang atau irrelevent. Misalnya, daftar pelanggan dapat menyertakan nomor ponsel atau jenis kelamin. Bagaimana jika suatu perusahaan ingin menjadi pelanggan - jenis kelamin apa yang seharusnya dimiliki?

Indikator khusus digunakan untuk menunjukkan nilai hilang. Bendera khusus ini NULL. Jadi pemrograman yang ceroboh dapat menyebabkan indikator nilai yang hilang - NULL - menjadi bingung dengan nama Jennifer Null, mungkin menafsirkan nama keluarganya sebagai data yang hilang daripada nilai aktual.

Ini seperti membuka rekening bank tetapi tidak menyetor uang. Saldonya nol. Ini tidak berarti Anda tidak memiliki saldo. Ini berarti Anda memiliki saldo dan nilainya "0". Tetapi pemrograman yang ceroboh dapat salah menafsirkan nol sebagai "tidak ada" dan menentukan bahwa Anda tidak memiliki akun sama sekali.

Michael Green
sumber
2

Ada banyak perangkat lunak yang ditulis dengan buruk, dan bahkan kerangka kerja, yang akan berperilaku aneh dengan seseorang bernama Null.

Tapi jangan lupa elemen manusia: mungkin manusia melihat nama di layar dan cetakan dan berpikir itu adalah kesalahan dan menghapus orang itu kemungkinan penyebab lain?

MGOwen
sumber