Discussion:
Bibliothèque
(trop ancien pour répondre)
Yannick VOYEAUD
2014-09-10 13:11:24 UTC
Permalink
Bonjour,

Si vous trouvez un meilleur titre mettez-le.

Voici mon soucis:
Gestion d'une bibliothèque
Certains ouvrages comportent plusieurs auteurs

J'ai crée une table spécifique pour les auteurs
Dans la table principale que me conseillez-vous de faire et pourquoi?
1) Un seul champ auteur avec séparation par des virgules (ou autres (et
pourquoi))
2) Autant de champs auteurs que nécessaire (en changeant le nom bien sûr)

Dans le cas 1 comment procéderiez-vous pour interroger la base sachant
que je dois pouvoir afficher selon la demande
a) un auteur avec TOUS les ouvrages où il est participant
b) un ouvrage avec TOUS les auteurs concernés

Vos réponses me seront utiles pour d'autres champs qui sont aussi dans
ce cas de figure mais que j'ai traité avec une valeur générique peu
satisfaisante à mon gôut.

Merci de mettre des exemples commentés car je m'essaye aux jointures et
c'est plutôt neuf pour moi.

Amitiés
--
Yannick VOYEAUD
Nul n'a droit au superflu tant que chacun n'a pas son nécessaire
(Camille JOUFFRAY 1841-1924, maire de Vienne)
http://www.voyeaud.org
Denis Beauregard
2014-09-10 13:46:21 UTC
Permalink
Le Wed, 10 Sep 2014 15:11:24 +0200, Yannick VOYEAUD
Post by Yannick VOYEAUD
Bonjour,
Si vous trouvez un meilleur titre mettez-le.
Catalogue de livres ?
et pour le groupe sur les bases de données peut-être ?
Post by Yannick VOYEAUD
Gestion d'une bibliothèque
Certains ouvrages comportent plusieurs auteurs
J'ai crée une table spécifique pour les auteurs
Dans la table principale que me conseillez-vous de faire et pourquoi?
1) Un seul champ auteur avec séparation par des virgules (ou autres (et
pourquoi))
2) Autant de champs auteurs que nécessaire (en changeant le nom bien sûr)
2 questions :

D'abord, y a-t-il intérêt à rechercher 2 auteurs en même temps ?
Je dirais que non.

Ensuite, y a-t-il des auteurs homonymes ? Dans le catalogue d'une
bibliothèque nationale, on peut trouver des auteurs homonymes et il y
a parfois la date de naissance ou de décès pour les distinguer.

Je ferais 3 tables : auteurs, livres et auteurs_livres, chaque
auteur et livre ayant un numéro de référence. Les auteurs peuvent
avoir une année de naissance et de décès, mais aussi d'autres
informations comme le courriel, la région, etc. À partir d'une
recherche par auteur, on pourrait alors montrer les livres de
chacun.

L'inconvénient à une seule table, à mon avis, c'est que si on
recherche un auteur avec un nom partiel et un prénom partiel,
on pourrait avoir trop de faux résultats. Par exemple, je recherche
un Jean Martin, et je trouve une fiche avec Jean Dupont; Pierre
Martin.
Post by Yannick VOYEAUD
Dans le cas 1 comment procéderiez-vous pour interroger la base sachant
que je dois pouvoir afficher selon la demande
a) un auteur avec TOUS les ouvrages où il est participant
b) un ouvrage avec TOUS les auteurs concernés
Il y a des ouvrages collectifs. Un directeur de publication et
par exemple 10 ou 20 auteurs d'articles. Cela devient lourd à
gérer si on veut isoler ensuite les oeuvres d'un auteur.
Post by Yannick VOYEAUD
Vos réponses me seront utiles pour d'autres champs qui sont aussi dans
ce cas de figure mais que j'ai traité avec une valeur générique peu
satisfaisante à mon gôut.
Merci de mettre des exemples commentés car je m'essaye aux jointures et
c'est plutôt neuf pour moi.
Je regarderais quelques bibliothèques en ligne. J'aime bien le
catalogue Iris de la BAnq, http://iris.banq.qc.ca/iris.aspx puis
recherche avancée.

En saisissant mon nom, je trouve des homonymes nés en 1943 et 1958.
En cliquant sur un livre au hasard puis sur l'auteur, je trouve
les autres avec le même auteur, donc sans les homonymes.


Denis
Eric Demeester
2014-09-10 14:00:39 UTC
Permalink
Bonjour,
Post by Yannick VOYEAUD
Si vous trouvez un meilleur titre mettez-le.
Pour moi, il s'agit plus d'un problème de modélisation d'une structure
de bases de données que de PHP, qui aurait plus eu sa place dans le
groupe consacré aux SGBD, mais bon.

Voici comment je procéderais avec MySQL, sachant qu'il y a à peu près
autant de solutions que de développeurs, et d'autres moteurs de gestion
Post by Yannick VOYEAUD
Gestion d'une bibliothèque
Certains ouvrages comportent plusieurs auteurs
J'ai crée une table spécifique pour les auteurs
Dans la table principale que me conseillez-vous de faire et pourquoi?
1) Un seul champ auteur avec séparation par des virgules (ou autres (et
pourquoi))
Un champ comportant les informations délimitées par un séparateur,
pourquoi pas, ça permet d'avoir un nombre d'auteurs variable ; mais
c'est pénible ensuite en termes de traitement et d'interrogation.
Post by Yannick VOYEAUD
2) Autant de champs auteurs que nécessaire (en changeant le nom bien sûr)
Dans ce cas, tu t'imposes un nombre fini d'auteurs, disons 5, ce qui a
deux inconvénients :

- dans la plupart des cas, il n'y en a qu'un, donc tu vas trimballer
inutilement des variables vides ;
- si par malheur tu as 6 auteurs, ça coince.
Post by Yannick VOYEAUD
Dans le cas 1 comment procéderiez-vous pour interroger la base sachant
Je ne procèderai pas parce que c'est le bronx :)

Je créerais 3 tables :

- une table des ouvrages ;
- une table des auteurs ;
- une table de liaison ouvrages/auteurs.

- Table des auteurs : auteurs

aut_id : identifiant unique (éventuellement l'auto-incrément)
aut_nom : le nom de l'auteur
aut_prenom : le prénom de l'auteur
etc.

- Table des ouvrages : ouvrages

ouv_id : indentifiant unique (éventuellement l'auto-incrément)
ova_id : identifiant unique de l'ouvrage dans la table de
liaison
ouv_titre : le titre de l'ouvrage
ouv_categorie : sa catégorie
ouv_resume : un bref descriptif
etc.

- Table de liaison : ouvrages_auteurs

ova_id : identifiant unique (éventuellement l'auto-incrément)
ova_ouv_id : (=ouv_id) identifiant de l'ouvrage
ova_aut_id : (=aut_id) identifiant de l'auteur
Post by Yannick VOYEAUD
que je dois pouvoir afficher selon la demande
a) un auteur avec TOUS les ouvrages où il est participant
-> Interrogation de la table des auteurs
-> récupération de son identifiant unique
-> interrogation de la table de liaison
-> recherche de toutes les occurrences de l'identifiant unique de
l'auteur
-> Pour chaque occurrence, lecture de la table des ouvrages et
affichage de l'ouvrage.
Post by Yannick VOYEAUD
b) un ouvrage avec TOUS les auteurs concernés
-> Interrogation de la table des ouvrages
-> récupération de son identifiant unique
-> interrogation de la table de liaison
-> recherche de toutes les occurrences de l'identifiant unique de
l'ouvrage
-> Pour chaque occurrence, lecture de la table des auteurs et
affichage de l'auteur.
Post by Yannick VOYEAUD
Merci de mettre des exemples commentés car je m'essaye aux jointures et
c'est plutôt neuf pour moi.
Tu as la logique, si elle te convient, il ne te reste plus qu'à coder :)
Loading...