RESUMO DA AULA, CRIBS
Base de dados. Dados ausentes (mais importante) Diretório / Notas de aula, folhas de dicas Índice (expandir) Aula nº 2. Dados ausentes Dois tipos de valores são descritos em sistemas de gerenciamento de banco de dados para detectar dados ausentes: vazios (ou valores vazios) e indefinidos (ou valores nulos). Em algumas literaturas (principalmente comerciais), os valores nulos às vezes são chamados de valores vazios ou nulos, mas isso é incorreto. O significado dos significados vazio e indefinido é fundamentalmente diferente, por isso é necessário monitorar cuidadosamente o contexto de uso de um determinado termo. 1. Valores vazios (Valores vazios) valor vazio é simplesmente um dos muitos valores possíveis para algum tipo de dado bem definido. Listamos os mais "naturais", imediatos valores vazios (ou seja, valores vazios que poderíamos alocar por conta própria sem ter nenhuma informação adicional): 1) 0 (zero) - valor nulo está vazio para tipos de dados numéricos; 2) false (errado) - é um valor vazio para um tipo de dado booleano; 3) B'' - cadeia de bits vazia para cadeias de comprimento variável; 4) "" - string vazia para strings de caracteres de comprimento variável. Nos casos acima, você pode determinar se um valor é nulo ou não comparando o valor existente com a constante nula definida para cada tipo de dados. Mas os sistemas de gerenciamento de banco de dados, devido aos esquemas implementados neles para armazenamento de dados de longo prazo, só podem funcionar com strings de comprimento constante. Por causa disso, uma sequência vazia de bits pode ser chamada de sequência de zeros binários. Ou uma string consistindo de espaços ou qualquer outro caractere de controle é uma string vazia de caracteres. Aqui estão alguns exemplos de strings vazias de comprimento constante: 1) B'0'; 2) B'000'; 3)''. Como você pode saber se uma string está vazia nesses casos? Em sistemas de gerenciamento de banco de dados, uma função lógica é usada para testar a vacuidade, ou seja, o predicado IsEmpty(<expressão>), que literalmente significa "comer vazio". Esse predicado geralmente é incorporado ao sistema de gerenciamento de banco de dados e pode ser aplicado a qualquer tipo de expressão. Se não houver tal predicado em sistemas de gerenciamento de banco de dados, você mesmo poderá escrever uma função lógica e incluí-la na lista de objetos do banco de dados que está sendo projetado. Considere outro exemplo em que não é tão fácil determinar se temos um valor vazio. Dados do tipo data. Qual valor neste tipo deve ser considerado um valor vazio se a data pode variar no intervalo de 01.01.0100. antes de 31.12.9999/XNUMX/XNUMX? Para fazer isso, uma designação especial é introduzida no SGBD para constantes de data vazias {...}, se o valor desse tipo for escrito: {DD. MILÍMETROS. AA} ou {AA. MILÍMETROS. DD}. Com este valor, ocorre uma comparação ao verificar o valor de vazio. É considerado um valor "completo" bem definido de uma expressão desse tipo e o menor possível. Ao trabalhar com bancos de dados, os valores nulos costumam ser usados como valores padrão ou são usados quando faltam valores de expressão. 2. Valores nulos Palavra Nulo usado para denotar valores indefinidos em bancos de dados. Para entender melhor quais valores são entendidos como nulos, considere uma tabela que é um fragmento de um banco de dados: Assim, valor indefinido ou Valor nulo - isto é: 1) desconhecido, mas usual, ou seja, valor aplicável. Por exemplo, o Sr. Khairetdinov, que é o número um em nosso banco de dados, sem dúvida tem alguns dados de passaporte (como uma pessoa nascida em 1980 e um cidadão do país), mas eles não são conhecidos, portanto, não estão incluídos no banco de dados . Portanto, o valor Null será escrito na coluna correspondente da tabela; 2) valor não aplicável. O Sr. Karamazov (nº 2 em nosso banco de dados) simplesmente não pode ter nenhum dado de passaporte, porque no momento da criação deste banco de dados ou da entrada de dados nele, ele era uma criança; 3) o valor de qualquer célula da tabela, caso não possamos dizer se é aplicável ou não. Por exemplo, o Sr. Kovalenko, que ocupa a terceira posição no banco de dados compilado por nós, não sabe o ano de nascimento, então não podemos dizer com certeza se ele tem ou não os dados do passaporte. E consequentemente, os valores de duas células na linha dedicada ao Sr. Kovalenko serão Null-value (o primeiro - como desconhecido em geral, o segundo - como um valor cuja natureza é desconhecida). Como qualquer outro tipo de dados, os valores Null também possuem certas Propriedades. Listamos os mais significativos deles: 1) ao longo do tempo, a compreensão do valor Null pode mudar. Por exemplo, para o Sr. Karamazov (Nº 2 em nosso banco de dados) em 2014, ou seja, ao atingir a maioridade, o valor Nulo mudará para algum valor específico e bem definido; 2) O valor nulo pode ser atribuído a uma variável ou constante de qualquer tipo (numérico, string, booleano, data, hora, etc.); 3) o resultado de qualquer operação em expressões com valores nulos como operandos é um valor nulo; 4) uma exceção à regra anterior são as operações de conjunção e disjunção sob as condições das leis de absorção (para mais detalhes sobre as leis de absorção, ver parágrafo 4 da aula nº 2). 3. Valores nulos e a regra geral para avaliar expressões Vamos falar mais sobre ações em expressões contendo valores nulos. A regra geral para lidar com valores Nulos (que o resultado das operações em valores Nulos é um valor Nulo) se aplica às seguintes operações: 1) à aritmética; 2) às operações de negação, conjunção e disjunção bit a bit (exceto para as leis de absorção); 3) para operações com strings (por exemplo, concatenação - concatenação de strings); 4) às operações de comparação (<, ≤, ≠, ≥, >). Vamos dar exemplos. Como resultado da aplicação das seguintes operações, serão obtidos valores nulos: 3 + Nulo, 1/ Nulo, (Ivanov' + '' + Nulo) ≔ Nulo Aqui, em vez da igualdade usual, usamos operação de substituição "≔" devido à natureza especial de trabalhar com valores nulos. A seguir, este símbolo também será usado em situações semelhantes, o que significa que a expressão à direita do caractere curinga pode substituir qualquer expressão da lista à esquerda do caractere curinga. A natureza dos valores nulos geralmente resulta em algumas expressões produzindo um valor nulo em vez do nulo esperado, por exemplo: (x - x), y * (x - x), x * 0 ≔ Nulo quando x = Nulo. O fato é que ao substituir, por exemplo, na expressão (x - x) os valores x = Null, obtemos a expressão (Null - Null), e a regra geral para calcular o valor da expressão contendo valores Null entre em vigor, e a informação sobre o fato de que aqui o valor Null corresponde à mesma variável é perdida. Pode-se concluir que ao calcular quaisquer operações que não sejam booleanos, os valores nulos são interpretados como inaplicável, e, portanto, o resultado também é um valor Null. O uso de valores nulos em operações de comparação não leva a resultados menos inesperados. Por exemplo, as seguintes expressões também produzem valores nulos em vez dos valores booleanos True ou False esperados: (Nulo < Nulo); (Nulo ≤ nulo); (Nulo = Nulo); (Nulo ≠ Nulo); (Nulo > Nulo); (Nulo ≥ Nulo) ≔ Nulo; Assim, concluímos que é impossível dizer que um valor Null é igual ou não igual a si mesmo. Cada nova ocorrência de um valor Null é tratada como independente, e cada vez que os valores Null são tratados como valores desconhecidos diferentes. Nisso, os valores nulos são fundamentalmente diferentes de todos os outros tipos de dados, porque sabemos que era seguro dizer sobre todos os valores passados anteriormente e seus tipos que são iguais ou não iguais entre si. Assim, vemos que os valores Nulos não são os valores das variáveis no sentido usual da palavra. Portanto, torna-se impossível comparar os valores de variáveis ou expressões que contenham valores Null, pois como resultado receberemos não os valores booleanos True ou False, mas valores Null, como nos exemplos a seguir: (x < Nulo); (x ≤ nulo); (x=Nulo); (x ≠ Nulo); (x > Nulo); (x ≥ Nulo) ≔ Nulo; Portanto, por analogia com valores vazios, para verificar uma expressão para valores Nulos, você deve usar um predicado especial: IsNull(<expressão>), que significa literalmente "é Nulo". A função booleana retorna True se a expressão contiver Null ou for Null, e False caso contrário, mas nunca retornará Null. O predicado IsNull pode ser aplicado a variáveis e expressões de qualquer tipo. Quando aplicado a expressões do tipo vazio, o predicado sempre retornará False. Por exemplo: Então, de fato, vemos que no primeiro caso, quando o predicado IsNull foi tirado de zero, a saída acabou sendo False. Em todos os casos, incluindo o segundo e o terceiro, quando os argumentos da função lógica eram iguais ao valor Null, e no quarto caso, quando o próprio argumento era inicialmente igual ao valor Null, o predicado retornava True. 4. Valores nulos e operações lógicas Normalmente, apenas três operações lógicas são suportadas diretamente em sistemas de gerenciamento de banco de dados: negação ¬, conjunção & e disjunção ∨. As operações de sucessão ⇒ e equivalência ⇔ são expressas em termos delas usando substituições: (x ⇒ y) ≔ (¬x ∨ y); (x ⇔ y) ≔ (x ⇒ y) & (y ⇒ x); Observe que essas substituições são totalmente preservadas ao usar valores nulos. Curiosamente, usando o operador de negação "¬" qualquer uma das operações conjunção & ou disjunção ∨ pode ser expressa uma através da outra da seguinte forma: (x & y) ≔¬ (¬x ∨¬y); (x ∨ y) ≔ ¬(¬x & ¬y); Essas substituições, assim como as anteriores, não são afetadas por valores nulos. E agora apresentamos as tabelas verdade das operações lógicas de negação, conjunção e disjunção, mas além dos habituais valores Verdadeiro e Falso, também usamos o valor Nulo como operandos. Por conveniência, introduzimos a seguinte notação: em vez de True, escreveremos t, em vez de False - f, e em vez de Null - n. 1. Negação XX. Vale a pena notar os seguintes pontos interessantes sobre a operação de negação usando valores Null: 1) ¬¬x ≔ x - a lei da dupla negação; 2) ¬Null ≔ Null - O valor Null é um ponto fixo. 2. Conjunção x & y. Esta operação também tem suas próprias propriedades: 1) x & y ≔ y & x - comutatividade; 2) x & x ≔ x - idempotência; 3) False & y ≔ False, aqui False é um elemento absorvente; 4) True & y ≔ y, aqui True é o elemento neutro. 3. Disjunção x ∨ y. Свойства: 1) x ∨ y ≔ y ∨ x - comutatividade; 2) x ∨ x ≔ x - idempotência; 3) False ∨ y ≔ y, aqui False é o elemento neutro; 4) True ∨ y ≔ True, aqui True é um elemento absorvente. Uma exceção à regra geral são as regras para calcular as operações lógicas conjunção & e disjunção ∨ sob as condições de ação leis de absorção: (Falso & y) ≔ (x & Falso) ≔ Falso; (Verdadeiro ∨ y) ≔ (x ∨ Verdadeiro) ≔ Verdadeiro; Essas regras adicionais são formuladas para que, ao substituir um valor Null por False ou True, o resultado ainda não dependa desse valor. Conforme mostrado anteriormente para outros tipos de operações, usar valores Null em operações Booleanas também pode resultar em valores inesperados. Por exemplo, a lógica à primeira vista é quebrada em a lei da exclusão do terceiro (x ∨ ¬x) e a lei da reflexividade (x = x), pois para x ≔ Null temos: (x ∨ ¬x), (x = x) ≔ Nulo. As leis não são cumpridas! Isso é explicado da mesma forma que antes: quando um valor Nulo é substituído em uma expressão, a informação de que esse valor é informado pela mesma variável é perdida, e a regra geral para trabalhar com valores Nulos entra em vigor. Assim, concluímos: ao realizar operações lógicas com valores Nulos como operando, esses valores são determinados pelos sistemas gerenciadores de banco de dados conforme aplicável, mas desconhecido. 5. Valores nulos e verificação de condição Assim, do exposto, podemos concluir que na lógica dos sistemas de gerenciamento de banco de dados não existem dois valores lógicos (True e False), mas três, pois o valor Null também é considerado como um dos possíveis valores lógicos. É por isso que muitas vezes é referido como o valor desconhecido, o valor desconhecido. No entanto, apesar disso, apenas a lógica de dois valores é implementada em sistemas de gerenciamento de banco de dados. Portanto, uma condição com valor Null (uma condição indefinida) deve ser interpretada pela máquina como True ou False. Por padrão, a linguagem DBMS reconhece uma condição com um valor Null como False. Ilustramos isso com os seguintes exemplos da implementação de instruções condicionais If e While em sistemas de gerenciamento de banco de dados: Se P então A mais B; Essa entrada significa: se P for avaliado como Verdadeiro, a ação A será executada e se P for avaliado como Falso ou Nulo, a ação B será executada. Agora aplicamos a operação de negação a este operador, obtemos: Se ¬P então B senão A; Por sua vez, este operador significa o seguinte: se ¬P for avaliado como Verdadeiro, então a ação B será executada, e se ¬P for avaliado como Falso ou Nulo, então a ação A será executada. E novamente, como podemos ver, quando um valor Null aparece, encontramos resultados inesperados. O ponto é que as duas instruções If neste exemplo não são equivalentes! Embora um deles seja obtido do outro negando a condição e reorganizando os ramos, ou seja, pela operação padrão. Tais operadores são geralmente equivalentes! Mas em nosso exemplo, vemos que o valor Null da condição P no primeiro caso corresponde ao comando B e no segundo - A. Agora considere a ação da instrução condicional while: Enquanto P faz A; B; Como funciona este operador? Enquanto P for True, a ação A será executada, e assim que P for False ou Null, a ação B será executada. Mas os valores Null nem sempre são interpretados como False. Por exemplo, em restrições de integridade, as condições indefinidas são reconhecidas como Verdadeiras (restrições de integridade são condições impostas aos dados de entrada e garantem sua correção). Isso ocorre porque em tais restrições apenas dados deliberadamente falsos devem ser rejeitados. E, novamente, em sistemas de gerenciamento de banco de dados, há uma função de substituição IfNull(restrições de integridade, True), com o qual valores nulos e condições indefinidas podem ser representados explicitamente. Vamos reescrever as instruções condicionais If e While usando esta função: 1) Se IfNull ( P, False) então A else B; 2) Enquanto IfNull(P, False) faça A; B; Portanto, a função de substituição IfNull(expressão 1, expressão 2) retorna o valor da primeira expressão se ela não contiver um valor Nulo e, caso contrário, o valor da segunda expressão. Deve-se notar que nenhuma restrição é imposta ao tipo da expressão retornada pela função IfNull. Portanto, usando essa função, você pode substituir explicitamente quaisquer regras para trabalhar com valores nulos. << Voltar: Introdução (Sistemas de gerenciamento de banco de dados. Bancos de dados relacionais) >> Encaminhar: Objetos de dados relacionais (Requisitos para a forma tabular de representação de relacionamentos. Domínios e atributos. Esquemas de relacionamento. Valores nomeados de tuplas. Tuplas. Tipos de tuplas. Relações. Tipos de relacionamentos) Recomendamos artigos interessantes seção Notas de aula, folhas de dicas: Veja outros artigos seção Notas de aula, folhas de dicas. Leia e escreva útil comentários sobre este artigo. Últimas notícias de ciência e tecnologia, nova eletrônica: A existência de uma regra de entropia para o emaranhamento quântico foi comprovada
09.05.2024 Mini ar condicionado Sony Reon Pocket 5
09.05.2024 Energia do espaço para Starship
08.05.2024
Outras notícias interessantes: ▪ A eletrônica avaliará o tom do usuário do computador ▪ Pessoas criativas gostam de perder tempo. ▪ Novo Modelo de Expansão do Universo ▪ Carros Volkswagen com informações projetadas na estrada Feed de notícias de ciência e tecnologia, nova eletrônica
Materiais interessantes da Biblioteca Técnica Gratuita: ▪ seção do site Aforismos de pessoas famosas. Seleção de artigos ▪ artigo Artful Albion. expressão popular ▪ artigo Por que um espelho é considerado perigoso? Resposta detalhada ▪ artigo Turner. Instrução padrão sobre proteção do trabalho
Deixe seu comentário neste artigo: Todos os idiomas desta página Página principal | Biblioteca | Artigos | Mapa do Site | Revisões do site www.diagrama.com.ua |