Bonjour,

Cette question m'obsède depuis quelques jours :

Lorsque l'on créé une base de données, il faut éviter de concevoir des tables avec des valeurs nulles. Ainsi, il est préférable d'utiliser plusieurs tables, liées par des index.

Mais si nous devons récupérer un certains nombre d'informations, réparties dans plusieurs tables, cela nous oblige à exécuter plusieurs requête au lieu d'une.

Comme je ne suis pas sûr d'être bien clair, je vais donner un exemple :

Imaginer une table contenant les champs suivants :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
id    pseudo    passe    email    site
L'adresse email et le site étant facultatifs (pour l'exemple), je vais me retrouver avec une table contenant des valeures nulles.

Mieux vaudrait donc procéder ainsi :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
Table 1 :
 
id    pseudo    passe
 
 
Table 2 :
 
id    email    site
Les 2 tables ci-dessus étant "liées" par les champs id.

Maintenant, je veux récupérer les pseudo, passe, email et site.

Dans le premier cas, une simple requête suffit :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
SELECT pseudo, passe, email, site FROM ma_table WHERE id=monID;
Mais dans le deuxième cas, la reqête est plus complexe (à peine mais c'était pour l'exemple), ou alors on peut faire 2 requêtes SELECT interrogeants les tables 1 et 2.

Ma question est la suivante :

(notez bien que je viens de décrire qu'un exemple, mais pour que les choses soient significatives, il faut imaginer une structure nettement plus complexe)

En terme d'optimisation (notamment côté serveur sql), quel choix faut-il prendre : accepter des valeurs nulles dans les tables pour simplifier les requêtes, ou construire ses tables correctement quit à utiliser des requêtes plus complexes ?

Merci pour vos avis avisés !! (j'espère avoir été clair...)