Superchaves, Chave Candidata, Primária e Estrangeira

O conceito de chave é utilizado para que possamos definir tuplas de forma única em uma relação, dessa forma, não deve existir valores iguais em atributos definidos como chaves em uma relação.

Superchave – São um ou n atributos que permitem a identificação de uma tupla de forma única.
Chave candidata – São superchaves minímas que podem ser utilizadas como chaves primárias.
Chave primária – É uma chave candidata considerada a principal forma de distinguir uma tupla. É  interessante escolher um atributo que nunca ou muito raramente mude seus valores e de menor tamanho.
Chave estrangeira – É uma chave de uma relação que é chave primária em outra relação.

Referência:

  1. Abraham Silberschatz, Henry F. Korth, S. Sudarshan, Database System Concepts, 5th Edition, 2005, p. 29,30

Fatal error: Uncaught Error: Call to undefined method stdClass::

Esse erro ocorre quando você está tentando usar um método de uma classe que não foi definida, ele é similar ao  Fatal error: Uncaught Error: Class, mas ele pode ocorrer de uma forma muito sutil, programando no Phalcon Framework por exemplo quando você faz uma busca dessa forma:


$bar = new Class();
$bar = Class::findFirst(); //retorna um objeto ou false se não tive resultado
$bar->delete(); // Fatal error se o método acima retornar false

No código acima se você utilizar o método de Class no objeto sem verificar se foi retornado um objeto de fato, ele irá causar esse erro, logo, a correção é: verificar se o objeto continua sendo o mesmo objeto ao longo da execução das instruções.

Calculadora que usa o algoritmo de Euclides para encontrar o MDC

O algoritmo de Euclides também conhecido como algoritmo das divisões sucessivas pode ser descrito dado o lema: \(  a = bq + r \) então \( mdc(a,b)\) = \( mdc(b,r) \).

A calculadora abaixo mostra as divisões sucessivas para o cálculo do MDC de uma forma passo a passo.  

function calc_mdc(){ var a, b, r, result, item, mdc; a = document.getElementById(‘a_value’).value; b = document.getElementById(‘b_value’).value; result = document.getElementById(‘step_by_step’); result.innerHTML=””; do{ r = a % b; div = (a-r) / b; item = document.createElement(“li”); item.textContent = a +’ / ‘+b+’ = ‘+div+’ e resto: ‘+ r; result.appendChild(item); a = b; mdc = b; b = r; }while(r > 0); item = document.createElement(“li”); item.textContent = ‘MDC = ‘ + mdc; result.appendChild(item); } mdc(,)

Resultado:

Formatando matemática e códigos nesse site

Esse site utiliza MathJax para renderizar fórmulas matemática e PrettyPrint para formatar blocos de código de linguagens de programação, essa é uma das justificativas para que eu não utilize sistemas de comentários de terceiros onde a formatação não funcionaria e deixaria o carregamento de páginas ainda mais pesado ai vem a pergunta: e esses JavaScripts não deixam a página mais lenta também? Sim, e muito, mas eu acredito que vale bastante a pena.

Exemplo de equação in-line: \(  a + b \)
Exemplo de equação centralizada: \[ 6a+b=7c+b \]

Exemplo de código:


    public void main() throws InterruptedException {
      ...
    }

Mais opções de formatação:
https://en.wikibooks.org/wiki/LaTeX
http://docs.mathjax.org/en/latest/tex.html
https://github.com/google/code-prettify

Como resolver quando pastas e arquivos somem de algum disco no Windows

Recentemente todos os meus arquivos do pendrive tinham sumido, não lembro se eu o tirei enquanto estava sendo escrito ou lido, lembro que isso aconteceu após o desligamento abrupto do meu computador, enfim, no outro dia quando fui usar “cadê os meus arquivos???”, eles simplesmente tinham desaparecido, mas analisando o disco eu notei que ainda estava sendo ocupado espaço, logo, eu não tinha formatado ou deletado eles de alguma forma sem querer. Continue lendo “Como resolver quando pastas e arquivos somem de algum disco no Windows”

Uma postagem escrita por voz(ou quase isso)

Bom essa é uma postagem que eu fiz  utilizando uma extensão do Chrome que utiliza reconhecimento de voz e ela consegue escrever as palavras corretamente mas ela não consegue pontuar o que você dita até da pra utilizar pontuação mas aí você tem que usar comandos em inglês que acabam sendo interpretados como outra palavra em português essa foi uma das maiores dificuldades que eu encontrei na utilização dessa extensão na nossa língua mas já é algo utilizável na minha opinião e não dá para passar tanto da experiência que é utilizar então vou deixar o link para vocês instalarem. Continue lendo “Uma postagem escrita por voz(ou quase isso)”

Atividades em Análise de Algoritmos e C

1. Qual é o menor valor inteiro de n tal que um algoritmo cujo tempo de execução é 100n2 funciona mais rápido que um algoritmo cujo tempo de execução é 2n na mesma máquina? Implemente um algoritmo que imprima na tela a resposta correta.

#include 
#include 

int main(){
    int n;
    for(n = 1; n < 20; n++){
        if( (100 * n * n) < pow(2, n) ){
            printf("%s %d\n", "100*n^2 funciona mais rapido apartir de: ", n);
            break;
        }
    }
    return 0;
}

2. Supondo que estamos comparando implementações de ordenação por inserção e por intercalação na mesma máquina. Para entradas de tamanho n, a ordenação por inserção é executada em \(8n^2\) etapas, enquanto a ordenação por intercalação é executada em \(64n log_2 n\) etapas. A partir de qual valor inteiro de n a ordenação por intercalação supera a ordenação por inserção. Implemente um algoritmo que imprima a resposta correta na tela.

#include 
#include 

int main(){
    int n = 1;
    float a = 0, b = 1;
    while(n<50){ a = 8 * n * n; b = 64 * n * log2(n); printf("%f %f \n", a, b ); if(a>b&&n>1){
            printf("O algoritmo de itercalação vale a pena a partir de n = %d", n);
            break;
        }
        n++;
    }
    return 0;
}