SQL

SQL

por Gabriel Augusto Ventura Chang -
Número de respostas: 2

Estou com problema ao criar a tabela de telefones de funcionario

eu defini assim:

CREATE TABLE Tel_func(
telefone varchar(9),
CPF_func varchar(11) primary key,
FOREIGN KEY (CPF_func) REFERENCES Funcionario(CPF)
)

porem, eu quero colocar mais de um numero referente ao mesmo CPF e nao consigo.

O que eu preciso mudar?

Em resposta à Gabriel Augusto Ventura Chang

Re: SQL

por Deborah Stern -

Olá Gabriel,

Acredito que isso esteja acontecendo por vc ter indicado o CPF_func como primary key, e portanto não pode haver mais de uma tupla com um certo valor para este atributo. Uma forma de contornar isso, seria indicar o primary key como a junção entre telefone e CPF_func.

[]'s

Em resposta à Deborah Stern

Re: SQL

por Rafael Sampaio -

Oi, pessoal!

O que a Deborah comentou está certo: quando você define a chave primária a um atributo ou conjunto de atributos, isso significa que aquele atributo ou conjunto deve identificar univocamente cada uma das tuplas da tabela. Logo, repetições passam a ser proibidas.

Gostaria de deixar dois comentários:

1) Observe que se você modelar um número telefone como um único atributo, ele poderia ser a chave primária, certo? Afinal, não devem existir (fisicamente) dois telefones iguais para pessoas diferentes.

2) Por outro lado, definir número de telefone como um único atributo é ruim. Imagine que você queira guardar DDI, DDD, Prefixo, Sufixo e Ramal. Os prefixos podem mudar (lembra quando acrescentaram o 9 aos celulares?), e pode acontecer também de uma pessoa estar morando em SP, mas o seu telefone ser de São José dos Campos, logo uma consulta ao endereço atual da pessoa não ajudaria a resolver questões de DDD.

Por todos esses motivos, do meu ponto de vista, valeria a pena desmembrar o atributo 'telefone' em vários outros atributos. E aí como ficaria a chave primária? De novo, lembre o conceito de representar univocamente uma tupla: a chave primária precisaria ser composta de cada uma das partes do telefone. Tudo bem?

Abraço,
Rafael