Bonjour à tous pendant mes études pour l'examen mysql
, j'ai rencontré cette question lors d'un examen précédent.
Les informations sur la distance parcourue jusqu'à présent par chaque camion sont non plus nécessaire. Au lieu de cela, nous aimerions stocker des informations sur le état actuel d'un camion. Un état peut être soit Disponible , Utilisé ou Maintenu
Cette partie du statut de la question est de savoir où je suis un peu coincé. Ma seule idée pour résoudre ce problème serait d'utiliser une clause where ou de définir une valeur de chaîne entre 4 et 9. Une autre idée que j'ai juste eue comme peut-être utiliser une contrainte de vérification?
3 Réponses :
Déplacez le statut vers un autre statut de table (id, nom) et stockez status_id dans les camions en tant que clé étrangère pointant vers l'un de ces
status(1, 'available') status(2, 'used') status(3, 'maintained')
La meilleure façon de procéder serait de créer une table séparée contenant l'état disponible, puis d'implémenter une clé étrangère entre la relation trucks
et la relation status
: < pre> XXX
Certaines personnes diraient d'utiliser un Type ENUM . Cependant, moi (et beaucoup d'autres DBA avec lesquels j'ai travaillé) détestons personnellement le type ENUM. En utilisant un ENUM, vous déplacez les données d'où elles appartiennent aux métadonnées de la table, la mise à jour de la liste est une opération très coûteuse, il est difficile d'obtenir toutes les valeurs disponibles de votre application, vous ne pouvez pas stocker d'informations supplémentaires avec elle, etc. < / p>
MySQL n'applique pas les contraintes de vérification. Nous pourrions créer des déclencheurs BEFORE INSERT et BEFORE UPDATE. Le déclencheur pourrait vérifier la valeur affectée à la colonne
status
(par exempleIF NEW.status IN ('Available', 'Used', 'Maintained') ALORS
ne rien faire, et permettre à l'instruction de se poursuivre, sinon, déclencher une exception pour provoquer l'arrêt du traitement de l'instruction. Une autre alternative (en supposant le moteur de stockage InnoDB) consiste à définir une contrainte de clé étrangère sur une table de domaine, contenant l'ensemble des valeurs valides. Ensuite, lorsque nous essayez d'insérer / mettre à jour une ligne avec une valeur de statut incorrecte, une erreur sera générée.Pourquoi «entre 4 et 9» - c'est six valeurs?