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

 MySQL Discussion :

Aide pour modélisation sur MySQL


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de alejandro
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2004
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2004
    Messages : 167
    Par défaut Aide pour modélisation sur MySQL
    Bonjour à tous,
    Je souhaiterais votre avis sur les améliorations, erreurs, taille des champs texte et autres problèmes de conception de ma base de données mysql. Si vous pouviez m'aider à optimiser le tout ce serait vraiment sympa. Je me suis basé sur un modèle que vous pouvez voir à cette adresse http://www.databaseanswers.org/data_...logs/index.htm. Voici le dump que je viens d'effectuer sur ma table.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    -- phpMyAdmin SQL Dump
    -- version 2.9.1.1
    -- http://www.phpmyadmin.net
    -- 
    -- Serveur: localhost
    -- Généré le : Mercredi 30 Juillet 2008 à 19:19
    -- Version du serveur: 5.0.27
    -- Version de PHP: 5.2.0
    -- 
    -- Base de données: `cmsproject`
    -- 
     
    -- --------------------------------------------------------
     
    -- 
    -- Structure de la table `attribute_definitions`
    -- 
     
    CREATE TABLE `attribute_definitions` (
      `attribute_id` int(10) unsigned NOT NULL auto_increment,
      `attribute_name` varchar(255) collate latin1_general_ci NOT NULL,
      `attribute_data_type` varchar(255) collate latin1_general_ci NOT NULL,
      `attribute_description` varchar(255) collate latin1_general_ci NOT NULL,
      PRIMARY KEY  (`attribute_id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
     
    -- --------------------------------------------------------
     
    -- 
    -- Structure de la table `catalog_contents`
    -- 
     
    CREATE TABLE `catalog_contents` (
      `catalog_entry_id` int(10) unsigned NOT NULL auto_increment,
      `catalog_level_number` int(10) NOT NULL,
      `parent_entry_id` int(10) NOT NULL,
      `previous_entry_id` int(10) NOT NULL,
      `next_entry_id` int(10) NOT NULL,
      `manufacturer` varchar(255) collate latin1_general_ci NOT NULL,
      `product_reference_number` varchar(255) collate latin1_general_ci NOT NULL,
      `product_description` varchar(255) collate latin1_general_ci NOT NULL,
      `photo_filename` varchar(255) collate latin1_general_ci NOT NULL,
      `catalog_entry_name` varchar(255) collate latin1_general_ci NOT NULL,
      `price_in_dollars` float(10,2) NOT NULL,
      `price_in_euros` float(10,2) NOT NULL,
      `price_in_pounds` float(10,2) NOT NULL,
      `capacity` float(10,3) NOT NULL,
      `length` float(10,3) NOT NULL,
      `height` float(10,3) NOT NULL,
      `width` float(10,3) NOT NULL,
      `other_details` varchar(255) collate latin1_general_ci NOT NULL,
      PRIMARY KEY  (`catalog_entry_id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
     
    -- --------------------------------------------------------
     
    -- 
    -- Structure de la table `catalog_contents_additional_attributes`
    -- 
     
    CREATE TABLE `catalog_contents_additional_attributes` (
      `catalog_entry_id` int(10) NOT NULL,
      `catalog_level_number` int(10) NOT NULL,
      `attribute_id` int(10) NOT NULL,
      `attribute_value` varchar(255) collate latin1_general_ci NOT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
     
    -- --------------------------------------------------------
     
    -- 
    -- Structure de la table `catalog_entry_definitions`
    -- 
     
    CREATE TABLE `catalog_entry_definitions` (
      `catalog_level_number` int(11) NOT NULL,
      `attribute_id` int(11) NOT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
     
    -- --------------------------------------------------------
     
    -- 
    -- Structure de la table `catalog_structure`
    -- 
     
    CREATE TABLE `catalog_structure` (
      `catalog_level_number` int(10) unsigned NOT NULL auto_increment,
      `catalog_id` int(10) unsigned NOT NULL,
      `catalog_level_name` varchar(255) collate latin1_general_ci NOT NULL,
      `catalog_level_description` varchar(255) collate latin1_general_ci NOT NULL,
      PRIMARY KEY  (`catalog_level_number`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
     
    -- --------------------------------------------------------
     
    -- 
    -- Structure de la table `catalogs`
    -- 
     
    CREATE TABLE `catalogs` (
      `catalog_id` int(10) unsigned NOT NULL auto_increment,
      `catalog_name` varchar(255) collate latin1_general_ci NOT NULL,
      `catalog_publisher` varchar(255) collate latin1_general_ci NOT NULL,
      `catalog_description` varchar(255) collate latin1_general_ci NOT NULL,
      `date_of_publication` timestamp NOT NULL default '0000-00-00 00:00:00',
      `date_of_latest_revision` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
      PRIMARY KEY  (`catalog_id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
    Pensez-vous que je doive réellement passer en InnoDB pour utiliser les Foreign Keys car je n'ai pas l'impression que ce soit indispensable. Quel que soit votre avis il est le bienvenu car je souhaiterais partir sur de bonnes bases pour le développement de mon projet sous PHP.

    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 932
    Par défaut
    Si tu restes en MyIsam, la gestion des FK (intégrité référentielle) sera à ta charge...
    ... et donc, pourquoi vouloir gérer ça toi même quand InnoDB peut le faire, et de manière optimisée en plus ?

    Pour ton modèle, sans cahier des charges, on aura du mal à en faire une critique.

  3. #3
    Membre confirmé Avatar de alejandro
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2004
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2004
    Messages : 167
    Par défaut
    Merci pour votre réponse.
    En fait le modèle que je voudrais reproduire est celui indiqué sur le lien au dessus du code. Je ne sais pas comment gérer ce que l'auteur appelle les FK (Foreign Keys) et les PF (Primary Foreign) via phpMyAdmin. Ensuite le genre de conseils que je voudrais seraient sur la taille de mes champs etc. Depuis tout à l'heure j'ai switché mes tables en InnoDB mais je ne sais pas du tout l'utiliser et je cherche depuis tout à l'heure comment mettre en place les relations indiquées par l'auteur.
    Merci pour votre réponse néammoins ^^

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 288
    Par défaut
    Citation Envoyé par alejandro Voir le message
    Je ne sais pas comment gérer ce que l'auteur appelle les FK (Foreign Keys) et les PF (Primary Foreign) via phpMyAdmin. [...] Depuis tout à l'heure j'ai switché mes tables en InnoDB mais je ne sais pas du tout l'utiliser et je cherche depuis tout à l'heure comment mettre en place les relations indiquées par l'auteur.
    Une relation lie généralement une clé étrangère (FK) d'une table à la clé primaire (PK) d'une autre table (ou bien de la même table dans le cas des relations dites réflexives, aussi appelées "autojointures", comme par exemple sur ton schéma la relation de catalog_contents.parent_entry_id vers catalog_contents.catalog_entry_id).

    Les clés primaires se mettent en place facilement sous phpMyAdmin, avec le bouton à droite de la définition de chaque colonne.

    phpMyAdmin ne gère pas les clés étrangères graphiquement. Il faut aller dans la fenêtre SQL et passer le code suivant (exemple pour la FK catalog_id sur la table catalog_structure) :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    alter table catalog_structure 
    add foreign key (catalog_id) references catalogs (catalog_id)

    Dit autrement, on modifie la table catalog_structure pour y ajouter une FK sur catalog_id ; cette FK référence la colonne catalog_id de la table catalogs.
    Citation Envoyé par alejandro Voir le message
    Ensuite le genre de conseils que je voudrais seraient sur la taille de mes champs etc.
    Au passage, dans une base de données, on parle plutôt de colonnes que de champs.
    Pour la taille, la consigne est en gros "il faut que ça soit assez grand pour stocker tes données, et si tu gâches de la place en mettant des tailles un peu trop grandes c'est pas très grave".

  5. #5
    Membre confirmé Avatar de alejandro
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2004
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2004
    Messages : 167
    Par défaut
    Merci beaucoup de l'intérêt que vous avez portés à mon sujet.
    Une dernière question que je me pose concerne la PF (Primary Foreign), est-il possible de mettre ces clés en place dans une table InnoDB et quelle est la différence avec une simple FK ? Est-ce une FK qui est primaire tout simplement ? Et dans cette éventualité, est-il possible de définir plusieurs clés primaires dans une même table comme dans la table Catalog_Entry_Definitions ? Merci d'avance pour votre aide.

  6. #6
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 288
    Par défaut
    Citation Envoyé par alejandro Voir le message
    Merci beaucoup de l'intérêt que vous avez portés à mon sujet.
    Une dernière question que je me pose concerne la PF (Primary Foreign), est-il possible de mettre ces clés en place dans une table InnoDB et quelle est la différence avec une simple FK ? Est-ce une FK qui est primaire tout simplement ?
    disons plus précisément que ce sont des colonnes qui à la fois font partie d'une PK et portent des FK.

    Citation Envoyé par alejandro Voir le message
    Et dans cette éventualité, est-il possible de définir plusieurs clés primaires dans une même table comme dans la table Catalog_Entry_Definitions ? Merci d'avance pour votre aide.
    Pas plusieurs clés primaires, mais une clé primaire composée de plusieurs colonnes.

  7. #7
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par Antoun Voir le message
    phpMyAdmin ne gère pas les clés étrangères graphiquement.


    Affiche une table InnoDB.
    Juste sous la liste des colonnes, il y a le lien 'Gestion des relations'. Il suffit de cliquer dessus.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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 !

  8. #8
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 288
    Par défaut
    Citation Envoyé par CinePhil Voir le message


    Affiche une table InnoDB.
    Juste sous la liste des colonnes, il y a le lien 'Gestion des relations'. Il suffit de cliquer dessus.
    Bah je ne vois pas... mais j'ai seulement la version de Free, càd la 2.11.3... il y a peut-être plus récent ?

    Merci de l'info en tout cas !

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

Discussions similaires

  1. Besoin d'aide pour requête sur grosse table
    Par Fabouney dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/01/2006, 09h01
  2. Besoin d'aide pour modéliser
    Par matt38 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/12/2005, 13h58
  3. Besoin d'aide pour passage de mysql a sql server
    Par mobscene dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 07/12/2005, 07h55
  4. aide pour requete sur 2 tables avec clé étranere
    Par richton95 dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/12/2005, 13h32
  5. aide pour OpenSchema en mysql?
    Par wrida dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 10/07/2005, 03h07

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