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 :

Clés primaires auto-incrément, valeurs qui se suivent ou non. Liaisons clés étrangères (django)


Sujet :

Langage SQL

  1. #1
    Membre habitué
    Avatar de __fabrice
    Homme Profil pro
    Développeur Back-End
    Inscrit en
    Août 2004
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Août 2004
    Messages : 404
    Points : 194
    Points
    194
    Par défaut Clés primaires auto-incrément, valeurs qui se suivent ou non. Liaisons clés étrangères (django)
    Salut,

    Je suis en train de faire un bdd classique et j'ai eu un doute émis par un autre dev :
    Pour faire simple, j'ai 2 tables (avec très très peu d'update) , dont une avec une FK (clé étrangère) sur l'autre. Il y a un autoincrément sur la PK (clé primaire).

    Avec Django je fais des fixtures (remplissage en base) pour remplir ces 2 tables et je mets les valeurs de la PK qui se suivent :

    id code name zone_id
    1 13 bla1 1
    2 84 bla2 2
    3 06 bla3 4
    ...

    Simple, basique. Mais ce collègue a changé mes fixtures parce que c'est "mieux", par confort peut-être :

    id code name zone_id
    13 13 bla1 1
    84 84 bla2 2
    6 06 bla3 4
    ...

    Du coup, les valeurs de la PK ne se suivent plus. Est-ce correct ?, ou faut-il enlever l'auto-incrément ?. Pour moi c'est complétement absurde d'avoir changé çà


    Merci
    F.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Pour moi les deux points de vue sont "absurdes":
    1. Vouloir donnée une signification à la valeur de cette clé primaire
    2. Vouloir que les valeurs se suivent

    Dans les deux cas vous tentez de donner un "sens" à cette clé primaire.

    Le mieux ici est de laisser faire la base, et de ne rien attendre de plus de cette clé que d'avoir la valeur affectée par la base.

    Tatayo.

  3. #3
    Membre habitué
    Avatar de __fabrice
    Homme Profil pro
    Développeur Back-End
    Inscrit en
    Août 2004
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Août 2004
    Messages : 404
    Points : 194
    Points
    194
    Par défaut
    Bonjour,

    Merci pour ta réponse. Cependant, cela n'apporte pas forcément de solution . Car, il faut bien une PK lié à la FK, donc une valeur, donc un sens

    Je ne comprends pas "laisser faire la base" . Que dois-je faire ?. Quel est le meilleur choix dans le contexte de Django et des fixtures svp ?


    F.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Vu qu'il y a un auto-incrément sur la colonne, par "laisser faire la base", je disais de ne pas spécifier de valeur pour cette colonne. L'auto-incrément s'occupe de ça.

    Chez nous toutes les clé primaires sont systématiquement de type "auto-incrément", et à aucun moment nous ne "forçons" les valeurs pour ces colonnes.
    D'ailleurs les valeurs sont toutes différentes entre la base de test et la base de prod, même pour des données "identiques", par exemple une boutique donnée, un pays, une devise...
    C'est d'ailleurs une bonne chose, ça impose à certains de mes collègues de ne pas avoir d'à-priori concernant la valeur de ces PK.
    Elles ne sont utilisées que pour les jointures (et de fait les contraintes d'intégrité), les recherches se faisant sur des clés alternatives (la colonne code dans ton exemple).

    Maintenant je ne connais pas Django ni les "fixtures", donc sur ce point je n'ai pas de réponse.

    Tatayo.

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 912
    Points
    38 912
    Billets dans le blog
    9
    Par défaut
    En complément,
    • il est urgent d'informer celui ou ceux qui ont fait ces modifs de valeurs de PK de ne jamais refaire ce genre d'intervention, c'est inutile et très dangereux
    • il est également urgent de vérifier la présence de contraintes d'intégrité dans la BDD, tout ajout d'une FK dont la valeur ne correspond à aucune PK doit faire l'objet d'un rejet


    Et tout comme Tatayo, "fixture" no comprendo amigo

  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
    21 772
    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 772
    Points : 52 732
    Points
    52 732
    Billets dans le blog
    5
    Par défaut
    ça doit être "mixture".... sans doute une substance bizarre que notre internaute à absorbé avant de venir poster !
    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/ * * * * *

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Pourtant il ne me semble pas que Django prend quoi que ce soit d'illicite

    Tatayo.

  8. #8
    Membre habitué
    Avatar de __fabrice
    Homme Profil pro
    Développeur Back-End
    Inscrit en
    Août 2004
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Août 2004
    Messages : 404
    Points : 194
    Points
    194
    Par défaut
    Merci pour ces infos complémentaires et qui me conforte dans mon idée

    Une fixture est un fichier json ou yaml qui permet de remplir une ou des tables de la bdd, en mode "command line". Cela sert à l'installation, ou dans le cas ou les données sont dans un format "non-sql". On les remplit donc manuellement, et on les insère quand on veut.


    F.

  9. #9
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    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 772
    Points : 52 732
    Points
    52 732
    Billets dans le blog
    5
    Par défaut
    ha oui... C'est super ! Histoire d'ajouter une couche de stupidité là ou un simple INSERT MaTable VALUES (...) , va faire ça plus rapidement....

    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/ * * * * *

  10. #10
    Membre habitué
    Avatar de __fabrice
    Homme Profil pro
    Développeur Back-End
    Inscrit en
    Août 2004
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Août 2004
    Messages : 404
    Points : 194
    Points
    194
    Par défaut
    Pas du tout d'accord
    Là, On parle bien d'ORM, de Django, d'intégration continue, etc. Cela reste très pratique.
    Certes, il faut utiliser tout ces outils à bon escient.

    Je ne veux pas me lancer dans un tel débat en tout cas.

    F.

  11. #11
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    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 772
    Points : 52 732
    Points
    52 732
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par __fabrice Voir le message
    Pas du tout d'accord
    Vous avez parfaitement le droit de ne pas être d'accord... Voici ce que j'ai écrit au sujet des ORM il y a déjà 10 ans...
    http://sqlpro.developpez.com/cours/b...s-epaisses.pdf
    Tout le monde continue à les utiliser et patauger dedans l

    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/ * * * * *

  12. #12
    Membre habitué
    Avatar de __fabrice
    Homme Profil pro
    Développeur Back-End
    Inscrit en
    Août 2004
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Août 2004
    Messages : 404
    Points : 194
    Points
    194
    Par défaut
    Ce n'est pas faux.

    Pour ma part, je pense que tous ces outils, qui peuvent effectivement nous pourrir la vie, doivent être utiliser avec parcimonie.... Mais ils rendent de grands services quand même :-)

    Bonne journée.

Discussions similaires

  1. Réponses: 4
    Dernier message: 07/05/2017, 11h58
  2. Comment créer une clé primaire auto incrémentée?
    Par lolymeupy dans le forum PowerAMC
    Réponses: 10
    Dernier message: 26/11/2013, 16h50
  3. Clé primaire auto incrémentée, problème insertion
    Par barnoufal dans le forum Ruby on Rails
    Réponses: 0
    Dernier message: 12/02/2008, 17h17
  4. création clé primaire auto incrémentable SQL ACCESS ?
    Par colorid dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 23/11/2007, 14h25
  5. [VB.NET] [ADO.NET] Clef primaire auto incrémenté
    Par Guld dans le forum Accès aux données
    Réponses: 4
    Dernier message: 25/09/2004, 20h46

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