Bonjour,
Je vais bientôt devoir développer une grosse application.
J'ai lu un tutoriel qui explique une nouvelle manière de concevoir un schéma de base de données, il disait de créer des tables par types de donnée exemple :
table "adresse" : ID, voie, suite, code_postal, ville
table "telephone": ID, indicatif, n1, n2, n3, n4, n5
table "email": ID, nom, domain
table "personne" : ID, nom, prenom, ID_ADRESSE, ID_TELEPHONE, ID_EMAIL
Et plus par le métier exemple :
table "personne" : ID, nom, prenom, voie, suite, code_postal, ville, telephone, email
Il disait que ça permettait d'éviter d'avoir trop d'index, pour faire des statistiques plus facile, et pour faire évoluer un type de donnée plus facilement, exemple :
On rajoute BIS aux adresses d'un coup, la totalité de mes adresses dans mon application aura la gestion du BIS.
Si je veux avoir tous les numéros commençant par 06.
etc...
J'avoue que je trouve ça génial, mais mon application va avoir des listings qui vont dépasse le million de lignes.
Bien sûr, je vais faire une pagination de 100 lignes par page.
Mon problème vient du tri, ils doivent pouvoir faire le tri par téléphone, adresse ou email, ....
Sauf que l'adresse, le téléphone et l’e-mail ne sont pas obligatoire.
Donc je vois certaines solutions, mais j'aimerais que vous me disiez laquel serais la meilleure :
1re solution : les left join, je n'aime pas cette méthode, car les left join font ralentir considérablement les requêtes sql.
2e solution : mettre des données à vide dans les tables telephone, email, adresse, peut être rajouter un champ tel que :
table "adresse" : ID, renseigner, voie, suite, code_postal, ville
table "telephone": ID, renseigner, indicatif, n1, n2, n3, n4, n5
table "email": ID, renseigner, nom, domain
3e solution : récupérer en PHP et faire le tri en PHP, mais je ne pourrais pas utiliser LIMIT
4e solution : faire des vues avec des unions avec toutes les alternatives (personne s'en rien, personne avec telephone, personnel avec email, personne avec telephone et email, ...)
Mais ça risque d'être compliqué à force.
pour moi la meilleur solution est la 2ième, aujourd'hui on a des disque dur énorme.
Si vous avez d'autres solutions, je suis preneur.
Cordialement Jérémy.
Partager