Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Oracle] Clé primaire préservée

Rien compris...

Sujet résolu
Anonyme
    12 mars 2020 à 19:55:20

    Bonjour,

    Alors je vous explique : je n'arrive pas à comprendre cette histoire de clé primaire préservée (pour faire une modification d'une vue). Est-ce que quelqu'un peut expliquer avec un exemple de vue avec deux jointures et les tables de son choix pour que je puisse comprendre cette histoire. J'ai fait des tests et ce que j'obtiens n'arrive pas à confirmer ce que ce gars dit.

    En français, la traduction serait : "toutes les autres tables [de la jointure dans la vue je suppose] ont une clé primaire préservée : chaque clé primaire doit avoir au moins une ligne pour chaque ligne de la table".

    Sauf que je n'ai pas bien compris.

    Si quelqu'un pouvait m'expliquer, merci :)

    -
    Edité par Anonyme 12 mars 2020 à 19:56:30

    • Partager sur Facebook
    • Partager sur Twitter
      16 mars 2020 à 13:38:22

      Bonjour,

      Peux-tu nous donner la structure des tables (colonnes, types et contraintes) en jeu dans ton cas, la requête d'UPDATE essayée et l'erreur exacte retournée par Oracle ?

      -
      Edité par Benzouye 16 mars 2020 à 13:38:40

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
      Anonyme
        20 mars 2020 à 23:45:40

        Benzouye a écrit:

        Bonjour,

        Peux-tu nous donner la structure des tables (colonnes, types et contraintes) en jeu dans ton cas, la requête d'UPDATE essayée et l'erreur exacte retournée par Oracle ?

        -
        Edité par Benzouye 16 mars 2020 à 13:38:40

        J'aimerai bien une réponse générale, je peux donner un cas spécifique mais j'ai bien envie de comprendre pour tous les cas.

        Donc, par exemple, j'ai :

        CREATE TABLE CLIENT
        (
            login VARCHAR2(10) PRIMARY KEY,
            nom VARCHAR2(10) NOT NULL,
            prenom VARCHAR2(10),
            MotDePasse VARCHAR2(10) NOT NULL
        );
        
        CREATE TABLE LOCATION
        (
            login VARCHAR2(10),
            numExemplaire NUMBER(5),
            dateLocation DATE,
            dateEnvoi DATE,
            dateRetour DATE,
            CONSTRAINT PRIMARY_KEY PRIMARY KEY (login, numExemplaire),
            CONSTRAINT CHECKING_DATE_1 CHECK ( dateRetour <= ADD_MONTHS(dateLocation, 1)),
            CONSTRAINT CHECKING_DATE_2 CHECK ( dateLocation <= dateEnvoi ),
            CONSTRAINT CHECKING_DATE_3 CHECK ( dateEnvoi <> dateRetour ),
            CONSTRAINT FK_EXEMPLAIRE FOREIGN KEY (numExemplaire) REFERENCES Exemplaire,
            CONSTRAINT FK_LOGIN FOREIGN KEY (login) REFERENCES CLIENT
        );
        CREATE TABLE Exemplaire
        (
        NumExemplaire NUMBER(5) PRIMARY KEY,
        NumFilm NUMBER(5),
        CodeSupport VARCHAR2(40),
        Vo VARCHAR2(40),
        Problème VARCHAR2(40),
        DétailSupoprt VARCHAR2(40)
        );

        Si je créé une vue :

        CREATE OR REPLACE VIEW VUE_PRETS AS
            SELECT login, nom, prenom, dateLocation, titre, nomIndividu, prenomIndividu
            FROM CLIENT NATURAL JOIN LOCATION NATURAL JOIN EXEMPLAIRE NATURAL JOIN FILM LEFT JOIN INDIVIDU ON (FILM.realisateur = INDIVIDU.NumIndividu)
        

        Et bien, je ne peux pas modifier les données par l'intermédiaire de cette vue (Oracle me dit), la clé primaire n'est pas préservée. Pourquoi ? Merci.

        • Partager sur Facebook
        • Partager sur Twitter
          21 mars 2020 à 9:32:27

          Quelle colonne de cette vue veux-tu UPDATE ?

          -
          Edité par Benzouye 21 mars 2020 à 9:32:41

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
          Anonyme
            22 mars 2020 à 0:04:05

            Par exemple, titre.
            • Partager sur Facebook
            • Partager sur Twitter
              22 mars 2020 à 11:37:16

              Il peut y avoir plusieurs fois le même film pour des locations différentes, la table film n'est donc pas en clé primaire conservée, tu ne peux pas UPDATE la vue...

              "At most" signifie "au plus" pas "au moins" ...

              • Partager sur Facebook
              • Partager sur Twitter
              Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
              Anonyme
                27 mars 2020 à 0:15:35

                Benzouye a écrit:

                Il peut y avoir plusieurs fois le même film pour des locations différentes, la table film n'est donc pas en clé primaire conservée, tu ne peux pas UPDATE la vue...

                "At most" signifie "au plus" pas "au moins" ...


                Ah oui effectivement, merci beaucoup ! C'est plus clair effectivement.
                • Partager sur Facebook
                • Partager sur Twitter

                [Oracle] Clé primaire préservée

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown