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

Schéma Discussion :

courses hippiques


Sujet :

Schéma

  1. #41
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Et pour voir autre chose que des auto-incréments sans intérêt, n’oubliez pas les vues. Exemple :

    GO
    CREATE VIEW COURSE_V (ReunionNumero, PrixNom, CourseNumero, CourseDuree, CourseAllocation)
    AS
        SELECT ReunionNumero, PrixNom, CourseNumero, CourseDuree, CourseAllocation
        FROM   COURSE as x JOIN PRIX as y ON x.PrixId = y.PrixId
          JOIN REUNION as z ON x.ReunionId = z.ReunionId
     ;
    GO
    
    SELECT '' AS COURSE, * FROM COURSE_V
    ;
    Au résultat :

    COURSE (ReunionNumero  PrixNom                  CourseNumero  CourseDuree  CourseAllocation
            116            Grand prix de la reine   67            00:02:05     5000
    
     
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  2. #42
    Invité
    Invité(e)
    Par défaut Pas sous sqlite
    Bonjour,

    Je me demande s'il ne faut pas que j'abandonne SQLITE car plus j'avance, et plus je m'aperçois que les choses semblent uniformes sous d'autres SGBD mais pas pour SQLITE.

    En effet, ajouter IDENTITY (1,1) n'aboutit pas à l'autoincrémentation de CourseId dans COURSE.

    Jusqu'aux premières tables, l'autoincrémentation ne posait pas de problème, puisque pour les tables TERRAIN, HIPPODROME, PRIX, les clés primaires étaient "seules" et je crois avoir lu que la simple déclaration en PRIMARY KEY ne nécessite pas d'ajouter AUTOINCREMENT et effectivement l'autoincrémentation s'opère.

    Non, la difficulté survient avec le couple ReunionId et CourseId qui constituent à eux deux la clé primaire de COURSE.
    J'ai bien tenté d'ajouter AUTOINCREMENT à la contrainte CONSTRAINT COURSE_PRIMARY KEY mais j'aboutis à une erreur.

    Peut-être me faut-il me résoudre à l'intégrer manuellement et à coder une astuce pour récupérer la dernière valeur enregistrée incrémentée de +1 mais cela alourdit tout.

  3. #43
    Invité
    Invité(e)
    Par défaut La réponse semble: PAS POSSIBLE AVEC SQLITE
    Je pense avoir trouvé la réponse.

    Déjà en 2006, fadeninev évoquait dans ce forum qu'il ne pouvait y avoir de champ auto incrément dans une clé double avec SQLite bien que cela fonctionne avec d'autre SGBD.

    https://www.developpez.net/forums/d2...-cle-primaire/

    Je vais gérer seul l'auto-incrémentation.

    Allez, on continue ....
    Dernière modification par Invité ; 19/02/2020 à 09h06.

  4. #44
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Les éditeurs de SGBD en sont restés à des principes trop simplistes, notamment en ce qui concerne le concept de clé primaire qui en fait est adaptable...

    Si le SGBD trop simpliste exige que l’auto-incrémentation ne fonctionne que pour une clé primaire mono-colonne, soit, ça n’est pas grave. Un truc qui marche avec SQL Server (et bien d’autres), consiste alors à définir {CourseId} comme clé primaire, et la paire {ReunionId, CourseId} comme surclé (COURSE_NO_AK) de la table COURSE et servira de référence pour les clés étrangères :


    CREATE TABLE COURSE 
    (
            ReunionId        INT           NOT NULL
          , CourseId         INT           IDENTITY(1,1)
          , PrixId           INT           NOT NULL
          , CourseNumero     INT           NOT NULL
          , CourseDuree      TIME          NOT NULL
          , CourseAllocation INT           NOT NULL
        , CONSTRAINT COURSE_PK PRIMARY KEY (CourseId)
        , CONSTRAINT COURSE_CO_AK UNIQUE (ReunionId, CourseId)
        , CONSTRAINT COURSE_NO_AK UNIQUE (ReunionId, CourseNumero)
        , CONSTRAINT COURSE_REUNION_FK FOREIGN KEY (ReunionId)
              REFERENCES REUNION
        , CONSTRAINT COURSE_PRIX_FK FOREIGN KEY (PrixId)
              REFERENCES PRIX (PrixId)
    ) ; 
    Vérifions la bonne marche des références entre tables. Toujours avec SQL Server, la table QUINTE (à laquelle on ne touche pas !) fait de facto référence non pas à la clé primaire de COURSE, mais à la surclé COURSE_NO_AK. Rappel de la structure :

     CREATE TABLE QUINTE 
    (
            ReunionId        INT           NOT NULL
          , CourseId         INT           NOT NULL
          , Rapport_Ordre    DECIMAL(9,2)  NOT NULL
          , Rapport_Desordre DECIMAL(9,2)  NOT NULL
        , CONSTRAINT QUINTE_PK PRIMARY KEY (ReunionId, CourseId)
        , CONSTRAINT QUINTE_COURSE_FK FOREIGN KEY (ReunionId, CourseId)
              REFERENCES COURSE (ReunionId, CourseId)
              ON DELETE CASCADE
    ) ;
    En reprenant le bout de jeu d’essai de mon post précédent :

     INSERT INTO COURSE (ReunionId, PrixId, CourseNumero, CourseDuree, CourseAllocation)
      SELECT
        (SELECT ReunionId FROM REUNION WHERE ReunionNumero = 116)
      , (SELECT PrixId FROM PRIX WHERE PrixNom = 'Grand prix de la reine')
      , 67, '00:02:05', 5000
    ;
    SELECT '' AS COURSE, * FROM COURSE
    ;
    INSERT INTO QUINTE (ReunionId, CourseId, Rapport_Ordre, Rapport_Desordre)
      SELECT
        (SELECT ReunionId FROM COURSE WHERE CourseNumero = 67)
      , (SELECT CourseId FROM COURSE WHERE CourseNumero = 67)
      , 1500, 65
    ;
    SELECT '' AS QUINTE, * FROM QUINTE
    
    Au résultat :

    COURSE  (ReunionId  CourseId  PrixId  CourseNumero  CourseDuree  CourseAllocation)
             2          1         2       67            00:02:05     5000
    
    QUINTE  (ReunionId  CourseId  Rapport_Ordre  Rapport_Desordre)
             2          1         1500           65
    
    Est-ce que ça passe avec SQLite ?
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  5. #45
    Invité
    Invité(e)
    Par défaut Bonsoir
    Bonsoir,

    J'avais résolu, me semble-t-il, ce point en procédant à une auto-incrémentation manuelle sous cette forme:

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    req ="""SELECT MAX (CourseId) FROM COURSE"""
    self.cursor.execute(req)
    a =self.cursor.fetchone()
    b =a[0]
    if b == None:
            b =0	
    else:
    	pass
    self.CourseId =b+1

    Cela paraît fonctionner, j'ai fait quelques essais.

    Je tenterai votre code probablement demain, il me faut savoir.
    Très bonne soirée.
    Dernière modification par Invité ; 19/02/2020 à 09h13.

  6. #46
    Invité
    Invité(e)
    Par défaut Table réunion supprimée
    Bonjour,

    J'ai décidé de supprimer la table réunion car elle ne m'aurait pas été utile.
    Dès le départ, je ne visais que les courses du quinté c'est pourquoi conserver les données liées au numéro de la réunion n'aurait été d'aucune utilité statistique. Ainsi RéunionId et TerrainId deviennent clés étrangères cette fois dans la table COURSE; j'ajoute CourseDate dans cette même table, ainsi que TypeId en clé étrangère, puisque j'avais aussi créé une autre table liée appelée TYPE, destinée à indiquer le type de course (haie, trot ...)

    La suppression n'est pas la conséquence de mes précédentes questions puisque j'étais malgré tout parvenu à auto-incrémenter CourseId.

    Quoiqu'il en soit merci beaucoup pour le coup de main, et navré de vous avoir fait phosphorer inutilement.

  7. #47
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Bonjour ceststef,


    Citation Envoyé par ceststef Voir le message
    La suppression n'est pas la conséquence de mes précédentes questions puisque j'étais malgré tout parvenu à auto-incrémenter CourseId.
    Pas de problème. Mais pouvez-vous tester le code SQL que j’ai proposé hier ? Ça pourrait m’être utile à l’avenir, allez savoir !

    Merci !

     
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  8. #48
    Invité
    Invité(e)
    Par défaut Ca a fonctionné
    Bonjour,

    Pardon pour cet énorme retard, des choses à régler et puis il m'a fallu revenir en arrière dans le programme que j'avais pas mal modifié depuis pour pouvoir soumettre votre code sql.

    Bref, ça a bel et bien fonctionné sous SQLite. On constate bien l'auto-incrémentation de CourseId et la bonne référence entre tables puisque on peut voir que la table RAPPORT est convenablement alimentée.

    Donc votre code a bien fonctionné, mais très franchement, je n'avais pas trop de doute.

    Merci et sans doute à bientôt.
    Dernière modification par Invité ; 22/02/2020 à 22h01.

  9. #49
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Bonsoir ceststef,

    Merci d’avoir fait le test !

    En tout cas, comme je le rappelais à lazare :

    « Un jour on gagne un jour on perd, à l'hippodrome de Cagnes-sur-Mer »

    Bon quintés !

     
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  10. #50
    Invité
    Invité(e)
    Par défaut Bonjour
    Oui, j'avais bien remarqué cette phrase que j'ai interprétée comme ceci: "attention à ne pas y laisser sa chemise".

    Aucun danger car le plus drôle dans ma démarche, c'est que je ne joue pas.
    Je fais ce programme uniquement pour me prouver que les courses n'obéissent à aucune règle statistique.
    Car à titre personnel, je trouve que les jeux d'argent sont une ânerie, il est notoire qu'ils n'ont pas été créés pour faire gagner le client.

    Il me semble que Philippe BOUVARD, très affûté dans le domaine du jeu puisqu'il s'est fait en son temps volontairement interdire de casino, avait dit en substance, si mes souvenirs sont bons, que finalement " la seule façon de gagner au casino, c'est d'en acheter un ! ".

    Tout est dit .

  11. #51
    Membre émérite
    Avatar de Paprick
    Homme Profil pro
    Professeur des Universités
    Inscrit en
    Juin 2019
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Professeur des Universités
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2019
    Messages : 678
    Points : 2 716
    Points
    2 716
    Par défaut
    Et, pour en rajouter une couche, citons Albert Einstein : "Le seul moyen de gagner à la roulette consiste à voler l'argent au croupier lorsque celui-ci a le dos tourné" !
    Patrick Bergougnoux - Professeur des Universités au Département Informatique de l'IUT de Toulouse III
    La simplicité est la sophistication suprême (Léonard de Vinci)
    LIVRE : Modélisation Conceptuelle de Données - Une Démarche Pragmatique
    Looping - Logiciel de modélisation gratuit et libre d'utilisation

  12. #52
    Invité
    Invité(e)
    Par défaut La bd fonctionne comme prévu
    Un grand merci pour toutes les discussions utiles et cardinales FSMREL que nous avons eues.
    Chose promise, chose due: je reviens vers vous pour vous faire connaître le devenir de mon programme pour lequel vous avez très concrètement participé.
    Et bien, tout fonctionne correctement. La base de données est efficace et je peux en tirer les stats que je souhaite, surtout aidé par la facilité du langage python.
    Moi qui n'entendait rien à la programmation il y a encore quelques mois, je ne suis pas peu fier d'y être parvenu mais seul je ne suis pas certain que cela aurait abouti.

    J'ai eu beaucoup de difficultés pour mettre en oeuvre l'interface graphique avec Tkinter car c'est encore un autre domaine qui réclame du temps avant que le déclic ne se fasse (en tout cas pour moi) mais il est vrai qu'ensuite tout reste logique.

    Il me reste à alimenter ma base avec toutes les courses de Q5+ depuis 2019 (en réalité il me reste 6 mois de courses à insérer) et leurs résultats que j'ai pu récupérer.

    J'avais indiqué que je vous tiendrai au courant de l'aboutissement ou non de mon petit projet, je tenais donc à le faire.

    Merci à ce site et à la communauté en général et tant mieux si tout cela perdure encore très longtemps car, je sais que c'est un poncif mais il reste juste, l'union fait la force.

    Bon courage et faut-il le dire, merci.


    Stef.

  13. #53
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    A notre tour, merci Stef,

    J’ai retrouvé moult paroles de la chanson Spécial tiercé écrite par mon copain Roro et qu’on chantait ensemble au Bougnat blanc dans les années soixante ♪ ♫

    Spécial tiercé

    Si nous parlions un peu mes frères
    de l’hippodrome de Cagnes-sur-Mer !

    Depuis qu’on a comme à Paris
    un hippodrome et un grand prix,
    chacun de nous c’est naturel
    est un joueur devant l’Eternel.
    César me donne des tuyaux
    C’est moi qui les donne à Jojo,
    Jojo les repasse à César
    Et c’est ainsi que par hasard :
    Un jour on gagne un jour on perd,
    à l'hippodrome de Cagnes-sur-Mer !

    J’ai un ami qui est driver
    un jour il me dit n’aie pas peur
    de jouer gros sur mon numéro
    j’arriverai dans un chapeau !
    L’aurait dû partir en sulky
    Mais c’est su’ l’ cul qu’il est parti
    Quand je l’ai vu sur son derrière
    Je me suis dit pour me refaire :
    Y a qu’ le tocard de la dernière
    à l'hippodrome de Cagnes-sur-Mer !

    La personne la mieux placée
    pour savoir qui qu’y doit gagner
    c’est le patron du PMU
    dit le bouc parc’ qu’il est barbu.
    C’ gars-là est tel’ment renseigné
    qu’à la fin il sait plus quoi jouer
    pour vous dire à quel point c’en est :
    encore hier je l’ai vu faire
    un jumelé d’outsiders
    à l'hippodrome de Cagnes-sur-Mer

    Un vieux joueur m’a dit mon gars
    moi les chevaux c’est mon dada
    Et je viendrai finir ici
    mes jours et mes économies
    Près de Nice et d’ Monte-Carlo
    près de Cannes et du Casino,
    près de la mer, près des chevaux
    je réchaufferai mes vieux os
    Le mimosa fleurit l’hiver
    à l'hippodrome de Cagnes-sur-Mer

    Il me reste à retrouver la partition…
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  14. #54
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    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 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    Merci François pour cet interlude bien sympathique

Discussions similaires

  1. Raisonnement pour la prédiction des performances en course hippique
    Par sp2308 dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 02/04/2015, 20h53
  2. [AC-2007] Création Formulaire - Gestion de courses hippiques
    Par jean33000 dans le forum IHM
    Réponses: 8
    Dernier message: 26/04/2010, 20h42
  3. [FLASH MX2004] Course de bateaux
    Par Kalyptus dans le forum Flash
    Réponses: 9
    Dernier message: 31/05/2005, 19h26
  4. Réponses: 2
    Dernier message: 15/02/2005, 20h32

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