organisation de base de données mysql

gaston gaston
1 471 contributions
Membre depuis le 01/03/2001
Envoyé le 02/03/2018 à 16:43 Modifié par gaston


Bonjour,

je gère un site d'aide au chant pour une chorale: j'ai donc des tableaux avec les fichiers de morceaux musicaux.
Pour chaque concert qui doit avoir lieu, il faut un tableau avec les fichiers des morceaux concernés par ce concert pour que les gens puissent les travailler .
J'avais donc fait une table morceaux et une table concert et mes tableaux se construisaient en php à partir de ces deux tables.
la table morceaux contient entre autre un champ "id", un champ "concert" et un champ "num_passage", et un champ "prog" , ainsi je peux aussi sortir un tableau avec tous les morceaux programmés, et aussi un tableau avec les morceaux non programmés.
il y a d'autre part les champs avec l'adresse des fichiers d'aide pour le morceau.
là où ça se complique un peu, c'est lorsqu'il y a plusieurs concerts de prévus, avec des morceaux communs, et là je me vois mal rajouter d'autre champs à ma table morceaux.
Qui plus est, dans la table t_morceaux,

Je me doute qu'il faudrait peut-être une table intermédiaire, mais j'ai un peu de mal à voir comment ça fonctionnerait, vous pourriez m'aiguiller un peu svp ?
Je pense qu'il va falloir que je revois toute l'organisation de ma base, à faire, non ?
Merci

carpe diem
Bipbipcoyote Bipbipcoyote
2 934 contributions
Membre depuis le 06/03/2001
Envoyé le 03/03/2018 à 12:02


Bonjour,
oui, il te faut une table intermédiaire... imaginons le schéma suivant
à gauche une t_concerts dans laquelle le concert est identifié de manière unique (par exemple id_concert, nom, date)
à droite une t_morceaux dans laquelle les morceaux sont identifié de manière unique (par exemple id_morceau, titre)
au centre une t_programmations qui va recueillir plusieurs fois id_concert et plusieurs fois id_morceau) (par exemple (id_programmation (unique) id_concert (plusieurs fois) id_morceau(plusieurs fois)) grâce aux id tu peux aller rechercher les infos détaillées
voici un fichier access qui illustre mon explication
Visitez mon Site Google est mon ami, il répond mieux que moi, posez lui d'abord vos questions
Bipbipcoyote Bipbipcoyote
2 934 contributions
Membre depuis le 06/03/2001
Envoyé le 03/03/2018 à 12:05



Bonjour,

Visitez mon Site Google est mon ami, il répond mieux que moi, posez lui d'abord vos questions
gaston gaston
1 471 contributions
Membre depuis le 01/03/2001
Envoyé le 03/03/2018 à 12:11 Modifié par gaston


Bonjour,

j'ai avancé:

J'ai donc fait une table morceaux, une table concert et une table intermédiaire qui permet de mixer les 2. Mes tableaux se construisent en php à partir de ces 3 tables.

- la table concert contient les champs "id_concert", "concert", "style", "commentaire"
- la table morceaux contient, en plus des champs qui contiennent l'adresse des fichiers d'aide: "tenor", "soprano", "alto", "basse", "partition",
les champs "id_morceau", "prog" , "nouveau"
- la table t_mc contient les champs "id_mc", "id_morceau", "id_concert", "num_passage"
ainsi je peux sortir différents tableaux et notamment
fichiers concerts (prog=oui et concert renseigné).
pour ce tableau, j'utilise la requête suivante:

SELECT * FROM t_morceaux
INNER JOIN t_mc ON t_mc.id_morceau = t_morceaux.id_morceau
INNER JOIN t_concerts ON t_mc.id_concert = t_concerts.id_concert
WHERE t_mc.id_concert= \'' . $_GET['id_concert'] . '\'

et aussi ces autres tableaux:
tous les fichiers (prog non renseigné) où là j'utilise la requête

SELECT * FROM t_morceaux

parce que sinon, ça ne m'affiche que les morceaux qui ont au moins un concert

fichiers archives (prog=non)

SELECT * FROM t_morceaux WHERE prog="oui"

mais pour les derniers j'ai un petit souci:
année en cours (prog=oui)
nouveaux morceaux (nouveau=oui)

en effet, si j'utilise une requête sans jointure je n'ai pas les nom de concerts qui s'affichent, et si j'utilise les jointures, ça ne m'indique que les morceaux ayant un concert, or il peut y avoir par exemple un morceau nouveau qui ne soit pas prévu dans un concert.
Comment contourner cela ?

carpe diem
Bipbipcoyote Bipbipcoyote
2 934 contributions
Membre depuis le 06/03/2001
Envoyé le 03/03/2018 à 12:12 Modifié par Bipbipcoyote


tu peux alors créer un formulaire qui affiche le nom du concert, un sous-formulaire qui reprend les infos de la t_programmations et aussi le titre des morceaux grâce à la relation existant entre les 2 tables, sur cette image on constate que le concert n°2 comprend 2 morceaux (le 3 et le 1)... Le reste est une question de design du formulaire on peut masquer ou afficher d'autres infos


nos réponses se mélangent. Ceci est une partie de ma réponse développée au dessus de ton dernier post
Visitez mon Site Google est mon ami, il répond mieux que moi, posez lui d'abord vos questions
Bipbipcoyote Bipbipcoyote
2 934 contributions
Membre depuis le 06/03/2001
Envoyé le 03/03/2018 à 12:21 Modifié par Bipbipcoyote


Bonjour,
where prog = ""
ou where is_null(prog)
ou un truc du même genre
ou tu imposes une valeur par defaut 0, par exemple et tu peux alors utiliser cette valeur pour retrouver ta prog
where prog = "0"
Visitez mon Site Google est mon ami, il répond mieux que moi, posez lui d'abord vos questions

Discussion trop ancienne

Cette discussion a été automatiquement fermée car elle n'a plus reçue de nouveau message depuis trop longtemps.

Nous vous suggérons de créer un nouveau message

« Retour sur la liste des messages de ce forum