2015-08-04 1 views
1

Je veux traiter certaines données d'une certaine plage dans la base de données générale et prédéfinir la gamme de chaque élément de données. La gamme de certains est continue, comme un nombre flottant allant d'une valeur minimale à une valeur maximale, et la gamme des autres est discrète, comme la nationalité des personnes qui pourraient être les États-Unis, le Japon ou l'Espagne, une large mais finie gamme de alternatives. Ce type de schéma est généralement réalisé dans la couche de logique métier, et je veux savoir si je peux le gérer dans la couche base de données, en particulier dans une base de données non-SQL.Est-il possible de spécifier la plage de valeurs de données dans la base de données générale?

+0

En supposant que je comprenne la question, je pense que vous recherchez l'opérateur 'in'. –

+0

Non, je veux juste trouver un moyen de prédéfinir la plage d'une certaine propriété de données dans la base de données de sorte que lorsque j'utilise la valeur qui n'appartient pas à la plage spécifiée, la base de données ne l'acceptera pas. –

+0

veuillez spécifier quel moteur de base de données vous essayez d'utiliser pour plus d'aide. – Randy

Répondre

1

Au moment où j'ai écrit cette réponse, la question portait sur les bases de données en général et non sur les bases de données non-SQL.

Dans de nombreuses bases de données (relationnelles), vous pouvez gérer cela en utilisant les contraintes check dans la base de données qui vous permettent de définir des valeurs acceptables en utilisant des expressions booléennes. Cela s'appliquerait à la fois aux instructions insert et update.

Un exemple qui fonctionne avec MSSQL et Postgresql:

create table t 
(
    -- country_code has to be a Nordic country. 
    country_code varchar(20) check (country_code in ('NO','SE','DK', 'FI','IS')), 

    -- float_value has to be in a certain range 
    float_value float check (float_value between 0.01 and 0.05), 

    -- int_value has to be in a range, and in steps of 5 
    int_value int check ((int_value between 10 and 50) and (int_value % 5 = 0)) 
); 

-- allowed 
insert into t values ('SE', 0.03, 25); 
-- not allowed as int_value is not divisible by 5 
insert into t values ('SE', 0.03, 26); 
-- disallowed due to country_code not in set 
insert into t values ('US', 0.05, 25); 

Voir documentation for Postgresql pour plus d'informations et des exemples. Une autre option consiste à utiliser des déclencheurs avant ou à la place des insertions qui vous permettent de valider des données et d'effectuer un traitement plus complexe que ne le permettent les contraintes de vérification (comme les données de référence dans d'autres tables). Les déclencheurs peuvent être mauvais pour la performance cependant. Si vous souhaitez restreindre la plage de valeurs possibles à une plage prédéfinie, vous pouvez également stocker ces valeurs dans un tableau (par exemple, countries(code, name)) et utiliser une contrainte foreign key pour vous assurer qu'il ne sera pas possible d'insérer des données qui ne le sont pas. n'existe pas dans la table de domaine associée.

+0

Il semble être ce que j'attends. Est-il toujours disponible maintenant? Puis-je trouver une solution alternative si j'utilise une base de données non relationnelle? –

+0

@ Ivan814 Que voulez-vous dire être _est-il toujours disponible? _ Et bien que ce type de vérification soit une caractéristique commune dans la base de données, cela dépend du système spécifique s'il est disponible ou s'il y a quelque chose de similaire. – jpw

+0

Parce que vous avez mentionné que ce n'est pas pris en charge dans les systèmes de base de données actuels dans votre précédent commentaire. Je ne pouvais pas le trouver maintenant. –