Précédent   Forum des professionnels en informatique > Bases de données > MySQL
MySQL Forum d'entraide MySQL. Avant de poster -> FAQ MySQL, Tutoriels MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/11/2010, 20h59   #1
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 62
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 62
Points : 25
Points : 25
Par défaut Division de table en plusieurs

Bonjour,

Ma question pourrait être posée pour n'importe quel SGBDR, mais puisque je travaille sur MySQL, alors je poste dans ce forum.

En effet, j'ai une table que je souhaite diviser en plusieures tables avec des relations entre elles pour les enregistrements qui se répètent. Y a-t-il une manière de faire faire cela par MySQL via des requêtes sans mettre la main dans les correspondances entre les IDs surtout qu'il s'agit de centaines d'enregistrements?

Merci d'avance.
badman_nx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2010, 21h29   #2
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
La derniere fois que j'ai du faire ça j'ai créer les nouvelles tables
CREATE TABLE...

ensuite tu crées des PK et tes FK et les autres contraintes

ensuite c'est essentiellement des INSERT INTO table2 ... SELECT primaryKeyOfTable1 ... FROM table1 ....
pour copier les données dans la table controlée par la clés étrangère.

mais avant de savoir faire celà, il faut savoir faire une sauvegarde et une restauration parce qu'il arrive qu'on se perde pendant l'opération et il est bon de pouvoir recommencer (on crée des doublons, on perd de l'info ... )!

L'idéal c'est de proposer des vues qui feront imposteur avec le nom des tables que tu as démantelées et qui permettront d'adoucir la transition (puisque les données seront toujours accessible sous le même nom en lecture, attention pas en écriture).
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2010, 09h45   #3
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 62
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 62
Points : 25
Points : 25
Ce serait un peu hasardeux de procéder de la sorte. Merci tout de même
badman_nx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2010, 10h17   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 943
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 943
Points : 18 137
Points : 18 137
Envoyer un message via MSN à CinePhil
Cette partie de l'énoncé de ton besoin m'inquiète !
Citation:
Envoyé par badman_nx Voir le message
pour les enregistrements qui se répètent.
Par principe, on n'enregistre qu'une seule fois une information dans une base de données ; principe de non-redondance de l'information.

Tu peux expliquer plus en détail ce que tu cherches à faire, avec Structure de la table existante petit exemple de données et résultat souhaité ?

Sinon le principe donné par gene69 est le bon.

Deux solutions :
1) La création et l'insertion directe si les données ne doivent pas changer de type, de structure...
Code :
1
2
3
4
CREATE TABLE nouvelle_table (nom_éventuel_des_nouvelles_colonnes)
SELECT des_colonnes
FROM la_table_existante
WHERE condition
2) Création d'une table structurée puis insertion des données
Code :
1
2
3
4
5
6
7
8
9
10
CREATE TABLE nouvelle_table (
nouvelle_colonne_1 type1
nouvelle_colonne_2 type2
...
) ;
 
INSERT INTO nouvelle_table (les_colonnes_à_alimenter)
SELECT colonnes
FROM la_table_existante
WHERE condition
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2010, 11h04   #5
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 62
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 62
Points : 25
Points : 25
Citation:
Envoyé par CinePhil Voir le message
Par principe, on n'enregistre qu'une seule fois une information dans une base de données ; principe de non-redondance de l'information.
Peut-être je me suis mal exprimé, la redondance n'est pas au niveau de tous les champs relatifs à une clé donnée, mais uniquement pour certaines colonnes, d'où la nécessité de séparer ces données dans des tables pour justement enlever cette redondance partielle.

Ma table d'origine était sous excel (liste de données), ce qui explique cette situtation.
badman_nx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2010, 12h55   #6
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 943
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 943
Points : 18 137
Points : 18 137
Envoyer un message via MSN à CinePhil
Tu ne nous as toujours pas expliqué plus concrètement de quoi il s'agit.
Nous ne pouvons donc pas t'aider davantage !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2010, 17h50   #7
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 62
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 62
Points : 25
Points : 25
Voilà, j'ai une table "table" que je souhaite diviser en 2 tables: "table1" et "table2"

table
id champ1 champ2 champ3 champ4
1 donnée11 donnée21 donnée31 donnée41
2 donnée12 donnée22 donnée32 donnée42
3 donnée13 donnée23 donnée33 donnée43
4 donnée14 donnée23 donnée33 donnée43
5 donnée15 donnée23 donnée33 donnée43
6 donnée16 donnée24 donnée34 donnée44
7 donnée17 donnée24 donnée34 donnée44



table1
id champ1 table2_id
1 donnée11 1
2 donnée12 2
3 donnée13 3
4 donnée14 3
5 donnée15 3
6 donnée16 4
7 donnée17 4



table2
id champ2 champ3 champ4
1 donnée21 donnée31 donnée41
2 donnée22 donnée32 donnée42
3 donnée23 donnée33 donnée43
4 donnée24 donnée34 donnée44


Je cherche un moyen d'automatiser l'association entre le champ table2_id de table1 et le champ id de table2, en virant les doublons de cette dernière table.
badman_nx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2010, 00h04   #8
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 943
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 943
Points : 18 137
Points : 18 137
Envoyer un message via MSN à CinePhil
Avec des données aussi abstraites, je ne vois toujours pas de quoi il s'agit et je ne peux pas t'aider à faire ça correctement.
Du concret !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h09.


 
 
 
 
Partenaires

Hébergement Web