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

Langage SQL Discussion :

Problème avec une requête insert


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur d'application en C++/QT
    Inscrit en
    Juin 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur d'application en C++/QT

    Informations forums :
    Inscription : Juin 2018
    Messages : 2
    Par défaut Problème avec une requête insert
    Bonjour à tous,

    Je me permets d'écrire sur ce forum car il y a une erreur dans ma base de données et je n'arrive pas à savoir où.
    En effet, je travaille avec un fichier SQLite, et je souhaite ajouter une ligne dans une table qui contient une clé étrangère.
    Le soucis, c'est qu'une erreur est remonté en indiquant que la clé étrangère ne correspond pas.

    Ci-dessous les requêtes utilisés :

    Table dans laquelle je souhaite utiliser une requête d'insertion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE TABLE Bo ( iID VARCHAR(36) NOT NULL, aID VARCHAR(36) NOT NULL, boOrder INT, FOREIGN KEY(iID) REFERENCES Item(iID) FOREIGN KEY(aID) REFERENCES Attribute(aID) UNIQUE(iID, aID) )
    Avec cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO Bo (iID, aID, boOrder)
    VALUES ("9f4749b7_7911_46ef_a49c_86164761ee47", "8cbf3076-f7b8-4c0d-88d3-090e5cbe9cee", 1);
    Réponse de la BDD:
    foreign key mismatch - "Bo" referencing "Item": INSERT INTO Bo(iID, aID, boOrder)
    VALUES ("9f4749b7_7911_46ef_a49c_86164761ee47", "8cbf3076-f7b8-4c0d-88d3-090e5cbe9cee", 1);
    Ce qu'il y a actuellement dans la table Item :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    itemID "9f4749b7_7911_46ef_a49c_86164761ee47" modelID"9f4749b7_7911_46ef_a49c_86164761ee47" iID"9f4749b7_7911_46ef_a49c_86164761ee47"
    Actuellement, je ne comprends pas cette erreur, des personnes pourraient-il m'aider svp ?
    Merci par avance
    Skiiro

  2. #2
    Membre Expert Avatar de bernard59139
    Profil pro
    Retired
    Inscrit en
    Octobre 2006
    Messages
    966
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Retired

    Informations forums :
    Inscription : Octobre 2006
    Messages : 966
    Par défaut
    Bonjour

    lecture de la documentation obligatoire : https://www.sqlite.org/foreignkeys.html#fk_indexes

    a+

  3. #3
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    C'est quoi ces GUID qui ne sont pas des GUID ?

    Et en plus qui sont stockés dans des VARCHAR (WTF !?)

  4. #4
    Candidat au Club
    Homme Profil pro
    Développeur d'application en C++/QT
    Inscrit en
    Juin 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur d'application en C++/QT

    Informations forums :
    Inscription : Juin 2018
    Messages : 2
    Par défaut
    Citation Envoyé par StringBuilder Voir le message
    C'est quoi ces GUID qui ne sont pas des GUID ?

    Et en plus qui sont stockés dans des VARCHAR (WTF !?)
    Bonjour StringBuilder, je suis obligé d'utiliser des varchar car j'utilise des Uuid car les données sont utilisées dans plusieurs base de données.


    Citation Envoyé par bernard59139 Voir le message
    Bonjour

    lecture de la documentation obligatoire : https://www.sqlite.org/foreignkeys.html#fk_indexes

    a+
    Bonjour Bernard59139, merci tu m'as bien mis sur la voie. iID n'est pas UNIQUE ou une PK de ce fait je peux pas l'utiliser en tant que clé étrangère. Merci.

  5. #5
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    GUID est un type de données (un entier sur 16 octets).

    Déjà qu'en soit, GUID est un très mauvais choix en termes :
    - d'espace
    - lisibilité
    - performances

    Mais si en plus vous détournez son type en varchar :
    - vous multipliez l'espace par… 2,5
    - niveau lisibilité, en plus vous introduisez des problèmes liés à la conversion en varchar : 9f4749b7_7911_46ef_a49c_86164761ee47 <> 9f4749b7-7911-46ef-a49c-86164761ee47 <> 9F4749B7_7911_46EF_A49C_86164761EE47
    - forcément, les performances sont encore décrues

    Bref… C'est franchement pas le bon choix du tout pour gérer des clés primaires et encore moins des clés étrangères !

    Sans oublier que par défaut, les données sont organisées dans le fichier dans données dans l'ordre de la clé primaire… et donc que SGBD va passer le plus clair de son temps à réorganiser les données sur le disque après chaque insertion (puisque GUID est conçu pour avoir des données totalement aléatoires et uniques, donc forcément des générations d'ID séquentielles produisent des valeurs réparties uniformément sur l'index de la clé primaire).

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    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 : 22 010
    Billets dans le blog
    6
    Par défaut
    Sans oublier que le tri d'un GUID n'a rien à voir avec le tri du même GUID convertit en littéral....

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

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

Discussions similaires

  1. Problème avec une requête INSERT (sqlserver2005)
    Par jacko842 dans le forum Développement
    Réponses: 2
    Dernier message: 21/03/2012, 10h09
  2. [VB.NET/Access] Problème avec une requête d'insertion
    Par Bladinou dans le forum Accès aux données
    Réponses: 8
    Dernier message: 29/05/2007, 18h06
  3. Problème avec une requête
    Par snoopy69 dans le forum Débuter
    Réponses: 2
    Dernier message: 20/01/2005, 12h39
  4. problème avec une requête imbriquée
    Par jaimepasteevy dans le forum Langage SQL
    Réponses: 13
    Dernier message: 05/12/2003, 10h29
  5. Problème sur une requête INSERT
    Par Marion dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/06/2003, 08h45

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