Ajuda para criação de Tabelas

14/12/2009

1

Olá pessoal,

Desculpem a minha ignorância, mas estou enfrentando problemas na criação desta tabela:

----------------------------------------------------------------------------------
Create Table Vendas
(
Id        integer not null,
CodVenda      integer not null,
CodCliente    integer default 0,
CodFuncionario          integer not null,
Data_Venda    date not null,
Hora_Venda    time not null,
Total_Venda    numeric(7,2) not null,
Total_Desc    numeric(7,2) default 0,
Valor_Rec      numeric(7,2) not null,
Troco          numeric(7,2) default 0,
Forma_Pgto    varchar(20) not null,
Primary Key(Id, CodVenda),
Foreign Key(CodCliente) references Cliente,
Foreign Key(CodFuncionario) references Funcionario,
Check (Forma_Pgto in (‘A Vista’, ‘A Prazo’, ‘Cheque a Vista’,
                      ‘Cheque a Prazo’, ‘Cartão de Crédito’))
);
----------------------------------------------------------------------------------
Lembrando que já tenho criadas as tabelas CLIENTE e FUNCIONARIO com os campos CODCLIENTE e CODFUNCIONARIO como primary key. Mesmo assim está ocorrendo o seguinte erro:

ISC ERROR CODE:335544569
ISC ERROR MESSAGE:
Dynamic SQL Error
SQL error code = -607
Invalid command
FOREIGN KEY column count does not match PRIMARY KEY
----------------------------------------------------------------------------------
Será que alguém tem alguma idéia?

Wanderson Ramos
Buritizeiro
MG
Responder

Posts

16/12/2009

Adolfo Lopes


1) Aplicativo que você esta a usar para gerar o SQL

2) Coloca também Cliente e Funcionário


Responder
Juan Gonzales

Bom dia,

Antes de mais nada, obrigado por sua ajudar.

1) Estou usando  IBOConsole 1.1.12.16 e Banco de Dados Firebird 2.1

2) Tabela Cliente:

Create table Cliente
(
Id integer not null,
CodCliente integer not null,
Nome varchar(80) not null,
Endereco varchar(100),
Bairro varchar(40),
Cidade varchar(40),
Estado varchar(2),
Telefone varchar(15),
Nascimento date,
CPF varchar(15) not null,
Primary Key(Id, Codcliente),
Unique(CPF)
);


Tabela Funcionario:

Create table Funcionario
(
Id integer not null,
CodFuncionario integer not null,
Nome varchar(80) not null,
Endereco varchar(100),
Bairro varchar(40),
Cidade varchar(40),
Estado varchar(2),
Telefone varchar(15),
Nascimento date,
CPF varchar(15) not null,
Data_Admissao date,
Primary Key(Id, Codcliente),
Unique(CPF)
);

Abraços,

Wanderson Ramos Queiroz
Buritizeiro - MG
Responder

17/12/2009

Adolfo Lopes

  Wanderson

  Boa tarde,

Bem o problema e o uso da chave primaria composta. Não sei porque você esta a usar.

** ID e ainda CodCliente não tem necessidade. Então:

1) Tabela Cliente


Create table Cliente
(
CodCliente integer not null,
Nome varchar(80) not null,
Endereco varchar(100),
Bairro varchar(40),
Cidade varchar(40),
Estado varchar(2),
Telefone varchar(15),
Nascimento date,
CPF varchar(15) not null,
Primary Key(Codcliente),
Unique(CPF)
);

CREATE SEQUENCE SEQ_CODCLIENTE;

/* Trigger: CLIENTE_BI */
CREATE OR ALTER TRIGGER CLIENTE_BI FOR CLIENTE
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.CODCLIENTE IS NULL) THEN
    NEW.CODCLIENTE = GEN_ID(SEQ_CODCLIENTE,1);
END


2) Tabela Funcionario:

Create table Funcionario
(
CodFuncionario integer not null,
Nome varchar(80) not null,
Endereco varchar(100),
Bairro varchar(40),
Cidade varchar(40),
Estado varchar(2),
Telefone varchar(15),
Nascimento date,
CPF varchar(15) not null,
Data_Admissao date,
Primary Key(CodFuncionario),
Unique(CPF)
);

CREATE SEQUENCE SEQ_CODFUNCIONARIO;

/* Trigger: FUNCIONARIO_BI */
CREATE OR ALTER TRIGGER FUNCIONARIO_BI FOR FUNCIONARIO
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.CODFUNCIONARIO IS NULL) THEN
    NEW.CODFUNCIONARIO = GEN_ID(SEQ_CODFUNCIONARIO,1);
END


3) Venda

Create Table Vendas
(
CodVenda      integer not null,
CodCliente    integer default 0,
CodFuncionario          integer not null,
Data_Venda    date not null,
Hora_Venda    time not null,
Total_Venda    numeric(7,2) not null,
Total_Desc    numeric(7,2) default 0,
Valor_Rec      numeric(7,2) not null,
Troco          numeric(7,2) default 0,
Forma_Pgto    varchar(20) not null,
Primary Key(CodVenda),
Foreign Key(CodCliente) references Cliente,
Foreign Key(CodFuncionario) references Funcionario,
Check (Forma_Pgto in (‘A Vista’, ‘A Prazo’, ‘Cheque a Vista’,
                      ‘Cheque a Prazo’, ‘Cartão de Crédito’))
);

CREATE SEQUENCE SEQ_CODVENDA;

/* Trigger: VENDAS_BI */
CREATE OR ALTER TRIGGER VENDAS_BI FOR VENDAS
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.CODVENDA IS NULL) THEN
    NEW.CODVENDA = GEN_ID(SEQ_CODVENDA,1);
END

- Conselhos
1) DOMINIOS para Tipo de Campo
2) Firebird 2.0 o 2.1 tem bug

Abraço

juan
Responder
Juan

Boa tarde,

Ok! Perfeito a sua explicação. Eu poderia então colocar ID não como chave primária (primary key), mas como chave única (unique)?

Vou seguir seu conselho e trocar o BD para Firebird 2.0.


Veleu, pela ajuda.

Abraços,


Wanderson Ramos Queiroz
Buritizeiro - MG
Responder

18/12/2009

Adolfo Lopes

Boa noite,

Poderia meu explicar pq vc gostaria de usar ID???

juan
Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira