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

Décisions SGBD Discussion :

Conception de tables sql avec les même colonnes


Sujet :

Décisions SGBD

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2006
    Messages : 192
    Points : 68
    Points
    68
    Par défaut Conception de tables sql avec les même colonnes
    Bonjour,

    J'ai 5 tables qui ont la même structure soit : id, nom, description. Donc j'aimerais savoir c'est quoi la meilleure conception ou façon de faire pour éviter d'avoir 5 tables qui auront les mêmes colonnes :

    1 - Je crée une table catégorie qui va inclure mes 3 colonnes communes et une autre colonne "enum" qui va différencier mes catégory : ex (Ville, Pays, Continent, etc)
    2 - Créer une table catégorie qui va inclure mes 3 colonnes communes et créer les autres 5 tables qui vont juste inclure un id.

    Note que j'aurais une table d'assocation qui doit avoir les id des villes, pays, continents, etc pour les afficher ensuite dans un rapport

    Merci de votre conseil.

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 338
    Points : 39 737
    Points
    39 737
    Billets dans le blog
    9
    Par défaut
    Regardez plutôt le partitionnement, une seule table, plusieurs partitions en fonction d'un critère que vous définissez et qui peut être modifié dans le temps si besoin

    Si en plus votre table contient des volumes importants ou très importants (milliards de lignes et au delà) c'est LA solution

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 898
    Points : 53 136
    Points
    53 136
    Billets dans le blog
    6
    Par défaut
    En matière de modèle de données, l'héritage est la bonne solution. Le partitionnement n'est pas une solution de modélisation, mais une solution de stockage et donc du ressort du DBA, pas du concepteur (structure logique) de la base. Le partitionnement pourra avoir lieu en toute indépendance des structures logiques, par rapport à la volumétrie des données et cela ultérieurement, au bon moment, quand cela apparaîtra nécessaire....

    Sur l'héritage, lisez les papiers que j'ai écrit : http://sqlpro.developpez.com/cours/m...tion/heritage/


    A +

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 338
    Points : 39 737
    Points
    39 737
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    En matière de modèle de données, l'héritage est la bonne solution. Le partitionnement n'est pas une solution de modélisation, mais une solution de stockage et donc du ressort du DBA, pas du concepteur
    Je suis tout à fait d'accord, mais

    Citation Envoyé par persia Voir le message
    J'ai 5 tables qui ont la même structure soit : id, nom, description. Donc j'aimerais savoir c'est quoi la meilleure conception ou façon de faire pour éviter d'avoir 5 tables qui auront les mêmes colonnes
    On est déjà au niveau tables, donc plus au niveau conceptuel, et quand bien même, vu que les 5 tables sont 100% identiques, on est typiquement dans le cas d'utilisation d'une table partitionnée, et non au niveau héritage qui lui s'applique quand une partie seulement des colonnes est commune.
    La seule chose à savoir c'est : y a-t- il une clef candidate pour le critère de partitionnement, ça ne semble pas évident avec seulement id, nom, description

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 898
    Points : 53 136
    Points
    53 136
    Billets dans le blog
    6
    Par défaut
    Le partitionnement suppose de connaitre le SGBDR cible. Cela n'est pas la demande ! La demande porte sur articulation des tables et c'est bien d'un modèle dont on parle. Certaines personnes modélisent directement au niveau physique ce qui est une mauvaise pratique, mais cela est nullement interdit !

    Il existe des SGBDR qui ne supportent pas le partitionnement (Access, SQL lite... entre autres), il y en a qui disent le faire, mais c'est de la merde (MySQL, PostgReSQL) et il y en a d'autres qui le font royalement (DB2, Oracle, SQL Server)....

    A +

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 338
    Points : 39 737
    Points
    39 737
    Billets dans le blog
    9
    Par défaut
    Si l'on est encore au niveau modélisation, alors il est assez probable que les différents contenus (villes, pays, continents, etc..) possèdent à terme des attributs différents
    auquel cas vous pouvez modéliser soit une entité type par type de contenu, soit une entité type pour ce qui est commun et un sous type pour ce qui est spécifique à chaque contenu

    Si l'on est déjà au niveau physique et que les 5 utilisations utilisent et utiliseront à terme les mêmes colonnes, alors je maintiens, sous réserve effectivement que votre SGBD le gère, que le partitionnement vous simplifiera la vie à tout point de vue. Utilisez la colonne enum comme critère de partitionnement.

    Quel est votre SGBD ? est il déjà installé ? votre table (ou vos 5 tables) est elle une évolution d'une application existante ?

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/04/2014, 16h09
  2. Réponses: 5
    Dernier message: 04/04/2010, 00h14
  3. cryptage de colonne d'une table SQL avec jasypt
    Par djolof dans le forum Sécurité
    Réponses: 0
    Dernier message: 19/06/2009, 15h13
  4. Réponses: 6
    Dernier message: 17/01/2009, 16h48
  5. Génération de script SQL avec les données
    Par borgfabr dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 05/03/2004, 13h57

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