Como implementar generalização em DB?

Scripts Diversos para o Oracle SQL*Plus. (Relacionado a ferramenta Oracle SQL*Plus, para questões de SQL, usar o forum SQL)
Responder
mayconguedes
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 12
Registrado em: Ter, 19 Jul 2011 7:48 pm
Localização: Marataízes - ES

Minha duvida é a seguinte, tenho 3 classes, logo fiz 1 tabela para cada classe:
- Pessoas (nome, telefone, CPF)
- Funcionarios (codFuncionario, cargo)
- Clientes (codCliente)

Funcionarios e Clientes são especializações da classe Pessoas.

Quero saber se para implementar a generalização no banco de dados devo adicionar os atributos codCliente e codFuncionario dentro da tabela Pessoas como chave estrangeira?

Caso não sendo assim... como seria?
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

mayconguedes,

Não sou especialista em orientação a objetos, mas você poderia sim criar as colunas codCliente e codFuncionario dentro da tabela Pessoas.

Mas você necessitaria criar estas colunas com o atributo NULL, pois acredito que nem sempre PESSOA será FUNCIONARIO e CLIENTE ao mesmo tempo.

Para garantir a integridade, você poderia também criar uma constraint do tipo CHECK, para evitar que uma PESSOA não apresente ambas estas colunas com "valores" NULL.

Abraços,

Sergio Coutinho
ishii
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 82
Registrado em: Ter, 28 Dez 2010 7:41 pm
Localização: São Paulo - SP

Olá,

Entendo que serão entidade diferentes, portanto tabelas diferentes com atributos diferentes, mas tabelas filho da tabela de Pessoas...

Funcionários terão atributos como Número do Cartão, forma de pagamento etc.

Clientes terão atributos como Condição de Pagamento, prazos etc.

Na tabela cliente, o ideal seria ter os indicares check como sugerido: ind_cliente (S/N) e ind_funcionario (S/N) e caso de S uma tabela filho de cada entidade relacionada... por exemplo: se ind_cliente = S então obrigatoriamente uma linha na tabela Cliente....

OO não é diretamente 101 para a MER, mas sim uma base para a criação do Modelo de Dados....

[]s Ishii
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 5 visitantes