Pessoal, boa noite! Estou precisando de uma ajuda em um script que criei para um trabalho da faculdade. Sou iniciante e estou com algumas dúvidas.
Bom estou postando o script do início do banco. A tabela usuário tem relacionamento de 1 para 1 com a tabela pessoa. A tabela funcionario herda da tabela pesFisica que por sua vez herda da tabela pessoa.
Quando insiro um registro na tabela usuario pego o id_usuario (PK) gerado e utilizo na inserção de registro na tabela pessoa para o campo id_usuario (FK). Antes eu utilizava o tipo Serial para todos os meus ids, tanto chave primária como chave estrangeira, mas li que o correto é o campo serial apenas para chave primária e o tipo Integer para chave estrangeira. Está correto?
Estou tendo um grande problema na exclusão de registros. Declarei na chave estrangeira da tabela pessoa "ON Delete Cascade" que deveria me garantir que ao deletar um registro da tabela pai o registro associado na tabela filho fosse também deletado, mas não é isso que acontece. Quando deleto um registro da tabela usuario não existe a deleção do registro correspondente nas tabelas pessoa, pesFisica e funcionario. E quando tento excluir um registro da tabela pessoa não sou barrado informando erro de restrição de chave estrangeira, ele simplesmente deleta.
Alguém poderia ajudar?
CREATE TABLE usuario (
id_usuario SERIAL NOT NULL,
email VARCHAR(20) NOT NULL CONSTRAINT unq_email UNIQUE,
Question
Jefferson Monteiro
Pessoal, boa noite! Estou precisando de uma ajuda em um script que criei para um trabalho da faculdade. Sou iniciante e estou com algumas dúvidas.
Bom estou postando o script do início do banco. A tabela usuário tem relacionamento de 1 para 1 com a tabela pessoa. A tabela funcionario herda da tabela pesFisica que por sua vez herda da tabela pessoa.
Quando insiro um registro na tabela usuario pego o id_usuario (PK) gerado e utilizo na inserção de registro na tabela pessoa para o campo id_usuario (FK). Antes eu utilizava o tipo Serial para todos os meus ids, tanto chave primária como chave estrangeira, mas li que o correto é o campo serial apenas para chave primária e o tipo Integer para chave estrangeira. Está correto?
Estou tendo um grande problema na exclusão de registros. Declarei na chave estrangeira da tabela pessoa "ON Delete Cascade" que deveria me garantir que ao deletar um registro da tabela pai o registro associado na tabela filho fosse também deletado, mas não é isso que acontece. Quando deleto um registro da tabela usuario não existe a deleção do registro correspondente nas tabelas pessoa, pesFisica e funcionario. E quando tento excluir um registro da tabela pessoa não sou barrado informando erro de restrição de chave estrangeira, ele simplesmente deleta.
Alguém poderia ajudar?
CREATE TABLE usuario (
id_usuario SERIAL NOT NULL,
email VARCHAR(20) NOT NULL CONSTRAINT unq_email UNIQUE,
senha VARCHAR(10) NOT NULL,
tp_usuario VARCHAR(10) NOT NULL,
CONSTRAINT pk_id_usuario PRIMARY KEY (id_usuario)
);
CREATE TABLE pessoa (
id_pessoa SERIAL NOT NULL,
id_usuario INTEGER NOT NULL,--(FK)
nome VARCHAR(45) NOT NULL,
tel_movel VARCHAR(10),
tel_fixo VARCHAR(10),
tel_comercial VARCHAR(10),
sexo VARCHAR(10) NOT NULL,
CONSTRAINT pk_id_pessoa PRIMARY KEY (id_pessoa),
CONSTRAINT fk_id_pessoa_id_usuario FOREIGN KEY (id_usuario) REFERENCES usuario (id_usuario) ON DELETE CASCADE
);
CREATE TABLE pesFisica (
id_pesFisica SERIAL NOT NULL,
cpf VARCHAR(11) NOT NULL CONSTRAINT unq_cpf UNIQUE,
dt_nascimento DATE NOT NULL,
CONSTRAINT pk_id_pesFisica PRIMARY KEY (id_pesFisica)
)INHERITS (pessoa);
CREATE TABLE funcionario (
id_funcionario SERIAL NOT NULL,
endereco VARCHAR(45) NOT NULL,
numero VARCHAR(5) NOT NULL,
bairro VARCHAR(20) NOT NULL,
cep VARCHAR(8) NOT NULL,
cargo VARCHAR(10) NOT NULL,
CONSTRAINT pk_id_funcionario PRIMARY KEY (id_funcionario)
)INHERITS (pesFisica);
Link to comment
Share on other sites
3 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.