BLANK as NULL считается вредным
Как вы знаете, современные реализации баз данных включают понятие "NULL", которое представляет собой значение, которое никогда не совпадает ни с каким другим значением, даже с другим NULL.
BDE и его предшественники, движок Paradox и Paradox для DOS, не включают концепцию NULL. Ни один из типов данных в таблице BDE не допускает исключающее значение, такое как NULL.
BDE включает понятие BLANK, но это просто специальное внутриполосное значение для некоторых типов. BLANK соответствует BLANK и ничему другому. В числовом поле BLANK можно отличить от 0, но в альфа-поле BLANK идентичен строке нулевой длины.
По-видимому, когда-то в смутном прошлом кому-то поручили создать утилиту для импорта из таблиц BDE в базу данных SQL, и он не совсем справился с этим. Вероятно, он не мог представить себе базу данных без NULL, поэтому предположил, что BLANK — это то же самое, что NULL. С тех пор все остальные просто последовали его примеру.
Преобразование BDE BLANK в SQL NULL неверно. Это изменяет архитектуру базы данных и ломает архитектуру любых связанных приложений. Данные, импортированные из таблицы BDE, никогда не должны содержать NULL.
Либо напишите свою собственную процедуру импорта, либо используйте встроенный импорт, а затем тщательно обработайте импортированные данные, чтобы преобразовать все значения NULL в другие значения.
ПУСТЫЕ альфа-значения должны быть преобразованы в значения CHAR или VARCHAR нулевой длины.
ПУСТЫЕ числовые значения должны быть преобразованы в выбранное значение внутриполосного флага, которое соответствует самому себе. Возможно, вам придется зарезервировать специальное значение для представления BDE BLANK, если только NaN или что-то подобное нельзя заставить работать. Во многих случаях, в зависимости от архитектуры приложения, вы сможете преобразовать BDE BLANK в SQL 0.
Конечно, если ваша реализация SQL допускает пустое числовое значение, совпадающее с самим собой и отличающееся от NULL, то ваши проблемы уменьшаются, потому что ваша база данных не уступает по возможностям BDE. Однако вы, вероятно, все еще не можете использовать встроенную утилиту импорта.
person
A. I. Breveleri
schedule
08.11.2012