Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Bibliothèque

2 réponses
Avatar
Yannick VOYEAUD
This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--76bDiC5SSCcwRi379BxqLAED9LLvMWeEO
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

Bonjour,

Si vous trouvez un meilleur titre mettez-le.

Voici mon soucis:
Gestion d'une biblioth=E8que
Certains ouvrages comportent plusieurs auteurs

J'ai cr=E9e une table sp=E9cifique pour les auteurs
Dans la table principale que me conseillez-vous de faire et pourquoi?
1) Un seul champ auteur avec s=E9paration par des virgules (ou autres (et=

pourquoi))
2) Autant de champs auteurs que n=E9cessaire (en changeant le nom bien s=FB=
r)

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

Vos r=E9ponses me seront utiles pour d'autres champs qui sont aussi dans
ce cas de figure mais que j'ai trait=E9 avec une valeur g=E9n=E9rique peu=

satisfaisante =E0 mon g=F4ut.

Merci de mettre des exemples comment=E9s car je m'essaye aux jointures et=

c'est plut=F4t neuf pour moi.

Amiti=E9s

--=20
Yannick VOYEAUD
Nul n'a droit au superflu tant que chacun n'a pas son n=E9cessaire
(Camille JOUFFRAY 1841-1924, maire de Vienne)
http://www.voyeaud.org


--76bDiC5SSCcwRi379BxqLAED9LLvMWeEO
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="signature.asc"

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.12 (GNU/Linux)
Comment: Using GnuPG with Icedove - http://www.enigmail.net/

iQEcBAEBAgAGBQJUEE39AAoJEGnJBaLV5Tw9s4UIAILnnXrkmT9gEG0TKEZeNpuM
eNjzL5pqf7MPRpNsICQvEy5NUMc0zRhrCWu5aQF6NTEJHcwinMFj0ZU6PFWzwvnt
80oXUFq24TneX9s8DLe17wj6rW6S8gfV9N6/64K3+F6PMqyr14z1eo7pqjMlkG5A
b7bsYXFlQqRvfC4W+RsjFPP/AyYD2Mx90WGAZkYmh6MeXWkrhj8rCIWDyImcM1/2
7wfMXJraTpe6bAM0250Nmj5QrfLqbp4sxNiSxDBjlSzUz/nW5kXNgLO3/mrENH/F
glOksZqwtLQTANSUbqL2yRhT7EXeDOB9+FrRrxYwQUS8z3pWcHQxPEIEMQZ7L8M=
=h8YH
-----END PGP SIGNATURE-----

--76bDiC5SSCcwRi379BxqLAED9LLvMWeEO--

2 réponses

Avatar
Denis Beauregard
Le Wed, 10 Sep 2014 15:11:24 +0200, Yannick VOYEAUD
écrivait dans fr.comp.lang.php:

Bonjour,

Si vous trouvez un meilleur titre mettez-le.



Catalogue de livres ?
et pour le groupe sur les bases de données peut-être ?

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)



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.

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.

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
Avatar
Eric Demeester
Bonjour,

Yannick VOYEAUD (Wed, 10 Sep 2014 15:11:24 +0200 - fr.comp.lang.php) :

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
de bases de données :

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.

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.

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

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.

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.

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 :)