Можно ли выразить ненулевое ограничение, используя реляционное исчисление?
Я понимаю, что реляционное исчисление основано на логике первого порядка и, как таковое, не имеет понятия нулевых значений, однако в запросе в реляционной алгебре может быть выражено ненулевое ограничение с использованием анти-объединения. Есть ли эквивалентный механизм для выражения такого запроса, используя только реляционное исчисление?
Например, может ли простой SQL-запрос в форме: SELECT * from x ГДЕ y NOT NOT NULL быть выражен с использованием реляционного исчисления?
1 ответ
EFCodd предложил ввести нулевые значения в реляционную модель, но, похоже, он никогда не имел дела с последствиями. В своей книге "Реляционная модель для управления базами данных" он предложил использовать два различных типа нулевой и четырехзначной логики. Он предположил, что такая система будет нуждаться в алгоритме обнаружения тавтологии, чтобы гарантировать, что правильный результат (или, по крайней мере, полезный, понятный результат) будет возвращен для некоторых запросов. Мне кажется, что такая схема должна быть непрактичной и обречена на провал, хотя у меня нет доказательств. Мне кажется маловероятным, что пользователи смогут правильно понимать тавтологию.
По схеме Кодда операции короткого замыкания, такие как x=x, по-видимому, оцениваются как истинные даже при наличии нулевых значений. Авторы SQL, конечно, не следовали схеме Кодда, и в этом заключается трудность. Не существует единого непротиворечивого набора правил для обработки нулей ни в теории, ни в работающем программном обеспечении, поэтому, если вы не объясните такую систему и ее правила, ваш вопрос остается без ответа.