Envoyé par
Gluups
ça voudrait dire que jamais plus, personne n'aura besoin de sauvegarder une table avant de modifier sa structure ?
Je me permets une remarque, même si la discussion est fermée : c'est juste que, dans le cas présent, cela ne servait à rien de sauvegarder la table pour la recharger après, puisque le problème était la clause NOT NULL concernant la colonne 'objets.categorieID' qui empêchait l'opération. L'opération de rechargement de la table objets après avoir ajouter la colonne objets.categorieID, aurait de toutes les manières échoué !
Un petit retour sur la conception de cette évolution :
Hypothèse N°1 : vous connaissez la catégorie de chacun des objets et vous souhaitez qu'à terme objets.categorieID ait l'attribut NOT NULL
Après avoir fait l'upload de la nouvelle table 'categorie' (au passage je vous conseille de mettre les noms de table soit tous au pluriel soit tous au singulier), vous ajoutez la colonne objets.categorieID (DEFAULT NULL), puis un magnifique UPDATE ensembliste permettra de mettre à jour cette colonne. Vous pourrez alors passer l'attribut de la colonne en 'NOT NULL'.
Hypothèse N°2 : vous ne connaissez pas la categorie de chacun des objets et objets.categorieID ne pourra manifestement pas avoir l'attribut NOT NULL
Dans ce cas, le bon réflexe est de ne pas créer de nouvelle colonne dans 'objets' mais de créer une troisième table 'objets_categories' comprenant 2 colonnes respectivement foreign key de 'categories' et 'objets' et dont la clé primaire est constituée par ces 2 colonnes.
Si dans un souci de simplicité apparente vous vous contentez d'ajouter une colonne objets.categorieID dans objets avec l'attribut 'DEFAULT NULL', vous devrez vous encombrer pour toujours de la gestion du NULL concernant cette colonne (oui, rappelons-nous que NULL n'est pas une valeur avec toutes les conséquences qui s'en suivent sur l'approche ensembliste...)
Partager