Ajuda para criação de Tabelas
14/12/2009
0
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
Wanderson Queiroz
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
17/12/2009
Wanderson Queiroz
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
17/12/2009
Adolfo Lopes
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
17/12/2009
Wanderson Queiroz
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
18/12/2009
Adolfo Lopes
Poderia meu explicar pq vc gostaria de usar ID???
juan
Clique aqui para fazer login e interagir na Comunidade :)