Bd

Discutez d'informatique ici !
Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 18:42

Bd

par Rockleader » 10 Avr 2014, 16:47

Salutation, pour un projet, on doit implémenter une BD répondant aux critères suivants.
J'aimerais avoir vos avis sur le MCD que j'ai réalisé, il est tout à fait possible que je sois passé à coté de quelque chose.
Ensuite, je pense qu'il ets réaliste de dire que tout n'est pas modélisable de toute façon, il s'agit surtout de trouver la solution la plus juste.

On souhaite construire une base de données des Jeux Olympiques d’Hiver 2014.

La base de données doit contenir :
- le programme (jour et lieu) des différentes épreuves, ainsi que leur description et leur
résultat (temps/score pour chaque athlète/équipe associé)
- les différentes médailles attribuées
- les différents sites olympiques.

Certaines épreuves sont « simples » (en une manche), d’autres sont plus complexes et en
plusieurs manches (tournoi, ou épreuve à élimination directe par exemple). Dans le cas où
il y a plusieurs manches, on souhaite bien sûr connaître le résultat des différentes
manches.
Dans le cas où l’épreuve a lieu par équipe, on souhaite connaître la composition des
équipes. Attention dans certains sports (par exemple, le bobsleigh) plusieurs équipes
peuvent représenter le même pays.





Voici ce que j'ai réalisé

Image

A noter que le logiciel ne permet pas cette fonctionnalité, mais ma relation entre manche, équipe et résultat est en réalité une CIF pointé sur résultat.



Qu'en pensez vous ?


J'ai personnellement des doutes sur l'utilisation de Score et Temps dans Résultat, peut être serait il judicieux de séparer ceci avec une nouvelle entité pour spécifier le type de résultat ?
Le nomR correspond pour moi aux exigence de l'énoncé : càd médaille d'or, d'argent de bronze etc etc.
Je pense qu'une fois dans la BD ça peut s'implémenter, mais sur le mcd ce n'est pas explicitement compréhensible.



Merci à vous tous !
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !



Avatar de l’utilisateur
ampholyte
Membre Transcendant
Messages: 3940
Enregistré le: 21 Juil 2012, 07:03

par ampholyte » 11 Avr 2014, 09:19

Bonjour,

Je ne connais pas cette représentation de bdd mais je pense qu'il y a quelques problèmes.

Très souvent, il est intéressant de créer une table en plus pour gérer les liens entre deux tables.

Par exemple, il pourrait être intéressant de faire un lien entre les participants et les équipes.

Athletes_par_equipe avec id_equipe, id_athlete

Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 18:42

par Rockleader » 11 Avr 2014, 11:33

Justement, quand je passerait au MLD, la classe d'association appartenir nous donnera les informations en incluant idAthlète et IdEquipe comme clé primaire et étrangère.

Au final à la création de la table Appartenir sera une table.
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !

Avatar de l’utilisateur
ampholyte
Membre Transcendant
Messages: 3940
Enregistré le: 21 Juil 2012, 07:03

par ampholyte » 11 Avr 2014, 12:49

Ha d'accord, je comprends mieux alors. Je vais regarder un peu plus en détail quand j'aurais un peu de temps et je te dirais ce qui me "choque" ou non.

Avatar de l’utilisateur
fatal_error
Membre Légendaire
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

par fatal_error » 11 Avr 2014, 12:50

hello,

je suis un peu mitigé pour ma part.
- déjà, jour et lieu, pourquoi faire deux entités différentes. Je vois pas ce qui motive d'en faire deux séparées.
- Equipe obtient une manche, mais on sait pas qui perd la manche.
En plus on sait pas qui est l'athlète qui affronte l'autre...
De fait, pour ma part, j'enlève la relation Participer entre Athlete et Epreuve(on retrouve le lien part les manches). Je mets une relation Participer entre Athlète et manche (ne pas oublier qu'on peut avoir des 1v1 mais aussi des NvN), et on rajoute la relation Obtenir entre Athlète, manche et résultat.

Eventuellement, tu peux rajouter un lien entre Equipe et Obtenir pour savoir pour quelle equipe l'athlete a remporté la manche. (s'il appartient a plusieurs equipes différentes)

ps: on ne sait pas ou sont les medailles dans l'affaire.

edit: cela dit c'est ptet un peu technique, je me souviens pas trop du but du MCD
la vie est une fête :)

Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 18:42

par Rockleader » 11 Avr 2014, 14:59

- Equipe obtient une manche, mais on sait pas qui perd la manche.



Le sujet ne demande pas vraiment de stocker ça, d'autant que, ça demanderait d'interpréter la notion de perdre...est ce qu'on considère qu'on perd si on a pas la première place ? Si on est pas sur le podium ? etc etc

Pour ma part je n'ai pas voulu faire figurer cette information, à tord peut être.

- déjà, jour et lieu, pourquoi faire deux entités différentes. Je vois pas ce qui motive d'en faire deux séparées



Je me suis dit que de cette façon une épreuve pouvait se dérouler sur plusieurs jours (Par exemples commencer le 1er avril; mais ne pas pouvoir se terminer le jour même, l'épreuve serait donc sur plusieurs jours); et toujours dans cette logique, je me suis dis qu'il était tout à fait possible que pour une raison X ou Y la seconde partie de l'épreuve ne se déroule pas au même endroit.


Imagine le cas pas si improbable que ça d'une épreuve de ski, elle commence en soirée, mais ne peut pas se terminé parce que la nuit tombe.
Pendant la nuit merde, une avalanche et la piste devient impraticable, avec ma solution une même épreuve peut avoir lieu à différents endroits sur des jours différents.

C’est pour cela que j'ai séparé, mais là aussi peut être est ce à tord ?
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !

Avatar de l’utilisateur
fatal_error
Membre Légendaire
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

par fatal_error » 11 Avr 2014, 16:57

Le sujet ne demande pas vraiment de stocker ça

si:
Certains sports (d'hiver) oppose des équipes tels que le hockey glace ou le curling.

Dans l'énoncé:
leur résultat (temps/score pour chaque athlète/équipe associé)


Si tu gagnes un match de curling, tu veux savoir contre qui et combien à combien.

Concernant ton énoncé, il est un peu flou parce que
Certaines épreuves sont « simples » (en une manche), d’autres sont plus complexes et en
plusieurs manches (tournoi, ou épreuve à élimination directe par exemple)

On sait pas si la parenthèse "(tournoi, ou épreuve à élimination directe par exemple)" concerne les épreuves simples et les épreuves complexes ou juste les épreuves complexes.

Je pense que cette parenthèse concerne les deux car dans le hockey sur glace, tu as le résultat d'un match (sans notion de manches) donc une épreuve simple...

Bref, il faut faire un effort supplémentaire pour t'assurer que tu pourras bien modéliser l'épreuve (par exemple curling) et la notion de tournois pour la dite épreuve.

C’est pour cela que j'ai séparé, mais là aussi peut être est ce à tord ?

tu peux très bien faire une modèle avec une clé
Mais de toute façon ca c'est du détail, ce qui doit faire mal c'est la modélisation des épreuves.
la vie est une fête :)

Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 18:42

par Rockleader » 11 Avr 2014, 17:24

Si tu gagnes un match de curling, tu veux savoir contre qui et combien à combien.


Je stocke le temps et ou score dans résultat de même que la médaille dans nomR (je spécifierais à la création de la table que nomR c'est un nom de type enum avec la liste des médailles.

Je vais réfléchir à une modélisation possible pour retrouver quelle équipe à jouer contre quelle équipe.


Mais d'un autre coté si je ne modifiais pas, l'information pourrait toujours se retrouver par requête, des équipes qui auront jouer une même manche ou épreuve auront le même identifiant et on pourra toujours le retrouver.
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !

Avatar de l’utilisateur
fatal_error
Membre Légendaire
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

par fatal_error » 11 Avr 2014, 17:31

Un exemple:
Code: Tout sélectionner
épreuve(id épreuve)
 nom:string
 typeEpreuve:Tournoi ou Multi
 idType:
 //Multi pour les sports comme le bobsleigh ou c'est un oneshot ou seul le temps est important
 
/**
 Partie tournois
*/
Tournoi(idType)
 idMatch
 id précédent 1:idType
 id précédent 2:idType
 //comme un arbre, d'un match on connait les précédents...
   
Match(id équipe1, id équipe 2)
 id gagnant (vide au début): équipe
 id score:score
 
Score(id score, id manche)

Manche
  id gagnant: équipe
  id perdant:
  freeText:string
 
/**
 Partie Multi (bobsleigh, patinage etc)
 */
Multi(idMulti, id équipe)
 Résultat
 //ici, on est capable de lister les équipes et le résultat ce qui permet de les trier et d'attribuer les médailles
 
Résultat
 freeText (peut etre du temps, des nombre de points etc)


A noter: pour le biathlon, il convient de créer trois épreuves!
le biathlon, et chaque sous discipline du biathlon


Mais d'un autre coté si je ne modifiais pas, l'information pourrait toujours se retrouver par requête

si c'est le cas c'est suffisant
la vie est une fête :)

Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 18:42

par Rockleader » 11 Avr 2014, 17:51

si c'est le cas c'est suffisant


Ok alors c'est bon


Je peux avoir la relation qui dit

Equipe1 MancheX ==> Resultat N
Equipe2 MancheX ==> Resultat Y


On peut parfaitement regrouper que l'équipe 1 et l'équipe 2 ont toutes les deux participé à la me^me manche, il suffira dans la requête de mettre une condition qui dira que l'on veut les équipes correspondante pour un type de manche donné.
L'avantage c’est que si c'est un "match"; on aura que deux équipes et donc leur résultat l'une par rapport à l'autre.
Dans le cas d'un tournoi on aurait toutes les équipes du tournois avec leur résultats associés.

Donc certes ce n'est pas dissocié sur le schéma mais l'information peut je pense être retrouvé.
Bien entendu je peux me tromper.
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !

Avatar de l’utilisateur
fatal_error
Membre Légendaire
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

par fatal_error » 12 Avr 2014, 07:11

Dans le cas d'un tournoi on aurait toutes les équipes du tournois avec leur résultats associés.

comment tu sais si telles manches appartiennet à tel match ou pas?
comment tu détermines si l'équipe a perdu en finale, demi-finale?

si t'es capable d'y répondre, alors c'est pas trop mal.
la vie est une fête :)

Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 18:42

par Rockleader » 12 Avr 2014, 09:29

Pour moi dans le cas d'un tournoi, l'id d'épreuve correspondrait à celui du tournoi global

et l'id de la manche correspondrait à celui du match correspondant dans le tournoi



Actuellement je n'ai pas la possibilité de dire à quoi ça correspond, quart, demi ou finale

Je devrais peut être ajouter une association correspondre entre manche et une entité qui me donnerait le type de manche.
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !

Avatar de l’utilisateur
fatal_error
Membre Légendaire
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

par fatal_error » 13 Avr 2014, 00:02

et l'id de la manche correspondrait à celui du match correspondant dans le tournoi

c'est fumeux.
Tu changes le sens sémantique des choses pour enquiller ca dans la même "table" ou entité, alors que c'est pas pareil.
Tu fais quoi, si ton match est composé de plusieurs manches?

PS: le but de dire à quoi ca correspond quart/demi, etc, c'est double:
1: parce que dans un tournoi tu veux savoir c'est quoi l'avancement du tableau (facultatif car non demandé)
2: comment tu vas remettre tes médailles. (or+argent finale, bronze l'un des demi finalistes)
la vie est une fête :)

Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 18:42

par Rockleader » 15 Avr 2014, 17:39

Petite question, est il possible dans une contrainte de faire référence à une autre table ?


Genre j'ai un truc comme ça mais je sais pas si c'est "légal"

Code: Tout sélectionner
CREATE TABLE Manche
      (idM INTEGER,
      ...
      CONSTRAINT pk_Manche
         PRIMARY KEY (idM),
      CONSTRAINT fk_Epreuve_Manche
         FOREIGN KEY (idEp)
         REFERENCES Epreuve (idM)
      [COLOR=Red]CONSTRAINT ck_N°manche CHECK (N°manche <= 'SELECT nbManche from Epreuve'),[/COLOR]
   );
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !

Avatar de l’utilisateur
fatal_error
Membre Légendaire
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

par fatal_error » 15 Avr 2014, 18:00

hello,

en tout cas,
chez ms ca a l'air : http://technet.microsoft.com/en-us/library/ms188258%28v=sql.105%29.aspx
chez stack aussi :
http://stackoverflow.com/questions/13000698/sub-queries-in-check-constraint

Dans la grammaire sql aussi:
http://www.h2database.com/html/grammar.html
mais etrangement, tu peux pas faire de subquery, t'as l'air d'etre obligé de passer par une fonction sur le champ
la vie est une fête :)

Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 18:42

par Rockleader » 15 Avr 2014, 18:16

Pour être sur je vais passer par un ALTER TABLE il n'y aura pas d’ambiguïté comme ça.
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 10 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite