2009-12-03 5 views

Répondre

9

Cela dépend.

  • Voyez-vous vos données plus comme un ensemble d'objets (et base de données relationnelle est juste un support de stockage) ou comme un ensemble de faits représentés et analysés en mode natif par l'algèbre relationnelle.

  • Certains ORM/Frameworks/Tools ne prennent pas correctement en charge les clés primaires multicolonnes. Si vous utilisez l'un d'eux, vous aurez besoin d'une colonne id supplémentaire.

  • S'il s'agit simplement d'une relation plusieurs-à-plusieurs sans données supplémentaires, il est préférable d'éviter une colonne d'identifiant supplémentaire et d'avoir les deux colonnes comme clé primaire.

  • Si vous souhaitez ajouter des informations supplémentaires à cette association, alors il deviendra quelque chose de plus qu'une relation plusieurs-à-plusieurs de deux entités. Donc, il devient entité dans son propre et il serait plus pratique s'il avait son propre ID indépendant des entités qu'il se connecte.

+0

+1 Couvre toutes les bases. – APC

1

Je créerais la clé primaire category_id et product_id. Ajoutez un incrément automatique seulement si la commande sera reliée à des utilisations ultérieures.

2

Non, ce n'est pas du tout nécessaire, étant donné que ces deux colonnes exécutent déjà la fonction d'une clé primaire.

Cette troisième colonne ajouterait simplement plus d'espace à votre table.

Mais ... Vous pourriez l'utiliser peut-être pour voir l'ordre dans lequel vos enregistrements ont été ajoutés à votre table. C'est la seule fonction que je peux voir dans cette colonne.

2

Vous n'avez pas besoin d'ajouter une colonne d'index auto-incrémentée. La pratique standard consiste à utiliser uniquement les deux colonnes existantes comme clé primaire pour les tables d'association M: M telles que décrites.

5

Vous n'avez pas besoin pour ajouter une colonne d'index auto-incrémentation supplémentaire, mais je (peut-être contrairement à la plupart des autres) vous recommandons encore de le faire. Tout d'abord, il est plus facile dans le programme d'application de se référer à une ligne en utilisant un seul nombre, par exemple lorsque vous supprimez une ligne. Deuxièmement, il s'avère parfois utile de connaître l'ordre dans lequel les lignes ont été ajoutées.

+0

N'utilisez pas la fonction de numérotation automatique pour imposer un ordre chronologique naturel sur les lignes.Les implémenteurs de autonumber sont libres d'implémenter un algorithme qui casse cette corrélation. –

0

Il y a une question conceptuelle - est products_categories une entité ou est tout simplement une table qui représente une relation entre deux entités? Si c'est une entité alors, même s'il n'y a pas d'attributs supplémentaires, je préconiserais une colonne ID distincte pour l'entité. S'il s'agit d'une relation, s'il existe des attributs supplémentaires (par exemple, begin_date, end_date ou quelque chose comme ça), je recommanderais d'avoir une clé primaire multi-colonnes.

Questions connexes