04-10-2011, 12:20 PM
(Modification du message : 04-10-2011, 01:21 PM par Sephi-Chan.)
(04-10-2011, 12:08 PM)Argorate a écrit : Salut Roworll, je comprends que tu puisses te servir des null, je ne cherche pas a critiquer ou dire que j'ai forcement raison, mais je vais tenter de te répondre:
(04-10-2011, 08:38 AM)Roworll a écrit : Il y a pourtant des cas ou le NULL signifie quelque chose.J'utilise souvent des timestamp et parfois des dates, enfin peu importe le format, dans un tel cas tu mets 0 (ou 0000-00-00).
Imaginons une table contenant la liste des Employés.
Pour des raisons administratives, il faut stocker la date d'arrivée et la date de départ. Tu mets quoi dans le champ Date de Départ à la création de l'enregistrement ?
Tu préfèrerais peut être rajouter une table pour stocker exclusivement cette information ?
(04-10-2011, 08:38 AM)Roworll a écrit : Ferais-tu de même pour toute information inconnue comme pour le champ NumEmprunteur de la table Livre dans ton exemple ?Justement, je pense que tous ces cas là peuvent être résolu via une convention. Une convention peu remplacer n'importe quel NULL dans l'absolue.
Autre question, les étudiants dont l'age n'est pas connu tu stockes quoi, 0, 99 ?
Et si on te demande justement de faire des moyennes sur l'age des étudiants, comment vas-tu exclure les valeurs inconnues ?
Le NULL te seras bien utile dans ce genre de cas.
Dans un monde parfait, tout le monde renseignerait correctement les champs de saisie. Mais c'est loin d'être le cas dans la réalité. Ne pas utiliser NULL c'est alors t'amener à créer d'autres règles tout aussi alambiquées pour gérer le cas de valeur non renseignées.
Concrètement, pour un age non renseigné, tu mets "-1" et ainsi tu l'exclue facilement de toute requête.
Après je ne connais pas tout les cas, il y a peut être des fois où tu n'as pas d'autres solutions, mais j'en ai pas eut l'utilité jusqu'ici.
Je vois absolument pas l'intérêt de mettre en place des conventions plutôt qu'utiliser la bonne valeur, en l'occurrence NULL. Autant s'en servir quand c'est approprié et les gérer comme il faut.
Si tu gères ton cas avec le -1, tu es obligé de modifier ta requête. Donc autant utiliser la valeur NULL qui a du sens, contrairement à une idiote qui corrompt des données avec des informations erronées.
SELECT AVG(age) FROM users WHERE age != -1;
SELECT AVG(age) FROM users;
Autant apprendre à utiliser NULL, ça évite de faire des choses qui n'ont pas de sens.
En mettant en place une convention inutile, tu compliques inutilement le code : il faut mettre le -1 par défaut ou la date 0000-00-00 00:00, puis traiter ce cas à l'affichage, etc.
C'est tellement amateur !