terça-feira, 19 de junho de 2007

Modelo Cliente - Servidor


“... foi simplesmente espetacular o progresso que os computadores conheceram em um curto período de tempo. Nas duas primeiras décadas de sua existência, os sistemas computacionais eram acondicionados, geralmente, em uma grande sala com paredes de vidro(...). Uma empresa de médio porte ou uma universidade contava apenas com um ou dois computadores... ” (Tanenbaun S. Andrew, Redes de computadores)

Num primeiro momento, desenvolver aplicativos de bancos de dados para PC era uma abordagem de um único processo. Tanto o programa quanto os arquivos de “banco de dados” ficavam no mesmo computador e todo o esforço do desenvolvimento era concentrado na aplicação, ou seja, todo o tratamento, desde a entrada até a gravação física do registro, era implementado no aplicativo, como por exemplo: construção da interface gráfica (telas), as validações (checkes) e os algoritmos de classificação, busca, gravação, leitura e indexação.
Com o surgimento das redes, programadores audazes moveram os arquivos de dados para um servidor de arquivos, visando desta forma viabilizar o acesso de múltiplos usuários a mesma base de dados. Agora vários computadores poderiam compartilhar das informações contidas no banco de dados. Contudo, esses computadores teriam que possuir o software aplicativo (que continha todo o mecanismo de manipulação de dados descrito acima) instalado, porém os arquivos de bancos de dados agora estavam disponíveis para múltiplos usuários acessa-los simultaneamente. Até hoje se usa este modelo, e alguns sistemas que trabalham com banco de dados locais (Paradox, access, Dbase e ect..) são configurados desta forma, o modelo de servidores de arquivos.
Esta estratégia, amplamente difundida no passado, embora tenha trazido alguma inovação, muito mais no aspecto físico do que lógico, não se consolodou como um modelo definitivo, a partir do momento que trouxe mais demandas do que soluções. Como assim? Imagine a seguinte situação:


um jantar, ou ceia comunitária onde os convidados deveriam, cada um, trazer parte da comida e bebida, deposita-la numa única mesa e, ao mesmo tempo, outros convidados estariam se servindo de alimentos que já estariam na mesa. Podemos imaginar, a partir deste exemplo, as dificuldades que os participantes desta ceia deveriam estar enfrentando. Cada vez maior seria o problema quanto mais pessoas chegassem para participar da ceia, em pouco tempo o caos estaria estabelecido. È óbvio que sem uma forma de gerenciamento esta configuração fatalmente será insustentável. Os sistemas gerenciadores de banco de dados surgem com afinalidade de atender justamente esta necesidade.
No armazenamanto de dados flle-server, toda a inteligência do “banco” reside no software cliente. Embora que o arquivo de dados resida no servidor remoto, este servidor não tem inteligência para gerenciar esses dados.
No modelo cliente-servidor o banco de dados não é apenas um arquivo, ou melhor, não é uma pasta contendo vários arquivos(que seriam as tabelas e os índices). Mas sim um programa, um sistema que controla e gerencia o banco, onde reside toda a inteligência do banco de dados. Este programa prove um serviço de acesso, armazenamento e manipulação de dados. Podemos concluir então que: se existe processamento no banco agora, eu posso pegar os processos que antes estavam todos codificados no sotware cliente, e dividi-los com o programa de banco de dados.
O modelo client-server reduz significantemente o tráfego de rede, também provê uma melhor integridade no banco e o torna mais poderoso, já que todo o gerenciamento do software fica em único lugar.
Continua em ... Back-End

Artigo completo (View Full Post)

domingo, 17 de junho de 2007

Surface Computer



A galerinha do tio Bill acena pro mercado com uma surpresinha interessante. Na minha opinião já passou da hora de surgir alguma alternativa melhor, mais funcional e de melhor usabilidade, ao formato convencional dos dispositivos de interface do PC. Enquanto os projetos baseados em holografia ainda pertencem ao mundo da ficção, o Surface computer aparece com pose de elemento futurista e nos traz a expectativa de novas experiências de interatividade baseada no touch screen. Abusando do conceito de usabilidade intuitiva, tudo que se tem experimentado no que tange interação entre pessoas e sistemas, pessoas e pessoas, está totalmente comprometido, a um passo da se tornarem obsoletos. A interoperabilidade entre dispositivos também é afetada, por exemplo, através de wireless aparelhos como o Zune e Smartphones já são capazes de dar uma idéia do potencial dessa nova tecnologia. Vale gastar um tempinho em hotsite do Surface.




É uma idéia bastante promissora, que abre uma infinidade de possibilidades de interação. Indubitavelmente o universo multimídia não será o mesmo. Ganes, vídeos, áudio, na música, na arquitetura, projetos gráficos, ferramentas para diversos fins poderão ter um ganho em usabilidade tremendo a partir dessa tecnologia. Mas é claro que se tratando de MS, devido ao histórico da organização, sempre teremos o pé atrás quando a eficácia e qualidade do produto.
Supondo que ele alcance um desempenho satisfatório quando ao que se propõe, não esquecendo de mencionar a acessibilidade viável (ou seja, custo acessível), não tenho dúvida de que estaremos mais uma vez, através da informática, experimentando uma contundente intervenção da tecnologia na cultura, em todas as áreas.
Existem outros projetos que também nos aproximam dessa superfície de contato com o futuro, superfície de interação com o futuro:
O DiamondTouch da Mitsubishi, é uma boa notícia pra quem teme o monopólio da M$ nesse setor. A mesa da Mitsubishi não apenas é sensível ao toque mas lém disso também obedece comandos de voz. Que tal experimentar um partidinha de Warcraft III D?



Confira mais esse ....



Veja em:
Touch Screens for Many Fingers
Ministry of Tech
Especicamente:
Perceptive Pixel
Interactive Touchless Display




Confesso que a paradinha me emocionou!!! Para nós desenvolveddores, isso é mto bom! Isso representa mais trabalho. Novas forteiras, envolvendo uma abordagem nova o que provavelmente damandará soluções não convencionais, o que é bastante motivador e excitante.
Vamos agurdar cenas dos próximos capítulos .....


Esse assunto esta bombando na web, vários vídeos no youtube, artigos em blogs ...etc...
Veja mais




Artigo completo (View Full Post)

segunda-feira, 4 de junho de 2007

SQL

Structured Query language SQL

É uma linguagem de pesquisa declarativa e de programação para banco de dados relacional. O SQL foi desenvolvido no início da década de 70 nos laboratórios da IBM, no projeto System R, que tinha por objetivo demonstrar a viabilidade da implementação do modelo relacional proposto por E. F. Codd. O nome original da linguagem era SEQUEL, acrônimo para "Structured English Query Language".A linguagem SQL foi desenvolvida pela IBM, visando realizar operações em SGBDs. Ela é subdividida em quatro categorias:

  • Linguagem de definição de dados(DDL):
  • Linguagem de manipulação de dados(DML)
  • Linguagem de controle de dados (DCL)
  • Linguagem de controle de Transação(TCL)


DDL Data Defition Language:

  • CREATE – Para crier objetos de banco de dados.
  • ALTER – Alterar estrutura de objetos no banco de dados.
  • DROP – Excluir objetos no Banco de dados.
  • TRUNCATE –Exclui todos os registros de uma tabela.
  • RENAME – Renomeia objetos de banco de dados

Exemplos:

a) CREATE:
   Create table <Nome_da_tabela> (<Nome_do_campo>  <tipo> <tamanho> <requerido>); 
b) ALTER:
    Alter table <Nome_da_tabela> add <Nome_do_campo>  <tipo> <tamanho> <requerido>;  

c) DROP
Excluindo uma coluna
   Alter table <Nome_da_tabela> drop <Nome_do_campo>
;

Excluido uma tabela
   Drop table <Nome_da_tabela> 


DML Data Manipulation Language:

• SELECT – Seleciona dados.
• INSERT – Insere dados numa tabela
• UPDATE – Altera registros de uma tabela.
• DELETE – Apaga registros de uma tabela.

Exemplo:

d) Select:

Select From Where

e) Insert:

Insert Into Values

f) UpDate:
UpDate  Set =  ;

g) Delete:
Delete from  Where   ;



DCL Data Controul Language:
o GRANT – Concede privilégios a usuários sobre objetos do banco (gives user's access privileges to database)
o REVOKE – Retira privilégios de usuários (withdraw access privileges given with the GRANT command)
Exemplo:
h) Grant:

Grant on to

i) Revoke:
Revoke  on   from   


TCL

Transaction Control Language (TCL) Comandos que gerenciam manipulações através de DML sobre os registros de uma banco de dados. Esse gerenciamento e feito através de controle de transações. (statements are used to manage the changes made by DML statements. It allows statements to be grouped together into logical transactions).
o COMMIT – Confirma operação realizada. Aplica definitivamente, fisicamente a operação realizada.
o SAVEPOINT – Marca pontos onde a transação pode ser efetivada ou não.
o ROLLBACK – Cancela uma operação iniciada pelo START TRANSACTION.
o START TRANSACTION/ BEGIN TRANS – Incia uma transação.
o SET TRANSACTION – Configura uma transação, como nível de isolamento e seguimentos de Rollback.



Um Script de exemplo - Inerbase/ Fire Bird


CREATE DATABASE 'G:\\BancoCurso.gdb'
USER 'SYSDBA' PASSWORD 'masterkey'
PAGE_SIZE 4096;


/******************************************************************************/
/* DOMAIN */
/******************************************************************************/


CREATE DOMAIN MOEDA AS NUMERIC(15,2) DEFAULT 0;
CREATE DOMAIN BOOLEAN AS CHAR(1) DEFAULT 'F' CHECK(VALUE IN ('F','T'));


/******************************************************************************/
/* Tables */
/******************************************************************************/

CREATE TABLE CLIENTES (
ID_CLIENTE INTEGER NOT NULL,
NOME VARCHAR(60) NOT NULL,
CPF CHAR(11) NOT NULL,
ENDERECO VARCHAR(60) NOT NULL,
BAIRRO VARCHAR(40) NOT NULL,
CIDADE VARCHAR(40) NOT NULL,
ESTADO CHAR(2) NOT NULL,
DATACAD TIMESTAMP NOT NULL,
STATUS BOOLEAN
);



CREATE TABLE ITENS (
ID_PEDIDO INTEGER NOT NULL,
ID_PRODUTO INTEGER NOT NULL,
QUANTIDADE INTEGER NOT NULL,
PRECOVENDA MOEDA NOT NULL
);

CREATE TABLE PEDIDOS (
ID_PEDIDO INTEGER NOT NULL,
ID_CLIENTE INTEGER NOT NULL,
DATAPED TIMESTAMP NOT NULL
);

CREATE TABLE PRODUTOS (
ID_PRODUTO INTEGER NOT NULL,
DESCRICAO VARCHAR(60) NOT NULL,
PRECOCOMPRA MOEDA NOT NULL,
QUANTIDADE INTEGER NOT NULL
);


/******************************************************************************/
/* Primary Keys */
/******************************************************************************/

ALTER TABLE CLIENTES ADD PRIMARY KEY (ID_CLIENTE);
ALTER TABLE PEDIDOS ADD PRIMARY KEY (ID_PEDIDO);
ALTER TABLE PRODUTOS ADD PRIMARY KEY (ID_PRODUTO);
ALTER TABLE ITENS ADD PRIMARY KEY(ID_PEDIDO, ID_PRODUTO);


/******************************************************************************/
/* Foreign Keys */
/******************************************************************************/


ALTER TABLE ITENS ADD FOREIGN KEY (ID_PRODUTO) REFERENCES PRODUTOS (ID_PRODUTO);
ALTER TABLE ITENS ADD FOREIGN KEY (ID_PEDIDO) REFERENCES PEDIDOS (ID_PEDIDO);
ALTER TABLE PEDIDOS ADD FOREIGN KEY (ID_CLIENTE) REFERENCES CLIENTES (ID_CLIENTE);



/******************************************************************************/
/* ÍNDICES */
/******************************************************************************/

CREATE INDEX IDX_NOMECLI ON CLIENTES(NOME);
CREATE UNIQUE INDEX IDX_CPF_CLI ON CLIENTES(CPF);
CREATE INDEX IDX_DATAPED ON PEDIDOS(DATAPED);
CREATE UNIQUE INDEX IDX_DESCRICAO_PROD ON PRODUTOS(DESCRICAO);

/******************************************************************************/
/* VISÕES */
/******************************************************************************/


SET TERM ^ ;
CREATE VIEW TOTAL_VENDIDO_PRODUTO(Produto, QTDE_vendida,Valor_vendido) AS
SELECT
produtos.descricao, sum(itens.quantidade) ,SUM(itens.quantidade* itens.PRECOVENDA)
FROM
produtos, itens , pedidos
WHERE
produtos.id_produto = ITENS.id_produto AND
itens.id_pedido = pedidos.id_pedido

group BY
produtos.descricao


^

/******************************************************************************/
/* Generators */
/******************************************************************************/

CREATE GENERATOR GEN_ID_CLIENTE;

CREATE GENERATOR GEN_ID_PRODUTO;

/******************************************************************************/
/* Stored Procedures */
/******************************************************************************/

SET TERM ^ ;

CREATE PROCEDURE CALCULATOTALPEDIDO (
PNUMPEDIDO INTEGER)RETURNS (VSOMA NUMERIC(15,2))
AS
BEGIN
SELECT SUM(QUANTIDADE * PRECOVENDA) FROM ITENS WHERE ID_PEDIDO = :PNUMPEDIDO INTO :VSOMA;
suspend;
END
^


/******************************************************************************/
/* Triggers */
/******************************************************************************/

SET TERM ^ ;

/* Trigger: TRG_INCREMENTA_CLIENTE */
CREATE TRIGGER TRG_INCREMENTA_CLIENTE FOR CLIENTES
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
NEW.ID_CLIENTE = GEN_ID(GEN_ID_CLIENTE, 1);
END;
^


/* Trigger: TRG_INCREMENTA_PRODUTO */
CREATE TRIGGER TRG_INCREMENTA_PRODUTO FOR PRODUTOS
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
NEW.ID_PRODUTO = GEN_ID(GEN_ID_PRODUTO, 1);
END
^


Artigo completo (View Full Post)

 
BlogBlogs.Com.Br