Якщо людину звуть Null, то як би вона порушила базу даних?


55

Я читав цю статтю на BBC. Це розповідає про людину на ім'я Дженіфер Нулл та про те, як вона щодня стикається з проблемами під час використання онлайн-баз даних, таких як бронювання авіаквитків, чистий банкінг тощо.

Я не добре розбираюся в базах даних, і не дуже часто його використовую. Коли я створив веб-сайт для навчання, перевірка форми серверної форми використовувала регулярні вирази. З того, що я пам’ятаю, він із задоволенням прийняв би назву «Нуль». Я ще не пробував цього.

Чи може хтось пояснити технічні характеристики, коли ця ситуація станеться? Чи перевірка форми просто робить string == NULLчи щось? Навіть так я не думаю NULL is same as "NULL".


32
Статтю явно написав журналіст. Нулі є причиною багатьох плутанин, ви не очікували, що журналіст буде менш розгублений.
ypercubeᵀᴹ

2
Всі: Коментарі з посиланнями на суміжні питання або статті були переміщені в відповідь співтовариства вікі нижче. Будь ласка, відредагуйте (або запропонуйте редагування) на цю відповідь, а не додайте подальші посилання на цій сторінці.
Пол Білий

Відповіді:


42

Я бачив інтерфейси бази даних (наприклад, бібліотеки фреймворків), які повертають "null" як рядок для нульових стовпців. Я вважаю, що був прапор, який би вмикав або вимикав це для налагодження. Цей прапор дозволяє розробникам легко визначати, чи порожнє поле було результатом нульового значення або порожнього значення. Це погана обстановка, особливо у виробництві, і пояснила б проблеми, пояснені у статті.

Зворотна обробка перетворення 'null' в нульове значення повинна створити помилку програми для поля імені. Я б очікував, що це досить швидко буде вирішено.


Дійсно - це досить часто в рамках нетипізованих мов, де всі дані перетворюються на рядок. Минуло кілька років, як я працював над цим, але я вважаю, що, наприклад, ранні версії ColdFusion мали цю проблему.
Жуль

25

Є хороший шанс, що хороший шматок вашої плутанини випливає з журналістського. У статті йдеться про проблеми використання цілих прикладних систем, а не лише баз даних. Цілком розумно, оскільки це твір, націлений на масове споживання, але технічні деталі переглянуті або неправильно зрозуміли автором.

Ймовірно, ряд цих проблем викликані на рівні додатків, а не API DB. Магічні значення - це антидіапазон, який смішно важко викреслити з галузі. Дуже легко якийсь програміст міг написати умову за рядком "хтось набрав" null "? Вони повинні означати, що немає значення, тому що це null означає!" Помилкова спроба запобігання ін'єкції SQL також може бути відповідальною за згадане жорстоке поводження з Null або гавайським прізвищем, яке містить єдину цитату, яка також є стандартним роздільником рядка SQL.

Додаток, який неправильно перетворює ці значення в NULL або порожній рядок, може легко створити помилки, якщо бізнес-логіка або обмеження БД очікують чогось іншого. Це, природно, призводить до саме розчарування користувачів, описаного в статті.


5
Я не знав, що О'Бріан гавайський.
glglgl

19

Сама стаття містить посилання на питання про переповнення стека, що демонструє проблему; це було у додатку Flex, де код:

currentChild.appendChild("Fred");

додав би елемент, що містить слово, Fredдо документа XML, але код:

currentChild.appendChild("null");

додав би порожній елемент, а не елемент, що містить текст "null".

XML сам по собі не має проблеми зі значенням тексту "NULL", тому включення такого тексту не буде проблемою. Насправді, NULLвін не має особливого значення у XML.


13

Я не думаю, що я вже бачив згадане: ми не просто говоримо про SQL.

Назва може починатися / закінчуватися в базі даних ... але, щоб потрапити туди, зазвичай, МНОГО каналів База даних, Sql, php, html, javascript ... Java, C #, VB, Perl, Phython, Ruby, bash, batch, etc, etc, etc., etc. ...

Кожен з цих кроків на конвеєрі може включати перетворення даних з одного формату в інший. Від таблиць Sql, до json, до XML, до CSV тощо ...

У будь-якій точці цього складного ланцюга це займе лише одне місце поганого програмування або нечіткої мови програмування ( наприклад, обробка нуля Javascript ) ...

Тому не обмежуйте себе проблемою, яка знаходиться в базі даних ... тому що вона може бути в будь-якому місці "стека".


8

Відповідь Вікі спільноти на різні посилання спочатку залишається як коментар до цього популярного питання


4

Реляційні бази даних повинні вміщувати відсутні або невідповідні значення. Наприклад, список клієнтів може включати номер мобільного телефону або стать. Що робити, якщо корпорація хоче стати клієнтом - яку гендерну роль вона повинна мати?

Спеціальний індикатор використовується, щоб показати, що значення відсутнє. Цей спеціальний прапор - NULL. Тож неохайне програмування може спричинити плутанину індикатора пропущеного значення - NULL - з прізвищем Дженніфер Нулл, можливо, трактуючи її прізвище як відсутні дані, а не фактичне значення.

Це трохи схоже на відкриття банківського рахунку, але не внесення грошей. Залишок дорівнює нулю. Це не означає, що у вас немає балансу. Це означає, що у вас є баланс і його значення "0". Але неохайне програмування може неправильно інтерпретувати нуль як "не існує" і визначити, що у вас взагалі немає облікового запису.


2

Існує багато погано написаного програмного забезпечення та навіть фреймворків, які б дивно поводилися з людиною на ім’я Null.

Але не будемо забувати людський елемент: можливо люди бачать це ім’я на екранах та роздруківках і думають, що це помилка, а видалення людини - ще одна ймовірна причина?

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.