8791 sujets

Développement web côté serveur, CMS

Pages :
(reprise du message précédent)

QuentinC a écrit :

Heu... désolé de ramener un contre exemple, mais que fais-tu si tu dois stocker un array de taille variable dans un champ ?
Si on sait qu'on utilise toujours tous les éléments du tableau quand on en a besoin, pour moi, un type text avec de l'implode/explode fonctionne très bien.
Dans un tel cas pourquoi créer une nouvelle table avec deux champs et s'embêter avec deux requêtes au lieu d'une ? ridicule je trouve.


C'est un très mauvais exemple. Smiley lol Ça me fait exactement le même effet que si tu m'avais dit "Pourquoi s'embêter à mettre un <h1> pour un titre alors que ça marche très bien avec un <font>? Ridicule, je trouve." Smiley biggol

La modélisation de base de données est probablement la matière la plus théorisée et formalisée en informatique. Respecter ces quelques règles, même si à priori on ne voit pas pourquoi, peut éviter de s'arracher les cheveux à postériori, le jour où on a besoin de modifier la base, ou l'application.

Je plussoie yodaswii : arrêtez de ménager le moteur de base de données, il est là pour ça.
Il faudra que vous m'expliquiez pourquoi vous dites que plus la requête est complexe plus le SGBD est efficace.
Vous voulez dire quoi par là : la sélection est plus rapide ? Ca me paraît paradoxal.

Bon, pour causer BDD, je ne suis pas bien placé, mon hébergeur a encore la 3.23...
Un peu plus de précisions sur :
a écrit :
Dans un tel cas pourquoi créer une nouvelle table avec deux champs et s'embêter avec deux requêtes au lieu d'une ? ridicule je trouve.


Réponse pour éviter la "perte de données", je m'explique.

Considérons que QuentinC, Lanza et moi sommes dans la même entreprise. Cette entreprise a mis en place une base de données pour la gestion de son personnel (3 salariés dans 3 services différents).

D'où la table Salarié (Nom salarié et service salarié) suivante :
Lanza - Service informatique
QuentinC - Service communication
YodaSWII - Service comptabilité

QuentinC a trouvé un poste plus intéressant dans une entreprise concurrente, il quitte notre société. Donc une suppression de QuentinC est effectuée et désormais le service communication n'a plus d'existence en base alors que dans la réalité il est toujours là ...

a écrit :
... plus la requête est complexe plus le SGBD est efficace.

Je répond aussi à ça. J'ai annoncé ça un petit peu à la va vite ... c'est quelque peu plus complexe que ça. Plusieurs facteurs rentrent en compte : choix du sgbd (les performances sont différentes d'un sgbd à l'autre), configuration du serveur sgbd, celle de la base elle-même et le volume de données (et je dois en oublier). Pour faire simple (bien que le raccourci est facile ...), un sgbd est prévu/optimisé pour gérer un volume de données important donc il se révelera plus efficace sur un traitement touchant de nombreux enregistrements que quelques enregistrements (pour peu que les scripts exécutés soient bien pensés). Smiley cligne
J'ai pas compris où tu voulais en venir avec ton exemple d'entreprise ?

Quand je posais la question performance, c'est en partant du principe qu'il s'agit d'un SGBD standard MySQL (Postgresql est sûrement plus performant c'est évident)
QuentinC a écrit :
Il faudra que vous m'expliquiez pourquoi vous dites que plus la requête est complexe plus le SGBD est efficace.
Vous voulez dire quoi par là : la sélection est plus rapide ? Ca me paraît paradoxal.


Non pas tout à fait. Mais disons que le temps nécessaire à l'exécution de la requête n'est pas driectement proportionnel à sa complexité. C'est à dire qu'une requête 2 fois plus complexe qu'une autre ne mettra pas 2 fois plus de temps. Les SGBD sont faits et pensés pour traiter des grandes quantités de données, qu'on atteint rarement avec nos sites, d'ailleurs.
C'est vrai que pour avoir fait des changement sur mes formulaires d'insertion et de modifications (j'ai eu droit a "ascenseur", et "meublée" en plus Smiley ravi plus deux trois autres modifs sur des champs existant), avec tous les champs ce fut asser rapide à modifier, puisque je n'avait quasiment qu'a ajouter les champs et à mettre des resquest() dans mes scripts, mais aucun traitement complexe à modifier.

En plus finalement sur le serveur en ligne ça tourne super, c'est aussi qu'il faut que je songe à changer de bécane un jour...

Par contre pour revenir au type de champs, si c'est pas TEXT pour un champs 20 lignes maxi ce serait varchar(20) ou mediumtext ou ni l'un ni l'autre?
Modifié par matmat (24 Jun 2007 - 01:39)
Si il s'agit de 20 lignes, varchar(20) n'est pas fait pour (il s'agit d'un mécanisme d'optimisation de stockage en base : c'est à dire un mot/une expression de 20 caractères maximum mais qui peut en contenir aussi moins ; dans ce cas on utilise l'espace nécessaire au stockage et pas celui de 20 caractères).

En ce qui concerne TEXT et MEDIUMTEXT, pour ce que j'en sais le premier est une zone de texte standard (65 535 caractères. maximum) le deuxième est une zone de texte moyenne (16 millions caractères. maximum).

Donc à toi de voir mais je pense que TEXT dans ton cas doit être amplement suffisant, non ? Smiley cligne
Sinon, il y a tinytext aussi... 255 caractères max.

a écrit :

Pour l'exemple, il servait uniquement à montrer l'utilité d'avoir une "table à deux champs"

Alors je n'ai pas compris.
a écrit :
Alors je n'ai pas compris.


C'était juste pour dire que des tables à deux champs (clef primaire + libellé) sont plus utiles qu'il n'y parait. En fait, la suppression/modification d'un enregistrement de la table impacte aussi les informations qui devraient être dans une autre table.
Modifié par yodaswii (24 Jun 2007 - 13:16)
matmat a écrit :
Par contre pour revenir au type de champs, si c'est pas TEXT pour un champs 20 lignes maxi ce serait varchar(20) ou mediumtext ou ni l'un ni l'autre?
Salut,

D'après ce que j'avais compris de la structure de ta table il me semblait que plusieurs de tes champs avaient une longueur maximale, auquel cas j'aurais utilisé VARCHAR(xx), que d'autres représentaient des nombres entiers (comme un nombre de chambres) auquel cas j'aurais utilisé TINYINT(x) (par exemple 2), que d'autres représentaient des surfaces auquel cas j'aurais utilisé DECIMAL(x,x) (par exemple 4,2) et que d'autres représentaient des booléens (O/N) auquel cas j'aurais utilisé soit TINYINT(1) soit (un que j'aime bien dans ces cas-là) ENUM('O','N')... Plus éventuellement des "petites" descriptions auquel cas j'aurais utilisé TINYTEXT.

Comme dans ta phrase tu parles de 20 lignes ça me met un peu le doute mais peut-être s'agit-il d'une "faute de frappe" et que tu voulais dire 20 caractères Smiley langue ?

A+
Si pardon c'est bien 20 caractéres, et autre erreur je me suis tromper sur mediumtext, je pensais bêtement que c'était texte moyen Smiley lol .

Donc pour cuisine : equipée | basique | non-equipée, ce serait varchar(20) ou tinytext?

Pour les surfaces le probléme c'est que la personne peut insérer 200 comme 200m2 comme 200m² et j'ai pas trop envie de mettre des traitements avec des expressions réguliéres, au cas ou la personne veut rentrer "3 terrains de 200m²". La surface ne serat pas un critére de recherche, donc je n'ai pas de raison de limiter à des nombres pour l'instant.

Quand il y a des listes par exemple oui/non c'est plus facile donc je peux effectivement rentrer 0 ou 1.

Par rapport au tableau à 2 champs je comprend leur utilisation dans le cadre par exemple d'un association auteur/article ou mot-clés/article, parceque l'auteur peut être lié a d'autres articles et l'article à d'autres auteurs.

Mais dans le cas d'une fiche immobilier est ce que ce serait interressant d'avoir une table immo_cuisine, avec l'id du bien, plus oui, non, ou autre chose pour la cuisine?

L'avantage ce serait d'avoir moins de champ dans ma table immo par contre j'aurais plein de tables, immo_piscine, immo_cuisine, immo_ascenseur etc...
Modifié par matmat (25 Jun 2007 - 02:19)
Voilà je viens de finir, donc un grand merci Smiley smile !

Finalement :
- j'ai tout d'abord optimisé les tables en mettant les types appropriés.
- Pour certains champs, par exemple les rangs du prix et le type de bien (maison, terrain) j'ai fait des tables à part a deux champs ce qui permet d'optimiser la recherche et facilite le classement.
- J'ai également amélioré les requetes

Voilà la premiére version www.goldone.com.mx.

Il me reste plein de chose améliorer, notament des modules js un peu foireux mais dans l'ensemble ça prend forme
Modifié par matmat (28 Jun 2007 - 16:31)
Pages :