IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

retirer la notion d'unicité


Sujet :

Requêtes MySQL

  1. #1
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    1 907
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 907
    Points : 411
    Points
    411
    Par défaut retirer la notion d'unicité
    Bonjour à tous,

    j'ai créé la table suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
     
    CREATE TABLE IF NOT EXISTS `flatforswap_choix_destination_new` (
      `id_adh` int(10) unsigned NOT NULL DEFAULT '0',
      `id_des_new` int(10) unsigned NOT NULL DEFAULT '0',
      `cpv` int(10) unsigned NOT NULL DEFAULT '0',
      `date_deb` date NOT NULL DEFAULT '0000-00-00',
      `date_fin` date NOT NULL DEFAULT '0000-00-00',
      `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      PRIMARY KEY (id_adh,id_des_new,cpv)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 PACK_KEYS=0 COMMENT='Table de Jointure Adherent-Destination type n-m' AUTO_INCREMENT=1 ;
    Maintenant elle contient des données.

    Mais je suis aperçu que, applicativement, les 3 colonnes :
    id_adh
    id_des_new
    cpv

    peuvent être en double car les dates peuvent être différentes pour une même destination.

    Comment puis-je faire pour altérer la table et permettre d'avoir ces lignes en double ?

  2. #2
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    salut,

    ne pas mettre les 3 colonnes en question dans la clé primaire

    parfois la jolie sémantique ne colle pas toujours au besoin pratique

    ne voyant pas tout ton modèle relationnel, c'est dur de répondre mais tu peux par exemple juste indexer les clés étrangères vu que tu es en myisam et ajouter un colonne auto_incrémentée servant de clé primaire...

    au passage les valeurs par défaut de colonnes numériques sont des nombres pas chaines qui seront castées en nombre...
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Mais je suis aperçu que, applicativement, les 3 colonnes :
    id_adh
    id_des_new
    cpv

    peuvent être en double car les dates peuvent être différentes pour une même destination.
    Ce qui veut dire qu'en réalité, ton MCD était faux ! Il manquait apparemment l'entité type fictive "Date" dans l'association.

    Tu peux donc considérer que "choix_destination" est une entité type qui entraîne une table munie d'une clé primaire auto-incrémentée ou bien considérer qu'il y a une association "adhérent choisir destination à telle date" et conserver ta table associative mais en ajoutant la date de départ à la clé primaire.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    1 907
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 907
    Points : 411
    Points
    411
    Par défaut
    Citation Envoyé par ericd69 Voir le message
    salut,



    au passage les valeurs par défaut de colonnes numériques sont des nombres pas chaines qui seront castées en nombre...
    salut,

    je n'ai pas compris cette phrase... Il y a un problème dans mes valeurs pas défaut, c'est ça ?

    Ou sinon, je pense que je vais choisir l'auto-incrémentation.

    Est-il possible de faire un alter de la table en ajoutant une colonne incrémentée ?

  5. #5
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    tu peux passer par une table refaite correctement,

    utiliser un
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    insert ... into ... select ...
    pour la remplir à partir de l'autre
    tu dropes ensuite l'ancienne table et tu renommes la nouvelle c'est plus simple et propre que de tenter de multiples alter et surtout tu n'as pas de mauvaises surprises quand tu touches à des valeurs indexée et tu peux faire ta transition au dernier moment sans forcément arrêter longtemps ton application

    ça veut dire et pas ce que tu mets derrière
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  6. #6
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    1 907
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 907
    Points : 411
    Points
    411
    Par défaut
    OK merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Notion de boucles dans Business Object
    Par lionelEIGIP dans le forum Deski
    Réponses: 1
    Dernier message: 08/04/2004, 11h26
  2. Notion sur Socket UDP
    Par oxor3 dans le forum Développement
    Réponses: 3
    Dernier message: 05/04/2004, 00h19
  3. [LG]Retirer les blancs dans une chaine
    Par Andy_24DB dans le forum Langage
    Réponses: 16
    Dernier message: 25/02/2004, 16h30
  4. [langage] Retirer le premier caractère d'une chaine ?
    Par kwisach dans le forum Langage
    Réponses: 5
    Dernier message: 24/04/2003, 11h05
  5. Notion d'algorithme
    Par gtr dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 10/12/2002, 11h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo