Précédent   Forum du club des développeurs et IT Pro > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 09/01/2013, 22h01   #1
sam01
Membre confirmé
 
Inscription : mars 2004
Messages : 1 288
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 288
Points : 253
Points : 253
Par défaut retirer la notion d'unicité

Bonjour à tous,

j'ai créé la table suivante :

Code :
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 ?
sam01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2013, 04h57   #2
ericd69
Expert Confirmé
 
Avatar de ericd69
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 1 802
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
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 802
Points : 3 096
Points : 3 096
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...
ericd69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2013, 10h26   #3
CinePhil
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 13 659
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 49
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 : 13 659
Points : 25 563
Points : 25 563
Envoyer un message via MSN à CinePhil
Citation:
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 de Formation Agronomique. Autoentrepreneur.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2013, 16h25   #4
sam01
Membre confirmé
 
Inscription : mars 2004
Messages : 1 288
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 288
Points : 253
Points : 253
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 ?
sam01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2013, 16h43   #5
ericd69
Expert Confirmé
 
Avatar de ericd69
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 1 802
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
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 802
Points : 3 096
Points : 3 096
tu peux passer par une table refaite correctement,

utiliser un
Code sql :
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...
ericd69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2013, 13h47   #6
sam01
Membre confirmé
 
Inscription : mars 2004
Messages : 1 288
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 288
Points : 253
Points : 253
OK merci.
sam01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 07h34.


 
 
 
 
Partenaires

Hébergement Web