J'ai deux tables, products
et categories
qui ont une relation plusieurs à plusieurs, donc j'ajoute une table products_categories
qui contiendra category_id
et product_id
. Dois-je ajouter une autre colonne d'indexation (auto-incrémentante) ou utiliser les deux existantes comme clé primaire?Dois-je utiliser une colonne d'index dans une table de plusieurs à plusieurs "lien"?
Répondre
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.
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.
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.
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.
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.
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. –
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.
- 1. Forcer un lien/une table de jointure à devenir une relation plusieurs à plusieurs dans EF4
- 2. Plusieurs valeurs dans une colonne
- 3. Joindre plusieurs colonnes dans une table à une seule colonne dans une autre table
- 4. Rejoindre une table plusieurs à plusieurs
- 5. Définir plusieurs clés étrangères dans une table à plusieurs tables
- 6. Convertir plusieurs enregistrements dans une colonne
- 7. Renvoyer plusieurs valeurs dans une colonne dans une requête principale
- 8. Rails (ActiveRecord) plusieurs à plusieurs table
- 9. rejoindre plusieurs champs à une table
- 10. Relations plusieurs-à-plusieurs nécessitant une table associée
- 11. SQLAlchemy relation plusieurs-à-plusieurs sur une seule table
- 12. Excel - Combiner plusieurs colonnes dans une colonne
- 13. SQL - Plusieurs lignes dans une seule colonne
- 14. Je souhaite rechercher et remplacer plusieurs valeurs dans une colonne de table dans une requête MYsql
- 15. plusieurs composants DataGrid dans une colonne
- 16. Plusieurs colonnes GROUP BY dans une colonne
- 17. MySQL plusieurs à plusieurs table matrice de table
- 18. Une table Join (table d'association) possède-t-elle une clé primaire? relation plusieurs à plusieurs
- 19. Comment partager une table un-à-plusieurs
- 20. Ligne SQL insérer dans une table + clés dans sa table de liaison dans une déclaration (relation plusieurs-à-plusieurs)
- 21. Requête SQL Server avec plusieurs valeurs dans une colonne relative à une autre colonne
- 22. Mettre à jour plusieurs valeurs de colonne de table en utilisant une requête unique dans SQL?
- 23. Plusieurs à plusieurs requêtes de table
- 24. Mappage NHibernate fluide: une table, plusieurs classes
- 25. Comment sélectionner une cellule avec plusieurs valeurs dans une colonne?
- 26. Django: plusieurs-à-plusieurs via une table avec une clé composée (uniquement)
- 27. Joindre deux tables - plusieurs colonnes à une seule colonne
- 28. Exemples de requêtes dans une relation plusieurs-à-plusieurs
- 29. SQL Server - Stockage de plusieurs valeurs décimales dans une colonne?
- 30. Meilleure façon d'implémenter une table de correspondance plusieurs-à-plusieurs avec des données entrées par l'utilisateur
+1 Couvre toutes les bases. – APC