Comment limiter une valeur de colonne dans SQLite / MySQL
Je voudrais limiter la valeur d'une colonne dans une table SQL. Par exemple les valeurs de la colonne ne peut être que "voiture" ou "vélo" ou "van". Ma question est de savoir comment atteindre cet objectif en SQL, et est-ce une bonne idée sur la DB côté ou devrais-je laisser l'application de limiter la saisie.
J'ai également l'intention d'ajouter ou de supprimer d'autres valeurs dans le futur, par exemple "camion"
Le type de Bases de données j'utilise sont SQLite et MySQl
source d'informationauteur Maro | 2011-06-16
Vous devez vous connecter pour publier un commentaire.
Ajouter une nouvelle table contenant ces moyens de transport, et faire de votre colonne de la clé étrangère de la table. De nouveaux moyens de transport peuvent être ajoutés à la table à l'avenir, et votre colonne de la définition reste la même.
Avec cette construction, je voudrais définitivement choisir les réglementer au niveau de DB, plutôt que celle de la demande.
Pour MySQL, vous pouvez utiliser l'ENUM type de données.
Voir De Référence de MySQL: Le Type ENUM
Pour ajouter à cela, je trouve qu'il est toujours préférable de se restreindre sur la DB côté ET sur l'app côté. Un Enum plus d'une boîte de sélection et vous êtes couvert.
Oui, il est recommandé d'ajouter des contraintes check. Vérifier les contraintes sont utilisées pour s'assurer de la validité des données dans une base de données et pour assurer l'intégrité des données. S'ils sont utilisés au niveau base de données, les applications qui utilisent la base de données ne sera pas en mesure d'ajouter des données non valides ou modifier des données valides de sorte que les données devient invalide, même si l'application elle-même accepte des données non valides.
Dans SQLite:
Dans MySQL:
Vous devez utiliser une contrainte de vérification. Dans SQL Server, il fonctionne comme ceci
Je ne suis pas sûr si cela est conforme à la norme ANSI mais je suis certain que MySQL a un semblable construire.
Si vous voulez aller avec DB-validation côté, vous pouvez utiliser des déclencheurs. Voir cette pour SQLite, et ce détaillée comment pour MySQL.
Donc, la question est vraiment de savoir si vous devez utiliser la Base de données de validation ou pas. Si vous avez plusieurs clients, qu'ils sont différents programmes, ou plusieurs utilisateurs (avec éventuellement des différentes versions du programme), puis va dans la base de données de l'itinéraire est certainement le meilleur. La base de données est (je l'espère), centralisée, de sorte que vous pouvez dissocier certains détails de la validation. Dans votre cas particulier, vous pouvez vérifier que la valeur insérée dans la colonne est contenue dans une table séparée que d'une simple liste de valeurs valides.
D'autre part, si vous avez peu d'expérience avec les bases de données, plan de cible de plusieurs bases de données différentes, et n'ont pas le temps de développer de l'expertise, peut-être simple demande de validation de niveau est le moyen le plus efficace choix.