Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Ola Pessoal, resolvi criar esse tutorial para ajudar os iniciantes a aprenderem e entenderem sobre criação de banco de dados, muitos podem achar facil, pois não sabem explorar todos os recursos do banco, e acabam usando ferramentas como phpmyadmin que cria tudo praticamente automatico, e o usuario acaba achando que esta criando um banco de dados bem feito, mas depois sofre para fazer qualquer pesquisa no banco.
O banco de dados é o principal um sistema, se o banco de dados esta mal modelado seu sistema nao será eficiente.
Para criar um banco antes precisa estudar um pouco sobre quais campos usar quais tabelas criar, pensar bem mesmo pois nao tenha pressa um sistema bem feito maior parte do tempo que voce gasta é com analise.
eu navego em varios foruns e vejo tabelas que os usuarios postam que estao horriveis, muito mal elaboradas, tem usuario que só conhece VARCHAR, e usa VARCHAR para tudo, ta errado isso.
outra coisa que tambem vejo com frequencia é o usuario criar o banco com tamanhos de campos tudo na base do chute, tipo nome VARCHAR(200), cep VARCHAR(200), acredito a pessoa que faz isso nao deve ter noção nem do que se trata esse numero, então é por isso que estou publicando esse tutorial para que pessoas que fazem um banco mal modelado poder aprender e assim criar banco de dados mais corretos
não vou dar aulas aqui de regras FN(Formas Normais) , quem sabe num outro tutorial.
mas para aquele que quer se aprofundar recomendo estudar mais, pois irei só passar o basico, que pelo menos a pessoa lendo esse tutorial ira aprender a definir um banco corretamente com seus campos com tipos corretos.
VARCHAR
VAR=Variavel
CHAR = Caracterer
ou seja Caractere Variavel, quando voce precisa guardar um dado no banco mas voce nao sabe o tamanho exato que ele vai ter, ou seja ele pode variar, e se for texto claro voce usa VARCHAR, to falando de textos pequenos tipo: nome, rua, bairro, telefone etc...
entao vamos criar um campo nome, escolho VARCHAR, e agora qual tamanho poderia ter um nome 200 tabom?, nao 200 é um chute muito mal feito, vamos pensar entao, vamos inventar um nome bem comprimo:
Pedro Alvares da silva Cabral dos Santos Neto vamos contar strlen() = 45 caracteres, nossa quem usa VARCHAR(200) ta dando um chute bem lonje nao é mesmo?, nao deve existir um nome maior que esse mas mesmo assim para garantir a vitoria iremos usar um VARCHAR(50), demos 5 de brinde.
vamos tentar mais uma vez?, agora vamos criar um campo cidade, qual campos iremos usar?
integer?, nao usaremos VARCHAR , e mesma coisa vamos pensar num nome de cidade bem grande
Pindamonhangaba strlen() = 15 caracteres, deve existir uma cidade com um nome maior, entao para garantir vamos criar um VARCHAR(25) ta vendo dei 10 caractere de brinde :D
CHAR
CHAR = Caracterer
Pessoal para que esse tutorial nao fique muito extenso e eu acabe nao explicando direito entao recomendo voce ler melhor sobre VARCHAR e CHAR nesse link:
http://dev.mysql.com/doc/refman/4.1/pt/char.html
assim temos o foco maior sobre esse tutorial
só resumindo CHAR é para campos exatos onde o dado que voce for gravar não variar, exemplo Estados
SP, RJ, MG etc... 2 caracteres podemos salvar usando CHAR(2), e outra diferença basica entre CHAR e VARCHAR é que se voce usa um campo VARCHAR(20) salva apenas 10 caracteres o VARCHAR ira ter um tamanho de 10 e CHAR(20) se voce salvar 10 caracteres ele sempre tera o tamanho fixo de 20 mesmo que voce gravar apenas 1 caracters, por isso use CHAR somente para campos exatos, outro exemplo é usar o CHAR para guardar senha, isso mesmo por segurança vamos criptografar senha usando MD5, o MD5 nao importa o tamanho de sua senha ele sempre retorna a senha criptografada de 32 caracteres, entao podemos usar CHAR(32) para campo senha.
DATE/DATETIME/TIME
agora e data? como iremos salvar uma data?, ja sei usaremos 3 campos CHAR, dia CHAR(2), mes CHAR(2) e ano CHAR(4) to certo?.
que isso, nao façam essa loucura, para salvar uma data use o campo certo use DATE e se voce quer salvar data e hora temos DATETIME, só horas temos TIME, viu temos campos para todos os tipos que precisarmos? e porque voce só usava VARCHAR hem ?.
uma coisa voce tem que colocar na cabeça, nao faça errado só porque voce acha o jeito certo dificil, ou só porque voce nao consegue, só voce estudar que voce consegue, pare de fazer gambiarras
usando o campo certo alem de ser certo, voce tem inumeras vantagens, por exemplo pode usar as funções proprias do mysql para tratar o seu campo da maneira correta, se voce usa um VARCHAR para guardar data o Mysql ira tratar seu campo como um texto e nao como data, dai todas as funções que trabalha com datas nao ira funcionar
entao vou te ajudar para voce nao ter mais desculpa, pois nao sabe converter uma data
quando voce tem uma data nesse padrao dd/mm/yyyy e o banco aceita yyyy-mm-dd, precisamos converter a data, entao podemos fazer isso:
vamos usar uma função chamada explode() e ja explico tambem a implode()
explode = separa uma string em pedaços criando um array
implode = junta um array criando uma string
como voce pode ver sao exatamente os opostos, cada um faz uma coisa ao contrario da outra
exemplos:
usando explode para converter uma data
$arr = explode("-", "2006-08-25");
teremos :
$arr[0] = "2006";
$arr[1] = "08";
$arr[2] = "25";
como voce viu ele separou a data da sequencia - aqui "2006-08-25" = [2006] [08] [25], se viu que o explode tirou o caracter "-"
agora o implode() é o contrario ele nao tira um caracter, ele coloca
$arr = implode("/", $arr);
resultado = "2006/08/25";
percebeu que o $arr voltou a ser uma string?
mas só para concluirmos, nos convertemos os caracteres tirando - e colocando /
mas ainda nao temos uma data no padrao brasileiro entao vamos continuar:
$data = implode("/", array_reverse(explode("-", "2006-08-25")));//resultado = "25/08/2006";
O array_reverse() apenas inverteu a posição do array antes = [2006] [08] [25] depois = [25] [08] [2006]
pronto ta ai a data invertida simples nao?, e apenas 1 linha que é melhor ainda
para fazer ao contrario nem vou explicar só voce ver essa função e usar ela mesmo.
mas para mais um exemplo podemos converter a data no proprio select exemplo:
"select date_format(data, '%d/%m/%Y') as data from tabela"
SET/ENUM
para um entendimento melhor leia:
http://dev.mysql.com/doc/refman/4.1/pt/enum.html
http://dev.mysql.com/doc/refman/4.1/pt/set.html
agora temos um campo "Deseja receber Newsletter?", qual campo é o mais apropriado para esse tipo de campo?
pode pensar um pouco eu espero....
vamos la o campo mais indicado seria o campo ENUM, nao conhece?, entao vou explicar o campo ENUM voce pode definir um padrao e ele aceita somente um dos que voce estabelecer, mesma coisa um combo, voce nao consegue escolher mais que uma opção um combo, entao o enum é mesma coisa.
exemplo ENUM('S', 'N') COMMENT 'S=Sim;N=Nao', criei um comentario só para lembrar do que se trata.
dai voce vai jogar nesse campo S ou N, se o usuario marcar o campo ele quer receber news
vou te dar mais uma ajudinha com o php exemplo:
$news = isset($_POST["news"]) ? "S" : "N";
dai basta jogar no banco o $news, que ira ter o resultado que o usuario escolheu S = Sim, N= Nao
mais um exemplo de ENUM, campo sexo, a pessoa só pode ser 1 opção, ou ela é Masculino, ou Feminino
ENUM('M','F'), dai mesma coisa voce salva o M se for masculino e F se for Feminino
viu que fica perfeito seu banco e legivel?, fora que é um metodo correto
outra coisa que você vai entender é que fazendo um banco correto facilita sua vida na hora de voce fazer qualquer pesquisa ou um relatorio.
bom agora temos o campo quais linguagens voce sabe programar? exemplo PHP, ASP, JAVA, certo a pessoa pode escolher mais que um campo nao é verdade?, dai voce montaria para ela um
<select name="linguagens[]" id="linguagens" size="5" multiple="multiple">
<option value="J">JAVA</option>
<option value="P">PHP</option>
<option value="A">ASP</option>
</select>
dai como iremos salvar esses dados ?, usaremos ENUM ?, nao, pois ENUM só aceita uma opçao, ah temos o campo SET o SET é igual ao ENUM só que ele aceita varios campos, vamos montar entao o campo SET
ficaria SET('J','P','A'), certo?, J = Java, P=PHP, e A= ASP
vamos fazer o codigo php para pegar esses dados, antes um teste para vermos se esta tudo ok
if (getenv("REQUEST_METHOD") == "POST")
{
foreach ($_POST["linguagens"] as $valor) {
echo $valor."<br />";
}
}
só para testarmos , tudo certo vamos deixar o campo correto para salvar no banco separado por virgula
exemplo se a pessoa escolher as 3 linguagens ira salvar 'J,P,A' correto?
entao basta fazer isso:
if (getenv("REQUEST_METHOD") == "POST")
{
$linguagens = implode(",", $_POST["linguagens"]);
}
e salvar no banco '$linguagens', viu sem misterio , facil nao é mesmo ?
bom ta ai é simples mas ja é um começo, use campos certos para guardar os dados
valor monetario pode usar o DECIMAL, numeros inteiros podemos usar smallint ,int só muda o tamanho
e usando USIGNED voce dobra o tamanho porque é sem sinal
leia mais:
http://dev.mysql.com/doc/refman/4.1/pt/column-types.html
http://dev.mysql.com/doc/refman/4.1/pt/myisam.html
http://dev.mysql.com/doc/refman/4.1/pt/innodb.html
quando mais ler mais voce tera o conhecimento e dominio do que esta fazendo
sequencia de tutoriais para iniciantes:
Carregando comentários...