BANCO DE DADOS RELACIONAL

MGALDINO 27/07/2011 11:01:15
#380093
Pessoal bom dia!

Tenho uma duvida quanto a banco de dados relacional

Tem duas tabelas relacionadas por exemplo

Tb_Funcionario

CodigoFIncionario int(11) not null default 0 chave
NomeFuncionario varchar(60) null,
CodFuncao int(11) default 0, chave estrangeira


Tb_Funcao
CodigoFuncao int(11) not null default 0 chave
Descricao varchar(30) null,


Gostaria de quando cadastrar um funcionario e ainda nao tiver uma funcao definida,
deixar o 0 como default.
Hoje esta dando erro na constraint realmente nao existe codigo 0 cadastrado na tabela funcao.
Qual modo certo para manter um banco relacional, deixando o campo codfuncao permitindo null?
KERPLUNK 27/07/2011 11:10:09
#380095
Depende do banco de dados e do modo como fez a constraint. Geralmente o defaul é não deixar inserir caso a constraint não seja satisfeita. Mas se o caso é de ser possível incluir dados que podem não ser relacionados, então a constraint não deveria existir...
WILLVIDAL 27/07/2011 11:17:54
#380099
Resposta escolhida
Cara acho que uma solução seria você cadastrar uma função como INDEFINIDA, assim quando você não souber a função você simplesmente coloca como INDEFINIDA, e ainda pode fazer de um jeito que se você deixar em branco ela joga indefinida como padrão.
MGALDINO 27/07/2011 11:24:05
#380101
A Ideia inicial de ter constraint é segurança... Nesse exemplo nao excluir uma funçao que esta sendo utilizada em um funcionario.
Porem tento sempre deixar o minimo de dados obrigatorios.
Se for consistir todos os campos derivados de um cadastro vou limitar muito o sistema.



Estou usando Mysql.


MGALDINO 27/07/2011 11:28:29
#380102
Esqueci de Comentar,

Coloco default 0 por que trato no sistema como numero, nem verifico se esta null nada.

WILLVIDAL sua ideia foi boa!!!
Caso nao tenha jeito de melhorar isso vou seguir seu exemplo!
KERPLUNK 27/07/2011 11:32:22
#380103
Bem a idéia é simples, a constraint valida dados quando eles existem. Zero, é valor, ou seja, se colocar 0 e não null a constraint vai validar. Então ficar numa sinuca de bico, ou coloca null ou coloca 0 (cadastrando uma função com código 0) ou desativa a constraint.
MGALDINO 27/07/2011 11:43:20
#380106
Entao o campo ja esta assim!

CodFuncao int(11) not null default 0

O banco consiste Null joga zero, depois consiste o 0 que nao existe na TB_Funcao.
A Alternativa e adicionar o codigo 0 na tabela com descricao [Ô][Ô].
Continua com a constraint ativa.

MGALDINO 27/07/2011 13:53:53
#380117
Beleza estou fazendo conforme a ideia do WILLVIDAL.
COLOQUEI CODIGO 0 NA TABELA.
Tópico encerrado , respostas não são mais permitidas