sql >> Base de Datos >  >> RDS >> Oracle

Insertar una clave foránea con múltiples valores

Desafortunadamente acabas de hacer la vieja pregunta;

La respuesta es, por supuesto, que no; tienes dos columnas Para extender su ejemplo de empleado, su tabla de empleados se convertiría en:

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 puede ver, esto no es algo particularmente bonito de hacer y rompe la normalización; ¿Qué sucede si desea que su empleado (o su empleado quiera, por supuesto) tenga 3 habilidades? ¿O 10?.

Probablemente sería mejor crear una tercera tabla y hacer todas sus uniones por una sola clave primaria y externa; entonces tendrías

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 );