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

 Oracle Discussion :

Ajout de colonnes dans une tables qui en a déjà + de 100


Sujet :

Oracle

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Ajout de colonnes dans une tables qui en a déjà + de 100
    bonjour à tous.

    après avoir "perdu" mon DBA, je me tourne vers les ressources du net et la communauté des développeurs pour mes petites questions Oracle...

    or donc, mon "problème" : j'ai une table de + de 100 colonnes et à laquelle je suis susceptible de rajouter 4 nouveaux champs.
    ma question, c'est "est-ce qu'il ya des bonnes pratiques, des histoires de stockage ou de perf, ... qui régissent plus ou moins le nombre de colonnes max dans une table?? et quelles peuvent être les alternatives (splitter la table?) ??"

    dans mon cas, voici le script de création de la table en question (c'est long, mais comme ça vous avez tous les champs avec leur type, au cas où le poids d'une ligne serait un paramètre important) :

    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
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    CREATE TABLE DOSSIER
    (
      N_DOSSIER               VARCHAR2(12 BYTE)     NOT NULL,
      N_LIG_PRD               NUMBER(4),
      N_ART                   NUMBER(7),
      N_ARTICLE_SAVIX         VARCHAR2(9 BYTE),
      C_MARQ                  VARCHAR2(4 BYTE),
      N_SEG                   NUMBER(4)             NOT NULL,
      C_REGR_NOMENCLATURE     VARCHAR2(4 BYTE),
      C_REGR_TECHNICIEN       VARCHAR2(4 BYTE),
      C_REGR_COMPTABLE        VARCHAR2(4 BYTE),
      L_DESI_APPAREIL         VARCHAR2(30 BYTE),
      L_MODELE_APP            VARCHAR2(15 BYTE),
      N_SERIE_APP             VARCHAR2(24 BYTE),
      N_SEG_ORIG              VARCHAR2(4 BYTE),
      L_SEG_ORIG              VARCHAR2(30 BYTE),
      N_SFAM_ORIG             NUMBER(4),
      L_SFAM_ORIG             VARCHAR2(30 BYTE),
      N_FAM_ORIG              NUMBER(4),
      L_FAM_ORIG              VARCHAR2(30 BYTE),
      C_CONDITION_DOSSIER     VARCHAR2(1 BYTE),
      C_ACCEPT_FORFAIT        VARCHAR2(1 BYTE),
      M_FORFAIT_ACCUEIL       NUMBER(16,2),
      C_ORIENTATION           VARCHAR2(1 BYTE)      NOT NULL,
      C_DENONCIATION_GAR      VARCHAR2(1 BYTE),
      C_TYPE_RESTITUTION      VARCHAR2(3 BYTE),
      C_ANNEE_GAR_CLT         VARCHAR2(5 BYTE)      NOT NULL,
      C_GARANTIE_DETAIL       VARCHAR2(3 BYTE),
      N_CLIENT_SAV            VARCHAR2(10 BYTE),
      C_GARANTIE_FRN          VARCHAR2(2 BYTE),
      C_FRN_SAV               VARCHAR2(10 BYTE),
      N_FRN                   NUMBER(5),
      C_CONTRAT_EXT           VARCHAR2(3 BYTE),
      N_CONTRAT_EXT           VARCHAR2(10 BYTE),
      L_CONTRAT_EXT           VARCHAR2(30 BYTE),
      C_TRAITEMENT            VARCHAR2(1 BYTE),
      N_DOSSIER_PREC          VARCHAR2(12 BYTE),
      C_GARANTIE_CLT_PREC     VARCHAR2(2 BYTE),
      N_ANNEE_ACHAT_PREC      NUMBER(2),
      D_ACHAT                 DATE,
      N_ANNEE_ACHAT           NUMBER(2),
      N_BORDEREAU_EXP_SST     VARCHAR2(7 BYTE),
      D_BORDEREAU_EXP_SST     DATE,
      C_ADM_CREA_BILAN        VARCHAR2(7 BYTE),
      C_TECH_ITI              VARCHAR2(7 BYTE),
      C_TECH_ATL              VARCHAR2(7 BYTE),
      N_MAG_DEPOT             NUMBER(4),
      N_MAG_ACHAT             NUMBER(4),
      N_MAG_RETRAIT           NUMBER(4),
      N_MAG_BILAN             NUMBER(4),
      N_MAG_CLOTURE           NUMBER(4),
      C_DEVIS_DEMANDE         VARCHAR2(1 BYTE),
      M_SEUIL_DEVIS           NUMBER(16,2),
      C_REP_CLIENT_DEVIS      VARCHAR2(1 BYTE),
      D_DATE_RDV              DATE,
      D_HEURE_RDV             NUMBER(4),
      D_NOUV_DATE_RDV         DATE,
      D_NOUV_HEURE_RDV        NUMBER(4),
      C_POSTAL_RDV            VARCHAR2(5 BYTE),
      L_COMMUNE_RDV           VARCHAR2(25 BYTE),
      C_SECTEUR_RDV           VARCHAR2(5 BYTE),
      L_SECTEUR_RDV           VARCHAR2(30 BYTE),
      D_SAISIE_CR             DATE,
      C_RESUL_INTERVENTION    VARCHAR2(3 BYTE),
      C_INT_TERMINE           VARCHAR2(1 BYTE),
      L_ETAT_INTERVENTION     VARCHAR2(30 BYTE),
      D_JOUR_BILAN_FIGE       DATE,
      D_FACTURE_SST           DATE,
      D_CREATION              DATE,
      ID_SST                  VARCHAR2(15 BYTE),
      D_LEVEE_ATTENTE         DATE,
      D_DEPOT                 DATE,
      D_EXP_SST               DATE,
      D_RECEPTION_SST         DATE,
      D_CONF_ACC_RET_SST      DATE,
      D_DEM_ACC_RET_SST       DATE,
      D_SAISIE_ACC_RET_SST    DATE,
      D_SAISIE_BILAN          DATE,
      D_EDITION_MAD           DATE,
      D_REST_APP_PREV         DATE,
      D_REST_APPAREIL         DATE,
      D_EDITION_DEVIS_CLT     DATE,
      D_REP_CLIENT_DEVIS      DATE,
      D_EXP_MR_CT             DATE,
      D_RECEPTION_CT          DATE,
      D_ACC_RECEPTION_SST     DATE,
      D_EXP_CT_MR             DATE,
      D_CLOTURE_DOSSIER       DATE,
      D_CLOTURE_INT           DATE,
      D_ANNULATION            DATE,
      D_PREM_ATTR_TECH        DATE,
      D_PD_ATTENDUE           DATE,
      D_AFF_PD_ATL            DATE,
      D_SERVI_STOCK           DATE,
      D_SERVI_AFFECT          DATE,
      D_REC_APP_MR            DATE,
      D_FIN_DOSSIER           DATE,
      M_DEVIS_TTC_FNAC        NUMBER(16,2),
      M_TOTAL_HG              NUMBER(16,2),
      N_TEMPS_FAC_TECH_ATL    NUMBER(6,2),
      N_TEMPS_PASSE_TECH_ATL  NUMBER(6,2),
      N_TEMPS_FAC_TECH_ITI    NUMBER(6,2),
      N_TEMPS_PASSE_TECH_ITI  NUMBER(6,2),
      N_TEMPS_FAC_TECH_SST    NUMBER(6,2),
      Q_DEPLACEMENT           NUMBER(1),
      Q_LIVRAISON             NUMBER(1),
      Q_ENLEVEMENT            NUMBER(1),
      Q_FORFAIT               NUMBER(1),
      D_CRE                   DATE,
      D_MAJ                   DATE,
      N_JOUR_PROL_GAR         INTEGER,
      D_DEB_CNT_EXTENSION     DATE,
      C_GARANTIE_CLIENT       VARCHAR2(3 BYTE)
    )
    TABLESPACE SAVIX_DATA1
    PCTUSED    0
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                INITIAL          1M
                NEXT             1M
                MINEXTENTS       1
                MAXEXTENTS       2147483645
                PCTINCREASE      0
                BUFFER_POOL      DEFAULT
               )
    LOGGING 
    NOCACHE
    NOPARALLEL
    MONITORING;
    et les colonnes que je veux ajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    C_TYPE_CLIENT  VARCHAR(1)
    N_FID          NUMBER(14)
    ID_CARTE      VARCHAR(19)
    N_ACCORD_RETOUR VARCHAR2(16)
    et quelques infos de plus sur la 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
    TABLE_NAME        DOSSIER
    TABLESPACE_NAME   SAVIX_DATA1
    PCT_FREE          10
    INI_TRANS         1
    MAX_TRANS         255
    INITIAL_EXTENT    1048576
    NEXT_EXTENT       1048576
    MIN_EXTENTS       1
    MAX_EXTENTS       2147483645
    PCT_INCREASE      0
    LOGGING           YES
    BACKED_UP         N
    NUM_ROWS          3105433
    BLOCKS            97518
    EMPTY_BLOCKS      334
    AVG_SPACE         974
    CHAIN_CNT         123254
    AVG_ROW_LEN       474
    AVG_SPACE_FREELIST_BLOCKS  0
    NUM_FREELIST_BLOCKS  0
    DEGREE            1
    INSTANCES         1
    CACHE             N
    TABLE_LOCK        ENABLED
    SAMPLE_SIZE       1020262
    LAST_ANALYZED     21/03/2008 16:40
    PARTITIONED       NO
    TEMPORARY         N
    SECONDARY         N
    NESTED            NO
    BUFFER_POOL       DEFAULT
    ROW_MOVEMENT      DISABLED
    GLOBAL_STATS      YES
    USER_STATS        NO
    SKIP_CORRUPT      DISABLED
    MONITORING        YES
    DEPENDENCIES      DISABLED
    COMPRESSION       DISABLED
    avez-vous des conseils à me donner sur l'ajout de ces 4 colonnes?
    ya des impacts si je les mets dans la table existante? est-ce que de créer une table pour ces champs avec une référence à la PK de la table "maitre" est une alternative?
    j'attends vos avis

  2. #2
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Moi personellement je trouve que ca fait un peu beaucoup 100 colonnes !!

    sinon ya des alternatives biens sur... c'est le template de table meres/filles.

    Tu as la table mere (infos principales) et les tables filles (extention ed la table mere.

    La table mere possede un ID, clef de la table.
    Les autres tables peuvent posseder leur ID (peut important) mais surtout une colonne ID_MERE qui est une clefs etrangere et unique sur l'ID (clef primaire) de la table mere.

    Pour la selection, l'ideal est uen vue qui effectue une jointure de toutes les tables avec en clause WHERE les "ID_MERE" egaux aux ID de la table mere.

    Pour l'insert, tu insert dans la table mere, tu recupere l'ID et tu insert dans toutes les tables .... idem pour la modif/delete.

    J'ai deja bossé sur ce genre de tables pour, par exemple, factoriser des tables (commes les classes Objets).
    Par exemple : Une table Liste avec les infos de base et commune a toutes les listes (clef = ID_LIGNE) et apres lestables ListeAchats, ListesVentes, ListesClients, .... qui "etendent" la table liste avec des infos specialisées.

  3. #3
    Membre expérimenté Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Points : 1 734
    Points
    1 734
    Par défaut
    C'est vrai que 100 colonnes, généralement c'est que le modèle est mal fait et qu'il devrait y avoir plusieurs tables avec des contraintes mère/fille (clés étrangères)

Discussions similaires

  1. Ajout d'une colonne dans une Table de la BD
    Par elrenzo dans le forum VB.NET
    Réponses: 1
    Dernier message: 10/05/2009, 15h12
  2. Réponses: 12
    Dernier message: 30/10/2008, 04h12
  3. Réponses: 3
    Dernier message: 31/10/2007, 10h54
  4. bouton qui ajoute un enregistrement dans une table
    Par petitours dans le forum Access
    Réponses: 1
    Dernier message: 06/12/2006, 13h33
  5. Ajout d'une colonne dans une table ...
    Par Djedjeridoo dans le forum SQL
    Réponses: 2
    Dernier message: 22/07/2003, 16h12

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