0
votes

Comment autoriser une colonne à être égale à seulement 1 des 3 valeurs

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?


2 commentaires

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 exemple IF 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?


3 Réponses :


1
votes

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')


0 commentaires

0
votes

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>


0 commentaires