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

SQL Oracle Discussion :

Ajouter des clés primaires à mes tables


Sujet :

SQL Oracle

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Consultat
    Inscrit en
    Juillet 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultat
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2
    Par défaut Ajouter des clés primaires à mes tables
    Bonsoir,

    Le problème que je vais poser sortira de l'ordinaire, mais c'est véritablement un problème réel.

    J'ai hérité d'une base de données d'environ 900 tables, cependant aucune de ces tables ne possède de clé primaire. En posant la question, on m'a fait savoir que cela était un choix à l'époque où ils concevaient la dite base de données. Cette base de données est le support d'une application client-serveur qui fonctionne très bien.

    Dans le but de refonte de ce logiciel pour le passer en web, nous avons opté pour la réutilisation de cette base de données et de Java comme langage de programmation. Malheureusement avec ce dernier, au moment de la génération des entités, les tables qui n'ont pas de clés primaires ne sont pas prises en comptes.

    Je me pose donc la question de savoir: Est-il possible d'avoir par exemple une fonction qui parcourrera chaque table de la base de données afin d'ajouter un champ "ID" AUTO INCREMENT?
    Si oui pouvez vous m'apporter votre aide dans cette tâche?
    Sinon, Existe t'il des langages pour faire du web qui ne sont pas contraignantes dans ce cas là? Si oui les quelles?

    Merci

  2. #2
    Membre Expert
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 2 005
    Par défaut
    Salut,

    Tu peux faire une boucle en PL/SQL pour parcourir la table DBA_TABLES ou USER_TABLES pour récupérer la liste des tables pour le user qui a créé les tables de ton application (différent de SYS).
    Ensuite tu fais du SQL Dynamique (construction d'une chaîne de caractères) pour construire un ordre SQL du genre ALTER TABLE ADD le nom de ta colonne PRIMARY KEY... puis tu exécutes la chaîne de caractères.

    Ca pourrait marcher.

  3. #3
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Oui il est possible via le méta-dictionnaire d'Oracle d'ajouter une colonne id_<nom_table> à chaque table existante mais il y a peux de chances que cela servira à grand chose. Avant la version 6 les contraintes n'existent pas mais des applications conçue avant cette version devrait avoir très probablement un index unique faisant support de vérification des doublons. Donc cela constitue le point de départ pour votre chantier de ré-ingénierie. Ensuite pour les clés étrangères il va falloir faire appel à la connaissance fonctionnelle des développeurs parce que rien ne garanti que les mêmes noms des colonnes ont été utilisées. Donc la meilleur solution est l'analyse au cas par cas et la décision avisé.
    Java comme langage n'impose en rien le concept de clé primaire votre problème est lié très probablement à un outil de génération automatique des classes java à partir des tables d'Oracle. De toute façon ce concept est erroné quoi que largement utilisé.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 6
    Par défaut
    Bonjour,
    Comme le dit très justement mnitu , il serait intéressant de se poser la question sur les bienfaits fonctionnels d'une telle opération.
    Maintenant si vous désirez réaliser celle-ci voici comment moi je m'y prendrais:

    1. Ajouter sur chacune des tables un champ de type number. Dans un premier temps aucune contrainte ne devra être associé à ces champs
    2. Création pour chacune des tables d'une sequence qui permettra de réaliser l'auto incrément de sa futur primary Key
    3. créé un trigger on insert sur chacune des tables permettant la gestion automatique de l'auto incrément à l'aide des sequences et l'alimentation du champ destiné à devenir la primary Key
    4. réaliser un script qui mettra à jour les nouveau champs destinés à devenir les cléss primaire en utilisant les sequences que vous leur aurez associées
    5. une fois que tout les records possèdent leur future clef primaire pré-remplie et que les triggers permettent de remplire automatiquement celles-ci lors de l'ajout des nouveau enregistrements, ajouter les contraintes not null
    6. maintenant, vous pouvez définir les nouveaux champs comme clef primaire sans oublier de vérifier que ceux-possèdent bien un index


    Cela va vous prendre du temps et nécessitera des tests (A ne pas faire directement en production).
    Vous aurez effectivement des clefs primaire auto-incrémentable sur chacune de vos tables.

    Par contre, celle-ci ne seront pas ou peux utilisable dans un contexte fonctionnel:
    Et je me poserait plutôt les questions suivantes:
    • Comment fait-ont aujourd'hui pour identifier de manière unique chaque enregistrement ? ==> la réponse donnera la/les clés primaire à créer
    • Comment ces valeurs sont-elles créées lors de l'insertion des records ? ==> fonction pour la création de la primary key à implémenté dans votre nouvelle application
    • ....


    J'espère que ceci vous aura aidé

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/08/2014, 13h00
  2. Réponses: 4
    Dernier message: 18/12/2012, 11h56
  3. Réponses: 5
    Dernier message: 12/03/2007, 10h21
  4. Réponses: 14
    Dernier message: 22/09/2005, 16h49
  5. choix des clés primaires
    Par dcollart dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 17/08/2005, 17h25

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