Fórum Duvidas com Banco de Dados e SQL #57884

13/02/2007

0

Pessoal, estou com uma enorme duvida e não sei se alguem pode me ajudar.
Eu sou novo com programação, principalmente com BD e SQL, e tenho algumas duvidas.

1º: Qual a melhor interface de BD para se trabalhar que fornece o maior numero de conexão de usuários? Estou trabalhando com Interbase, mas eu li que ele só aceita 20 usuários conectados.

2º: Estou criando um sistema, onde está integrado td, administração, caixa, finança, gerencia, estoque. A minha duvida que surgiu no momento, é o seguinte. Eu tenho algumas tabelas com a seguinte estrutura:
Create Table "Bebidas"  (
"bbdCodigo" Integer NOT NULL,
"bbdNome" Char(20) NOT NULL,
"bbdPreco" Decimal(4,2) NOT NULL,
 Primary Key ("bbdCodigo","bbdNome","bbdPreco")
);

Create Table "Alimentos"  (
"almCodigo" Integer NOT NULL,
"almNome" Char(20) NOT NULL,
"almDescricao" Char(80),
"almPreco" Decimal(4,2) NOT NULL,
 Primary Key ("almCodigo","almNome","almPreco")
);

Create Table "Cozinha"  (
"almCodigo" Integer NOT NULL,
"almNome" Char(20) NOT NULL,
"almPreco" Decimal(4,2) NOT NULL,
 Primary Key ("almCodigo","almNome","almPreco")
);

Create Table "Bar"  (
"bbdCodigo" Integer NOT NULL,
"bbdNome" Char(20) NOT NULL,
"bbdPreco" Decimal(4,2) NOT NULL,
 Primary Key ("bbdCodigo","bbdNome","bbdPreco")
);

Create Table "Caixa"  (
"caiCodigo" Integer NOT NULL,
"caiMesa" Decimal(3,0),
"caiPrSubTotal" Decimal(5,2),
"caiNumPessoa" Decimal(5,0),
"caiPrPessoa" Decimal(5,2),
"bbdCodigo" Integer NOT NULL,
"bbdNome" Char(20) NOT NULL,
"almCodigo" Integer NOT NULL,
"almNome" Char(20) NOT NULL,
"bbdPreco" Decimal(4,2) NOT NULL,
"almPreco" Decimal(4,2) NOT NULL,
"caiQtdade" Integer,
 Primary Key ("caiCodigo","bbdCodigo","bbdNome","almCodigo","almNome","bbdPreco","almPreco")
);


Alter Table "Bar" add Foreign Key ("bbdCodigo","bbdNome","bbdPreco") references "Bebidas" ("bbdCodigo","bbdNome","bbdPreco") on update no action on delete no action;
Alter Table "Caixa" add Foreign Key ("bbdCodigo","bbdNome","bbdPreco") references "Bebidas" ("bbdCodigo","bbdNome","bbdPreco") on update no action on delete no action;
Alter Table "Cozinha" add Foreign Key ("almCodigo","almNome","almPreco") references "Alimentos" ("almCodigo","almNome","almPreco") on update no action on delete no action;
Alter Table "Caixa" add Foreign Key ("almCodigo","almNome","almPreco") references "Alimentos" ("almCodigo","almNome","almPreco") on update no action on delete no action;


está certo a forma que foi criada a tabela caixa? pois preciso pegar os dados das outras tabelas para que esteja mostrando o que foi utilizado por cada mesa.

3º: como faço para que os pedidos apareçam como uma nota fiscal na própria tela? Utilizo uma listbox? Como faço para que ela insira o código do produto, nome e preço na mesma linha?

4º: em um outro sistema parecido com este, vou preciso que as vezes os pedidos e os preços sejam incluidos em uma conta, e a preço total anterior seja atualizado com a inclusão dos novos produtos.

Agradeço se alguem puder me ajudar, mesmo que seja somente em algumas duvidas.

Eduardo


Edusjc

Edusjc

Responder

Posts

13/02/2007

Marcosrocha

Bem... o melhor banco de dados (inclusive o qual eu trabalho) é o FireBird... porque é gratuito e tem conexões ilimitadas (dependendo claro do servidor de dados)...
Porém li sua SQL e acho que você vai ter que dar uma lida em tutoriais de SQL... Por que sua ligação tá parecendo Paradox... muito complicada de ser utilizada... Por favor, não me leve a mal...
Dá uma olhada no [url=http://www.apostilando.com/sessao.php?cod=18]Apostilando.com[/url] a procura de apostilas de SQL...


Responder

Gostei + 0

13/02/2007

Edusjc

Sem problema.
Na verdade eu utilizo o software Toad Data Modeler para criar o MER do BD, e ele que gera este código.


Responder

Gostei + 0

13/02/2007

Marcosrocha

Nossa kra eu não recomendo ´foreign keys´... é extremamente difícil eliminar um registro preso com elas...
Uma saída simples que eu uso aqui seria você criar um cadastro de produtos com classificação (1-´Bebidas´,2-´Alimentos´) e no ligar ao Caixa mediante o código do produto...
CREATE TABLE PRODUTOS (
  PRO_CODIGO    INTEGER NOT NULL,
  PRO_DESCRICAO VARCHAR(100) CHARACTER SET WIN1252 COLLATE WIN_PTBR,
  PRO_VLVENDA   DECIMAL(15,2),
  PRO_TIPO      SMALLINT, -- 1 BEBIDAS  2 ALIMENTOS  3 COZINHA  4 BAR
  PRIMARY KEY (PRO_CODIGO));

CREATE TABLE VENDA (
  VEN_CODIGO    INTEGER NOT NULL,
  VEN_DATA      DATE,
  CLI_CODIGO    INTEGER,
  VEN_VLBRUTO   DECIMAL(15,2),
  VEN_DESCONTO  DECIMAL(15,2),
  VEN_VLLIQUIDO DECIMAL(15,2),
  PRIMARY KEY (VEN_CODIGO));

CREATE TABLE VENDAPRODUTO (
  VEN_CODIGO  INTEGER NOT NULL,
  VPR_CODIGO  INTEGER NOT NULL,
  PRO_CODIGO  INTEGER,
  VPR_QTDE    INTEGER,
  VPR_VLUNIT  DECIMAL(15,2),
  VPR_VLTOTAL DECIMAL(15,2),
  PRIMARY KEY (VEN_CODIGO, VPR_CODIGO, PRO_CODIGO));

CREATE TABLE CAIXA (
  CAI_CODIGO   INTEGER NOT NULL,
  CAI_DATA     DATE,
  CAI_VALOR    DECIMAL(15,2),
  CAI_OPERADOR VARCHAR(50) CHARACTER SET WIN1252 COLLATE WIN_PTBR,
  VEN_CODIGO   INTEGER,
  PRIMARY KEY (CAI_CODIGO));

Acho que dá pra saber os campos de ligação aí... Claro que a forma que trabalho talvez não seja mais apropriada a sua aplicação, pois não trabalho com DBEdits e DBGrids como a maioria de programadores que conheço, mas essa estrutura do DB nunca me deixou na mão... Pois dessa forma, eu controle as Vendas separadamente do Caixa...


Responder

Gostei + 0

13/02/2007

Edusjc

Já que vc não utiliza o DBEdit, qual componente utiliza para inserir os dados?

Acho que entendi o seu código, exceto por uma coisa, onde é que está a ligação da tabela de venda com o caixa?

Existe alguma apostila de tutorial de como utilizar o firebird??


Responder

Gostei + 0

14/02/2007

Callegaro

Gostaria só de deixar minha opinião sobre o melhor banco de dados atualmente. A Oracle lançou uma versão free do seu banco, com as seguintes limitações: O tamanho do banco não pode ultrapassar 4 GB e o programa não utiliza mais que 1 GB de memória (por mais que você tenha 4 GB de memória no servidor, ele vai usar apenas 1 GB). Acredito que uma empresa que utilize um banco de dados que ultrapasse 4 GB, é porque tem condições de adquirir a versão full do SGBD. Ah, existem também alguns relatórios da parte da administração que não são exibidos na versão Free (mas isto não é muito importante para aplicações pequenas). Na minha opinião, Oracle é o melhor banco de dados do mundo :wink:


Responder

Gostei + 0

14/02/2007

Marcosrocha

Então qual a vantagem de se ter um gerenciador de banco de dados que não exibe relatórios?? Concordo contigo que o Oracle é o melhor do mundo... mas na minha opinião é só pra ´peixe grande´. Em outras palavras, pra quem pode pagar... Além do mais o FireBird se comporta muito bem com meus bancos de 200Mb com mais de 100.000 registros... :wink:


Responder

Gostei + 0

14/02/2007

Callegaro

Os relatórios a que eu me refiro são relatórios de performace do banco. Dados como onde o banco poderia melhorar, dicas de criar index para agilizar pesquisas nas tabelas, bem como visualizar os SQL´s que são mais demorados estão disponíveis na versão Free. Os relatórios que não estão disponíveis são relatórios avançados, que nem eu sei direito pra que servem hehe. Daí teria que ver com um DBA para que servem.


Responder

Gostei + 0

14/02/2007

Marcosrocha

Os relatórios a que eu me refiro são relatórios de performace do banco. Dados como onde o banco poderia melhorar, dicas de criar index para agilizar pesquisas nas tabelas, bem como visualizar os SQL´s que são mais demorados estão disponíveis na versão Free. Os relatórios que não estão disponíveis são relatórios avançados, que nem eu sei direito pra que servem hehe. Daí teria que ver com um DBA para que servem.

Pra mim o IBExpert se relaciona bem com o FB... na verdade tudo que eu sei de SQL foi aprendendo aqui e ´apanhando´ procurando na net... Quanto aos relatórios de performance, dicas de índices, etc... Sempre dá pra se ter uma idéia de onde melhorar... afinal... o índice é criado com base no ´Where´ da sua SQL... Acho que eu tenho bastante conhecimento nesses conceitos... Conclusão: Pra mim, por enquanto, eu prefiro o FB. Mas concordo 100¬ que o Oracle é o melhor, tendo em vista que a Petrobrás usa ele...


Responder

Gostei + 0

14/02/2007

Edusjc

Bom.. as minhas duvidas ainda não foram solucionadas.

Mcblade, tem uma coisa que não da certo no código que vc me enviou na seguinte estrutura:

CREATE TABLE PRODUTOS ( 
  PRO_CODIGO    INTEGER NOT NULL, 
  PRO_DESCRICAO VARCHAR(100) CHARACTER SET WIN1252 COLLATE WIN_PTBR, 
  PRO_VLVENDA   DECIMAL(15,2), 
  PRO_TIPO      SMALLINT, -- 1 BEBIDAS  2 ALIMENTOS  3 COZINHA  4 BAR 
  PRIMARY KEY (PRO_CODIGO));


Nesta tabela, vc colocou um campo com tipo, ou seja, 1 para bebidas, 2 para alimentos, etc. mas para mim não funciona pq quando eu criei uma tabela Cozinha e Bar, elas seriam em branco, pois o bar vai apenas receber as bebidas selecionado pelo cliente e será impresso em uma impressora tipo ECF, e a cozinha a mesma coisa, vai receber os pedidos que contém na tabelas Alimentos e vai imprimir (ou até mesmo visualizar em uma tela) os pedidos dos clientes na ECF para que seja efetuado os serviços, mas ao mesmo tempo, eles também vão ficar armazenados em no registro do caixa


Responder

Gostei + 0

15/02/2007

Marcosrocha

Entao edusjc... cada um tem sua maneira de trabalhar né :p
Mas essa estrutura é usada por mim para que seja possivel, numa compra ou venda, que o cliente possa selecionar vários produtos e também para que fique fácil a busca e controle das mesmas...


Responder

Gostei + 0

18/04/2007

Edusjc

Fiquei um tempo sem trabalhar no projeto, mas estou voltando..

mcblade, estou com duvida em algumas coisas..
no caso a tabela CAIXA seria utilizado apenas para registro histórico das vendas?? E durante a venda, eu utilizaria qual tabela, a VENDA ou a VENDAPRODUTO? Como eu faria para efetuar a venda de um produto ´X´? Como seria o código?

Desculpa por tanta pergunta básica, mas é que sou novo na parte de programação de banco de dados.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar