L'insertion d'une clé étrangère avec plusieurs valeurs
Je me demandais, est-il possible de créer une table où j'ai une table qui accepte une clé étrangère, mais peut avoir plusieurs valeurs pour une même ligne.
Par exemple:
Employee(id,name,skillid);
Skill(Skillid,skillname);
ici un exemple pour les Employés qui pourraient être
Employee(311,"john", (01,02) );
Skill (01,Java); Skill (02,C++);
J'ai mis en place la même prise de clé primaire de la table comme (est,skillid)
Mais dans un cas, j'ai une table :
create table Movie (Movie_ID varchar(5),
Cast varchar(5),
foreign key(Cast) references Person(Person_ID),
primary key(movie_id, Cast));
et une autre table :
create table Awards (Award_Id varchar(5),
Person_Id varchar(5),
Movie_Id varchar(5),
Award_Name varchar(30),
Year number(4),
Organization_Id varchar(5),
primary key (Award_id,year,Organization_Id),
foreign key(Person_Id) references Person(Person_ID),
-- foreign key(Movie_ID) references Movie(Movie_ID),
foreign key(Organization_Id) references Organization(Organization_Id));
Dans ce cas, je ne suis pas en mesure d'utiliser Movie_ID en tant que clé Étrangère depuis la table à laquelle il fait référence est la combinaison de 2 choses que sa clé primaire. Et je ne suis pas en utilisant la 2ème de ces attribut dans le Prix de la table.
Toute allusion à la façon dont cela peut être mis en œuvre ?
- Pourquoi est -
Cast
dans la clé primaire deMovie
?
Vous devez vous connecter pour publier un commentaire.
Malheureusement vous ai juste demandé à la vieille question;
La réponse est, bien sûr, que vous n'avez pas; vous avez deux colonnes. Pour étendre votre employé exemple votre employé tableau devient:
Comme vous pouvez le voir ce n'est pas une jolie chose à faire et les sauts de normalisation; ce qui se passe si vous souhaitez que vos employé ( ou un employé veut bien sûr ) pour avoir 3 compétences? Ou 10?.
Il serait probablement préférable de créer une troisième table et de faire tous vos jointures en un seul primaire et de clé étrangère; vous aurez donc
Si vous voulez créer une image composite de la clé primaire de la table parent, vous avez besoin pour créer un composite de clé étrangère dans la table enfant. En d'autres mots, si vous voulez la table parent à l'utilisation d'un naturel clé primaire composée de trois colonnes différentes
puis la table enfant aura besoin d'avoir tous les trois colonnes ainsi
L'utilisation de plusieurs colonnes de clé étrangère définitions généralement devient douloureuse que les schémas sont de plus en plus et vous avez besoin de joindre plusieurs tables qui est pourquoi les gens introduire synthétique des clés primaires (c'est à dire pas de sens clés qui sont remplies par une séquence). Qui vous permet de simplifier les choses
Si
(movie,cast)
est la clé primaire de la table parent toute table de référence doit inclure les deux colonnes de la clé étrangère. C'est juste les règles.Il y a deux façons de résoudre ce problème. Soit vous avez obtenu la clé primaire de mal, dans ce cas, vous devez modifier la contrainte sur les FILMS de la table. Sinon, vous devez ajouter le CASTING de la colonne à la remise des PRIX de la table.
Clés composites sont une douleur dans le cou quand il s'agit de clés étrangères. C'est pourquoi de nombreux praticiens préfèrent avoir une de substitution (ou de synthèse) clé primaire, de sorte que l'enfant tables n'avez qu'à une seule colonne. L'original - composite - clé est toujours en vigueur, mais comme une clé unique.