AllDB Consultoria em desenvolvimento para bancos de dados

Olá amigos,
Após algum tempo sem postar, venho postar sobre minha nova empreitada.
ALLDB , uma empresa focada em consultoria, administração e desenvolvimento para bancos de dados.

Abraços.

Desenvolvendo uma loja virtual – Parte 1

Como meu negócio é banco crei esse artigo para explicar todas as funções que podemos usar em banco de dados Mysql para uma loja virtual.

Primeiro vamos levantar o que precisamos para uma loja virtual:

  1. Sistema de cadastro e alteração de produtos ( como um CMS )
    - Gerenciamento de usuários do sistema
    - Departamentos / Sub-departamentos
    - Marcas
    - Produtos
    - Gerenciamento de usuarios da loja
    - Acompanhamento de pedidos
    - Relatórios
  2. O Front-End da loja.
    - Cadastro de usuarios
    - Listagem de produtos
    - Cesta de produtos
    - Pedido / Venda

Para uma loja simples acho que isso basta. Agora vamos à criação do banco. Pra isso vamos usar o Mysql WorkBench

Crie um layer, vamos chamalo- de “ADMIN” , vamos colocar aqui as tabelas exclusivas do gestor.

Agora Insira uma nova tabela no layer, vamos chama-la de “tb_usuario”, collation latin1, innodb.
Insira os campos: usr_id, usr_nome,usr_email e usr_status conforme a imagem abaixo.

Vamos criar também uma tabela para o armazenamento das senhas. tb_senha, latin1, innodb, com os campos
snh_id e snh_senha, clique na ferramenta de relacionamento 1:n  e clique na tabela de senha e depois na tabela de usuarios. sua modelagem deve ficar como a minha:

tabela de usuarios e senhas

tabela de usuarios e senhas

 Proximo passo? Criar o índice único da tabela de senhas e o insert padrao. Em breve na Parte 2 desse artigo.

[]`s

base64 encode e base64 decode no mysql

No mysql 5.1 (que uso atualmente), não existe um função nativa para base64, pelo que pesquisei, nem para a versão 5.4. o que fazer? GOOGLE.

Nos resultados da busca encontrei muita gente procurando uma solução, um modulo em “c” e um script que cria as funções. Não é o ideal, mas o código esta bem estruturado e serve de exemplo aqui no blog.

Os temas abordados nesse script são:

- Criando Funções o Mysql
- Criando uma função para encode/decode em base64, lembrando que a lógica da função voce pode utlizar em outras linguagens que não sejam sql PHP, Asp , Java, JavaSncript …

Você encontra o script em: http://wi-fizzle.com/downloads/base64.sql
Por Ian Gulliver.

Acesso restrito por nível de usuário.

Esse por foi pedido pelo Kilderson Sena da Artigos & Tutoriais de onde faço parte mas ainda não postei nada :-P .

Bom, ja fiz alguns sistemas em PHP com MySql e é claro precisavam de algum tipo de segurança, alguns com níveis de acesso que eu chamo de Perfil. Para começar devemos primeiro pensar na Aplicação, utilizarei como teste uma aplicação com nível de acesso por Telas.

Primeiro teremos uma tabela com as Telas do sistema “tb_tela”:

tla_id INT not null auto_increment primary key
tla_nome VARCHAR(45) not null

Só isso, um código para a tela, e um nome para a mesma, você deverá utilizar esse nome e código para a geração do menu.

Agora a tabela de Usuários “tb_usuario”:

usr_id INT not nullauto_increment  primary key            “Código do usuário”
usr_login varchar(20) not null              “Nome de usuário, utilizado para logar”
usr_senha varchar(100) not null            “Senha, de preferência utilize MD5″
prf_id INT not null                                       “Código do perfil logo a baixo tem a tabela”

Pra deixar melhor, você pode criar um índice único no campo usr_login para que não ocorra de cadastrar usuários com logins idênticos, imagina dois “admin” ?

A tabela de Perfil onde são cadastrados os Níveis de acesso “tb_perfil”:

prf_id INT not null auto_increment primary key
prf_nome varchar(45) not null

Agora o relacionamento entre Tela e Perfil gerando um acesso válido “tb_permissao”:

prm_id INT not null auto_increment primary key
tla_id INT                                     “código da tela”
prf_id INT                                    “código do perfil.”

 

Ok, não entendeu patavinas? eu explico.

Cada usuário tem um perfil (tb_perfil), cada tela do seu sistema esta cadastrada na tb_tela.
Ao criar um relacionamento entre perfil e tela  automaticamente eu crio uma permissão para esse perfil a essa tela.
Agora você pode usar sua linguagem de preferência e aplicar a logica ao modelo.

Abraços
Kleber Taliba Martins

RowID no Mysql, mostrando o numero sequencial

Existem algumas formas de retornar o numero sequencial do registro em uma query no mysql.
No Oracle temos o RowId, mas no mysql temos que trazer na unha mesmo. mais ou menos assim:

SET @rowId :=0;
SELECT @rowId := @rowId + 1 , campo from tb_tabela;

Veja a Aplicação em uma Stored Procedure:

DELIMITER $$
CREATE `sp_rowId`()
BEGIN

SET @rowid := 0;
select @rowid:= @rowid+1 as rowid,campo1,campo2 from tb_tabela;

END$$

DELIMITER ;

Selecionar registros por ano.

Seguindo a serie “BUSCAS”, alguem chegou ao blog buscando “mysql pesquisa por year”. vamos à solução:

mysql> SELECT * FROM tb_table where YEAR(tbl_data)=’2007?

Essa consulta traz todos os registros com ano = 2007, é claro o campo deve ser DATETIME,DATE ou TIMESTAMP

Selecionar apenas dias uteis

Vai um post sobre como listar os registros com data em dias úteis, de segunda a sexta.
A função WEEKDAY() traz o dia da semana, ela retorna um inteiro correspondente ao dia.

0 – Segunda
1 – Terça
2 – Quarta
3 – Quinta
4 – Sexta
5 – Sabado
6 – Domingo

Sendo assim nossa consulta fica:

mysql> SELECT tbl_data FROM tb_table WHERE WEEKDAY(tbl_data) NOT IN (5,6) ;

Calcular a diferença entre 2 datas no Mysql

mysql> SELECT DATEDIFF(CURDATE(),’2007-01-01?);

A função DATEDIFF() retorna um inteiro com o intervalo. a query acima retorna:

mysql> 274

A query abaixo:
mysql> SELECT DATEDIFF(‘2007-01-01?,CURDATE());
mysql> -274

Criando um banco Sqlite.

Como eu ja disse, o sqlite me lembra o tempo em que eu usava, Clipper e Foxpro com base de dados dbase, um arquivo (ou mais no caso do dbase na pasta do sistema).

Mas o Sqlite tem muito potencial, principalmente porque é extremamente rápido, parece que nem existe acesso ao banco em uma aplicação web, é lógico que você não vai usar o Sqlite pra fazer um sistema, nem colocar dados importantes nele.

Mas vamos ao que interessa, criar um banco de dados Sqlite. Primeiro baixe o sqliteadmin: http://sqliteadmin.orbmu2k.de/ (Only windows, sorry)

Basta baixar, descompactar e executar o sqliteadmin.exe

sqliteadmin visao geral
sqliteadmin visao geral

 Em seguida clique no primeiro ícone “Criar Banco de dados” escolha uma pasta , escolha um nome para o banco e clique em salvar. PRONTO seu banco de dados em sqllite foi criado. e salvo na pasta que você informou.

Sqlite - criando um banco de dados

 Agora para criar as tabelas voce vai usar o sistema, menu Tabela -> Novo. sem problemas, parece muito com o mysql.

No próximo post, vamos trabalhar com triggers, Views e Índices. sendo a situação do mysql agora indefinida pela compra da Oracle, meus projetos menores com certeza rodarão em Sqlite.

Lei também: http://www.sqlite.org/docs.html

Triggers em Mysql

Um artigo prático, com o intuito de mostrar como funciona e como usar uma trigger no mysql.

A trigger nada mais é que uma açao que será chamada quando (INSERT / UPDATE /DELETE) for executado.
Quando listei INSERT UPDATE e DELETE estou dizendo que é SÓ assim , nao funciona com outras funções CREATE / DROP / SELECT, pq?, porque é de graça, no oracle tem.

A sintaxe de uma trigger é bastante simples

CRIE TRIGGER minhatrigger (ANTES / DEPOIS) (INSERT / UPDATE/ DELETE)  ON tabela

FOR EACH ROW bla bla bla;

No nosso Bla bla bla é útil lembrar de uma coisa, ao fazer o AFTER/INSERT você pode pegar o valor inserido com NEW.campo e para pegar um valor antigo OLD.campo.

Exemplo:
CREATE TRIGGER  depois_cadastro AFTER INSERT ON cadastro
FOR EACH ROW SET INSERT INTO log values (NEW.id);

A trigger depois_cadastro DEPOIS de inserir na tabela de cadastros. insere o novo ID na tabela de log.

Simples não?

Follow

Get every new post delivered to your Inbox.