quarta-feira, 26 de maio de 2010

Sistema Estoque - Banco de Dados

Aqui vai mais uma continuidade de meu Sistema Estoque.
Um sistema tem necessidades de salvar, alterar, editar, excluir, inserir dados e em cima desse conceito criei o banco de dados de meu sistema.
Utilizei como ferramenta para criação da BD o INTERBASE.

- Script SQL

Esse é o Script de meu sistema, ao qual conectarei mais tarde com algumas janelas novas:

1 - CRIANDO O BANCO DE DADOS


SET SQL DIALECT 3;

CREATE DATABASE 'C:\Estoque\dado\ESTOQUE.GDB' PAGE_SIZE 4096


DECLARE EXTERNAL FUNCTION RDB$GET_CONTEXT
VARCHAR(80) CHARACTER SET NONE, VARCHAR(80) CHARACTER SET NONE
RETURNS VARCHAR(255) CHARACTER SET NONE FREE_IT
ENTRY_POINT 'get_context' MODULE_NAME 'system_module';


DECLARE EXTERNAL FUNCTION RDB$SET_CONTEXT
VARCHAR(80) CHARACTER SET NONE, VARCHAR(80) CHARACTER SET NONE, VARCHAR(255) CHARACTER SET NONE
RETURNS INTEGER BY VALUE
ENTRY_POINT 'set_context' MODULE_NAME 'system_module';

2 - TABELA BAIRRO

CREATE TABLE "BAIRRO"
(
"BAIRRO_CODIGO" INTEGER NOT NULL,
"BAIRRO_NOME" VARCHAR(40) NOT NULL,
CONSTRAINT "BAIRRO_PK" PRIMARY KEY ("BAIRRO_CODIGO")
);


3 - TABELA CARGO

CREATE TABLE "CARGO"
(
"CARGO_CODIGO" INTEGER NOT NULL,
"CARGO_NOME" VARCHAR(40),
CONSTRAINT "CARGO_PK" PRIMARY KEY ("CARGO_CODIGO")
);

4 - TABELA CLIENTE

CREATE TABLE "CLIENTE"
(
"CLI_CODIGO" INTEGER NOT NULL,
"CLI_NOME" VARCHAR(40) NOT NULL,
"CLI_LOGRADOURO" INTEGER NOT NULL,
"CLI_NUMERO" VARCHAR(10) NOT NULL,
"CLI_BAIRRO" INTEGER NOT NULL,
"CLI_CIDADE" INTEGER NOT NULL,
"CLI_CEP" VARCHAR(10),
"CLI_DATANASC" TIMESTAMP NOT NULL,
"CLI_DATACAD" TIMESTAMP NOT NULL,
"CLI_COMPLEMENTO" VARCHAR(10),
"CLI_FOTO" VARCHAR(40),
"CLI_CPF" VARCHAR(14),
"CLI_RG" VARCHAR(20),
"CLI_FONERES" VARCHAR(16),
"CLI_FONECOM" VARCHAR(16),
"CLI_FONECEL" VARCHAR(16),
"CLI_OBS" VARCHAR(40),
"PES_EMAIL" VARCHAR(50),
CONSTRAINT "CLIENTE_PK" PRIMARY KEY ("CLI_CODIGO")
);

5 - TABELA FUNCIONARIO

CREATE TABLE "FUNCIONARIO"
(
"FUNC_CODIGO" INTEGER NOT NULL,
"FUNC_NOME" VARCHAR(40) NOT NULL,
"FUNC_BAIRRO" INTEGER NOT NULL,
"FUNC_CIDADE" INTEGER NOT NULL,
"FUNC_CARGO" INTEGER NOT NULL,
"FUNC_APELIDO" VARCHAR(15),
"FUNC_ENDERECO" INTEGER NOT NULL,
"FUNC_COMPLEMENTO" VARCHAR(10),
"FUNC_CPF" VARCHAR(14),
"FUNC_RG" VARCHAR(20),
"FUNC_FONERES" VARCHAR(16),
"FUNC_FONECEL" VARCHAR(16),
"FUNC_OBS" VARCHAR(40),
"FUNC_DATAADM" TIMESTAMP,
"FUNC_DATANASC" TIMESTAMP,
"FUNC_NUM" VARCHAR(40),
"FUNC_EMAIL" VARCHAR(40),
"FUNC_CEP" VARCHAR(10),
"FUNC_UF" VARCHAR(2),
"FUNC_FOTO" VARCHAR(60),
CONSTRAINT "FUNC_PK" PRIMARY KEY ("FUNC_CODIGO")
);

6 - TABELA LOGRADOURO

CREATE TABLE "LOGRADOURO"
(
"LOG_CODIGO" INTEGER NOT NULL,
"LOG_LOGRADOURO" VARCHAR(40) NOT NULL,
CONSTRAINT "LOG_PK" PRIMARY KEY ("LOG_CODIGO")
);

7 - TABELA CIDADE

CREATE TABLE "TBL_CIDADE"
(
"CID_CODIGO" INTEGER NOT NULL,
"CID_NOME" VARCHAR(30) NOT NULL,
"CID_UF" VARCHAR(2) NOT NULL,
CONSTRAINT "CIDADE_PK" PRIMARY KEY ("CID_CODIGO")
);

8 - TABELA FUNCIONARIO

CREATE TABLE "TBL_FUNC"
(
"FUNC_CODIGO" INTEGER NOT NULL,
"FUNC_NOME" VARCHAR(40) NOT NULL,
"FUNC_BAIRRO" VARCHAR(20),
"FUNC_CIDADE" INTEGER NOT NULL,
"FUNC_CARGO" VARCHAR(20),
"FUNC_ENDERECO" VARCHAR(40) NOT NULL,
"FUNC_CPF" VARCHAR(14),
"FUNC_RG" VARCHAR(20),
"FUNC_FONERES" VARCHAR(16),
"FUNC_DATAADM" TIMESTAMP,
"FUNC_DATANASC" TIMESTAMP,
CONSTRAINT "FUNCIONARIO_PK" PRIMARY KEY ("FUNC_CODIGO")
);

9 - CRIANDO OS INDICES (Geralmente para codigo e nome)


CREATE INDEX "IND_COD_BAIRRO" ON "BAIRRO"("BAIRRO_CODIGO");
CREATE INDEX "IND_NOME_BAIRRO" ON "BAIRRO"("BAIRRO_NOME");
CREATE INDEX "IND_COD_CARGO" ON "CARGO"("CARGO_CODIGO");
CREATE INDEX "IND_NOME_CARGO" ON "CARGO"("CARGO_NOME");
CREATE INDEX "IND_COD_cliente" ON "CLIENTE"("CLI_CODIGO");
CREATE INDEX "IND_NOME_cliente" ON "CLIENTE"("CLI_NOME");
CREATE INDEX "IND_COD_FUNC" ON "FUNCIONARIO"("FUNC_CODIGO");
CREATE INDEX "IND_NOME_FUNC" ON "FUNCIONARIO"("FUNC_NOME");
CREATE INDEX "IND_COD_LOG" ON "LOGRADOURO"("LOG_CODIGO");
CREATE INDEX "IND_NOME_LOG" ON "LOGRADOURO"("LOG_LOGRADOURO");
CREATE INDEX "IND_COD_CIDADE" ON "TBL_CIDADE"("CID_CODIGO");
CREATE INDEX "IND_NOME_CIDADE" ON "TBL_CIDADE"("CID_NOME");
ALTER TABLE "CLIENTE" ADD CONSTRAINT "CLIENTE_BAIRRO" FOREIGN KEY ("CLI_BAIRRO") REFERENCES BAIRRO ("BAIRRO_CODIGO");
ALTER TABLE "CLIENTE" ADD CONSTRAINT "CLIENTE_CIDADE" FOREIGN KEY ("CLI_CIDADE") REFERENCES TBL_CIDADE ("CID_CODIGO");
ALTER TABLE "CLIENTE" ADD CONSTRAINT "CLIENTE_LOGRADOURO" FOREIGN KEY ("CLI_LOGRADOURO") REFERENCES LOGRADOURO ("LOG_CODIGO");
ALTER TABLE "FUNCIONARIO" ADD CONSTRAINT "FUNC_BAIRRO" FOREIGN KEY ("FUNC_BAIRRO") REFERENCES BAIRRO ("BAIRRO_CODIGO") ON UPDATE NO ACTION ON DELETE NO ACTION;
ALTER TABLE "FUNCIONARIO" ADD CONSTRAINT "FUNC_CARGO" FOREIGN KEY ("FUNC_CARGO") REFERENCES CARGO ("CARGO_CODIGO") ON UPDATE NO ACTION ON DELETE NO ACTION;
ALTER TABLE "FUNCIONARIO" ADD CONSTRAINT "FUNC_CIDADE" FOREIGN KEY ("FUNC_CIDADE") REFERENCES TBL_CIDADE ("CID_CODIGO") ON UPDATE NO ACTION ON DELETE NO ACTION;
ALTER TABLE "FUNCIONARIO" ADD CONSTRAINT "FUNC_ENDERECO" FOREIGN KEY ("FUNC_ENDERECO") REFERENCES LOGRADOURO ("LOG_CODIGO") ON UPDATE NO ACTION ON DELETE NO ACTION;

10 - CRIANDO A GENERATOR PARA TRIGGER

CREATE GENERATOR "GEN_COD_BAIRRO";
CREATE GENERATOR "GEN_COD_CIDADE";
CREATE GENERATOR "GEN_COD_LOG";
SET TERM ^ ;

11 - CRIANDO TRIGGER (Para gerar codigo automatico)

CREATE TRIGGER "GERA_COD_BAIRRO" FOR "BAIRRO"
ACTIVE BEFORE INSERT POSITION 0
as
begin
new.bairro_codigo = gen_id (gen_cod_bairro,1);
end
^

CREATE TRIGGER "GERA_COD_LOG" FOR "LOGRADOURO"
ACTIVE BEFORE INSERT POSITION 0
as
begin
new.log_codigo = gen_id (gen_cod_log,1);
end
^

CREATE TRIGGER "GERA_COD_CIDADE" FOR "TBL_CIDADE"
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
NEW.cid_codigo = gen_id (gen_cod_cidade,1);
END
^

COMMIT WORK ^
SET TERM ;^


Pessoal este é um exemplo de banco de dados simples, não há nenhuma consulta nele mesmo até que usamos nossas consultas em Query do próprio sistema.
Este código mostra:
- A criação do Banco de Dados (CREATE DATABASE)
- A criação de Tabelas (CREATE TABLE)
- A criação de Indices (CREATE INDEX)
- A criação de Generator (CREATE GENERATOR)
- A criação de Trigger ou gatilhos (CREATE TRIGGER)

Espero que tenham gostado.
Qualquer duvida entre em contato comigo através do e-mail.

"ettore.state = 'Em busca de um estágio'"

- DUVIDAS e SUGESTÕES - ettorefrancobr@gmail.com

4 comentários:

  1. Um dica, não use o Interbase pois alem de ele ser proprietario, é inferior ao Firebird.

    ResponderExcluir
  2. Ah certo, vou ver se utiliso um SGDB mais apropriado, vou refletir mais a respeito

    ResponderExcluir
  3. PostgreSQL!

    Bastante confiável e robusto!

    ResponderExcluir
  4. Use hsqldb é open source, roda em ambiente Linux sem problemas.

    ResponderExcluir