Problemas com Herança no PostgreeSQL

4 respostas
A
Estou com problemas na hora de inserir dados em uma tabela gerada apartir de uma relação n p/ n.

Se trata da tabela telefonePessoa (essa tabela tem os campos cod_telefone, e cod_pessoa, que vem das tabelas telefone e pessoa).

O problema esta no fato da tabela Pessoa ter duas tabelas filhas (pessoajuridica e pessoafisica).

Eu ja cadastrei varias pessoas fisicas e varias pessoas juridicas, e também varios telefones,

porem na hora que eu tento inserir algo na tabela telefonePessoa da erro, dizendo que a cod_pessoa não existe(porém existe, tanto na tabela pessoa, tanto na tabela pessoajuridica[ou pessoafisica]).

Se eu cadastrar um pessoa, ao inves de cadastrar uma pessoajuridica ou pessofisica, e usar o codigo de pessoa da certo.

Alguem pode me dizer o que estou fazendo de errado?

Script de criação da tabela telefone

[color=blue]CREATE TABLE Telefone(

cod_telefone integer DEFAULT nextval(cod_telefone_seq),

cod_tipo integer not null,

numero varchar(10) not null,

constraint pk_telefone primary key(cod_telefone),

constraint fk_telefone_1 foreign key(cod_tipo) references TipoTelefone(cod_tipo),

constraint fk_telefone_2 foreign key(cod_representante) references Representante(cod_representante)

);[/color]

Script de criação da tabela pessoa:

[color=blue]CREATE TABLE Pessoa(

cod_pessoa integer DEFAULT nextval(cod_pessoa_seq),

cod_endereco integer not null,

nome varchar (100) null,

email varchar(20) null,

data_cadastro date not null,

pagina_web varchar(30) null,

imagem  bytea not null,

constraint pk_pessoa primary key(cod_pessoa),

constraint fk_pessoa foreign key(cod_endereco) references Endereco(cod_endereco)

);[/color]

Script de criação da tabela pessoajuridica:

[color=blue]create table PessoaJuridica(

razao_social varchar(50) not null,

cnpj varchar(20) not null,

insc_estadual varchar(20) not null

)INHERITS (Pessoa[color=blue]

Script de criação da tabela telefonePessoa:

[color=blue]create table TelefonePessoa (

cod_telefone integer not null,

cod_pessoa integer not null,

constraint pk_telefonepessoa primary key (cod_telefone,cod_pessoa),

constraint fk_telefonepessoa_1 foreign key (cod_telefone) references Telefone (cod_telefone),

constraint fk_telefonepessoa_2 foreign key (cod_pessoa) references Pessoa (cod_pessoa)

);

Script de inserção na tabela telefonepessoa:

[color=blue]INSERT INTO telefonepessoa (cod_telefone, cod_pessoa) VALUES (2,3);[/color]

Obs. os valores 2 e 3 existem nas tabelas pessoa e telefone.

Desde ja, obrigado pela ajuda.
[/color]

4 Respostas

Adolpho_Alves

o codigo que vc colocou ta um pouco confuso talvez eu não tenha entendido direito, mas pelo o que eu entendi vc não colocou cod_pessoa como chave primaria e referenciou essa chave como estrangeira de pessoa.

se vc fizer isso vc vai, cadastra uma “pessoa”, dp uma “pessaojuridica” (com o msm cod_pessoa de “pessoa”), dp um “telefone” e no final uma “telefonepessoa”.

espero ter ajudado.

A

Eu estou tentando cadastrar uma pessojuridica sem cadastrar uma pessoa antes, então eu tenho que cadastrar uma pessoa, e depois uma pessoa juridica com o mesmo campos, mas o campos adicionais?

peczenyj

Aparentemente sim, vc ja olhou para a cara dessas tabelas no banco de dados?

A

Eu olhei a cara dessas tabelas sim, e aparecem corretamente no bd, e quando eu insiro dados na tabela pessoajuridica, esses dados tambem aparecem na tabela pessoa, com o mesmo id, so que na hora que eu tento inserir dados na tabela “telefonepesso”, ele acusa que o id de pessoa não existe, porem se eu inserir dados na tabela pessoa, e usar o id gerado por essa insersão da certo (eu consigo inserir dados na tabela “telefonepessoa”.

Criado 30 de janeiro de 2009
Ultima resposta 31 de jan. de 2009
Respostas 4
Participantes 3