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
    Nouveau 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
    Nouveau 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
    Nouveau 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
    Nouveau 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
    Nouveau 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
    Nouveau 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 confirmé
    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