4 votes

Comment créer une clé composite ?

Je suis nouveau sur MySQL WB, je peux donc créer une clé étrangère en ajoutant une relation entre les tables dépendantes.

Mais comment créer une clé composite ? Par exemple, j'ai cette table sql

CREATE TABLE TASKS
(
 TEST_ID NUMBER(6) CONSTRAINT FK_TASKS_TESTS REFERENCES TESTS(TEST_ID),
 TASK_ID NUMBER(3),
 MAX_POINTS NUMBER,
 CONSTRAINT PK_TASKS PRIMARY KEY (TEST_ID, TASK_ID)
);

Existe-t-il une option pour cela ou faut-il la créer autrement ?

4voto

davidethell Points 9385

La question se résume à l'unicité. Si vous savez que TASK_ID sera unique, il est préférable d'avoir une seule colonne comme clé primaire. MySQL permet une clé primaire multi-colonnes, mais si TASK_ID sera unique, il suffit de faire de cette clé primaire et d'ajouter un autre index sur TEST_ID. La syntaxe pour la clé primaire serait :

CREATE TABLE TASKS
(
TEST_ID NUMBER(6),
TASK_ID NUMBER(3),
MAX_POINTS NUMBER,
PRIMARY_KEY(TASK_ID) -- OR PRIMARY_KEY(TASK_ID, TEST_ID) for the composite key
);

Voir cette discussion pour plus d'informations.

3voto

Saad Touhbi Points 345

Tout d'abord, la contrainte de clé étrangère, je ne pense pas qu'elle devrait être placée là. Pour autant que je sache, toutes les contraintes sont déclarées après la déclaration des variables (c'est l'une des normes du sql en général). pour la clé composite, vous l'avez presque, vous avez juste une chose de mal et c'est l'écriture de la contrainte. voici l'exemple de travail

CREATE TABLE IF NOT EXISTS TASK (
  TEST_ID NUMBER(6) ,
  TASK_ID NUMBER(3) ,
  MAX_POINTS NUMBER ,
  PRIMARY KEY (TEST_ID,TASK_ID),

  CONSTRAINT fk_1 FOREIGN KEY (`TEST_ID`) REFERENCES TEST (TEST_ID)
)

0voto

Usman Yaqoob Points 149

Supposons que vous ayez déjà créé une table, vous pouvez maintenant utiliser cette requête pour créer une clé primaire composite.

modifier la table employee ajouter une clé primaire(emp_id,emp_name) ;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X