Définition d’un domaine en plage de valeurs.

Eléphant du PHP | 114 Messages

18 juin 2007, 17:22

Bonjour à tous,

Je cherche à optimiser ma BDD MySql et j'aimerai définir une plage de valeur. J'ai vu que c'était possible dans un de mes cours sur la modélisation logique des données mais je ne sait comment faire en mysql :
Définition d’un domaine en plage de valeurs; ex. cliAge : [0, 120]
Merci d'avance :D

Mammouth du PHP | 19672 Messages

18 juin 2007, 18:57

Alors tant qu'à optimiser, voici un conseil pratique :
Ne JAMAIS stocker une valeur calculée dans une base de données. Ici, on dirait que tu voudrais enregistrer un âge : la valeur qui sera enregistrée ne sera bonne qu'au moment de l'enregistrement et obsolète dans les minutes qui suivent. Donc on enregistre une date de naissance et on détermine l'âge par calcul sur la base de cette donnée, soit directement dans la requête soit par programmation après avoir récupéré ladite donnée :)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 332 Messages

19 juin 2007, 10:23

C'est marrant, mais je viens à l'instant de remplir une enquête de satisfaction client et ils me demandaient mon âge. Pas ma date de naissance. Je pense qu'il est imprudent de dire "Jamais", cela dépend de l'application.

Sinon, pour en revenir au problème, dans MySQL, il y a une syntaxe

Code : Tout sélectionner

create table ... check(expression)
Mais elle ne semble fonctionner qu'avec les tables InnoDB et encore, je n'ai jamais trouvé dans la doc où cette syntaxe était expliquée (mais cela ne veut pas dire que cela n'existe pas).

Sinon, depuis MySQL 5.0.2 et quelque soit le moteur, tu as la possibilité de poser des triggers sur une table qui te permettront de remettre l'âge dans l'intervalle désiré. Regarde l'exemple en bas de cette page
http://dev.mysql.com/doc/refman/5.0/fr/ ... ggers.html