2010-10-29 4 views
0

A quoi devrait ressembler ma table mysql quand j'autorise un utilisateur à y entrer dans plusieurs catégories. Devrait-il ressembler à la table mysql ci-dessous dans l'exemple 1 ou dans l'exemple 2 ou quelque chose de différent?Question sur la structure de la table MySQL

Exemple 1

CREATE TABLE ac (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
    categoryID INT UNSIGNED NOT NULL, 
    articleID INT UNSIGNED NOT NULL, 
    dateCREAT DATETIME NOT NULL, 
    PRIMARY KEY (id) 
); 

EXEMPLE 2

CREATE TABLE ac (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
    categoryID INT UNSIGNED NOT NULL, 
    articleID INT UNSIGNED NOT NULL, 
    dateCREAT DATETIME NOT NULL, 
    PRIMARY KEY (id) 
    UNIQUE KEY (categoryID, articleID) 
); 

Répondre

0

En supposant que la table ac est votre junction table, vous ne avez probablement pas besoin de l'surrogate keyid là-dedans.

Vous pouvez ensuite utiliser une clé primaire composite pour appliquer la contrainte où le même article ne peut pas être affiché deux fois à la même catégorie, au lieu d'utiliser une contrainte unique:

CREATE TABLE ac (
    categoryID INT UNSIGNED NOT NULL, 
    articleID INT UNSIGNED NOT NULL, 
    dateCREAT DATETIME NOT NULL, 
    PRIMARY KEY (categoryID, articleID) 
); 

Si votre application nécessite la clé de substitution id, alors votre deuxième exemple serait le chemin à parcourir. La contrainte unique ne permettrait pas de publier le même article dans la même catégorie, mais permettrait à tout article particulier d'être publié dans plus d'une catégorie.

+0

et si je veux garder le 'id'? – HELP

+0

Mis à jour ma réponse avec mes pensées à ce sujet. –

0

Je ne suis pas certain de comprendre la configuration de votre table à partir de la description.

Si vous disposez d'une table d'articles et d'une table de catégories et que vous souhaitez mapper un article à plusieurs catégories, vous disposerez normalement d'une table intermédiaire avec juste l'ID article et l'ID catégorie.

par exemple. STH comme

CREATE TABLE postCategoryMappingc (
    categoryID INT UNSIGNED NOT NULL, 
    articleID INT UNSIGNED NOT NULL, 
    PRIMARY KEY (categoryID,articleID) 
); 

Je ne sais pas ce que vous avez besoin du champ pour dateCREAT mais je pourrais aller là-bas et si cela est absolument nécessaire.