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
    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
    
     
    Faites simple, mais pas plus simple ! (A. Einstein)
    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 »)

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

  2. #42
    Membre du Club
    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
    Membre du Club
    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 ....

  4. #44
    Expert éminent sénior
    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 ?
    Faites simple, mais pas plus simple ! (A. Einstein)
    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 »)

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

  5. #45
    Membre du Club
    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.

  6. #46
    Membre du Club
    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
    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 !

     
    Faites simple, mais pas plus simple ! (A. Einstein)
    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 »)

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

  8. #48
    Membre du Club
    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.

  9. #49
    Expert éminent sénior
    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 !

     
    Faites simple, mais pas plus simple ! (A. Einstein)
    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 »)

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

  10. #50
    Membre du Club
    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 éclairé
    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
    Membre du Club
    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
    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…
    Faites simple, mais pas plus simple ! (A. Einstein)
    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 »)

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

  14. #54
    Expert éminent sénior
    Merci François pour cet interlude bien sympathique