Je suis un peu confus lorsque je devrais utiliser une clé primaire ou étrangère. J'ai deux tables, et dans les deux, certaines colonnes font référence à des colonnes qui sont des clés primaires dans d'autres tables. Ici, ils sont:Oracle Clés étrangères ou primaires
CREATE TABLE roles (
movie_id NUMBER(10,0) NOT NULL REFERENCES movies(movie_id),
actor_id NUMBER(10,0) NOT NULL REFERENCES actors(actor_id),
movie_description VARCHAR2(50),
salary NUMBER(10),
CONSTRAINT pk_roles PRIMARY KEY (movie_id, actor_id)
);
CREATE TABLE profits (
movie_id NUMBER(10,0) NOT NULL,
gross_profit NUMBER(9) NOT NULL,
net_profit NUMBER(9) NOT NULL,
CONSTRAINT fk_profits FOREIGN KEY (movie_id) REFERENCES movies(movie_id) ON DELETE CASCADE
);
Dans le premier tableau, j'ai fait une clé primaire composite à partir teh deux colonnes qui font référence à des colonnes dans les autres tableaux. Ces colonnes sont des clés primaires dans leurs tables respectives.
Dans la deuxième table, j'ai fait à nouveau une clé étrangère référençant une clé primaire dans une autre table. Mais quelle est la meilleure pratique? Est-ce que la clé de la première table doit aussi être une clé étrangère puisqu'elle fait référence à des clés primaires dans d'autres tables?
Les contraintes de clé étrangère s'ajoutent donc aux contraintes de clé primaire et restreignent les valeurs à celles trouvées dans les colonnes étrangères? Est-ce que cela rend les instructions "... REFERENCES ..." dans des "rôles" alors, puisque je ne crée pas de clé étrangère là-bas? – Amoeba
Vous créez deux contraintes de clé étrangère dans les "rôles". Dans 'movie_id ... REFERENCES movies (movie_id)', vous avez besoin que le film existe avant de stocker des informations sur les rôles joués par les acteurs dans ce film. Dans 'actor_id ... REFERENCES actors (actor_id)', vous avez besoin que l'acteur existe avant de stocker des informations sur les films dans lesquels l'acteur a joué. Ces deux contraintes de clé étrangère sont parfaitement sensées. –
Quelle serait la différence entre comment j'ai la table des profits ci-dessus et faire 'movie_id NUMBER (10,0) NOT NULL REFERENCES films (movie_id)' et une contrainte comme 'CONSTRAINT pk_profits PRIMARY KEY (movie_id)'? – Amoeba