Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Inserindo uma chave estrangeira com vários valores


Infelizmente você acabou de fazer a velha pergunta;

A resposta é, claro, que não; você tem duas colunas. Para estender seu exemplo de funcionário, sua tabela de funcionários se tornaria:
create table employees (
   id number
 , name varchar2(4000)
 , skill_1 number
 , skill_2 number
 , constraint employee_pk primary key (id)
 , constraint employee_skill_1_fs 
      foreign key ( skill_1 ) 
   references skills(skillid)
 , constraint employee_skill_2_fs 
      foreign key ( skill_2 ) 
   references skills(skillid) 
   );

Como você pode ver, isso não é uma coisa particularmente bonita de se fazer e quebra a normalização; o que acontece se você quiser que seu funcionário (ou seu funcionário quer, é claro) tenha 3 habilidades? Ou 10?.

Provavelmente seria melhor criar uma terceira tabela e fazer todas as suas junções por uma única chave primária e estrangeira; então você teria
employees ( employee_id, ..., pk employee_id);
employee_skills ( employee_id, skill_id, ..., pk employee_id, skill_id, fk skill_id );
skills ( skill_id, description, ..., pk skill_id );