Bonjour.
Ma base de données comporte plusieurs tables de codes du type
DICO(dico_id ENTIER, dico_code VARCHAR, dico_libelle VARCHAR, ...).
Elle comporte aussi plusieurs tables du type
TABLE_1(tbl1_id ENTIER, tbl1_reference VARCHAR, dico_id ENTIER, ...), où dico_id est une clé étrangère référençant la table DICO.
Dans la colonne dico_code , chaque valeur doit être unique, plus précisément on ne peut pas avoir deux valeurs avec des lettres identiques mais une casse différente (si xyz présent alors xYz interdit). La même contrainte existe pour la colonne tbl1_reference.
Quelle est la stratégie systématique à adopter ?
Créer les colonnes avec une collation CASE INSENSITIVE et installer une contrainte UNIQUE
Ou bien par exemple
Assurer l’unicité avec une contrainte CHECK qui fait une vérification qu’il n’existe pas de valeur telle que UPPER(dico_code) = UPPER(le_dico_code_a_inserer). Dans ce cas, lorsqu’on veut insérer une ligne (une_tbl1_reference, un_dico_code, ...) dans la table TABLE_1, il faut utiliser encore UPPER() de la recherche de l’identifiant dico_id pour qu’elle ne tienne pas compte de la casse.
Je prends systématiquement la première stratégie. Par conséquent, j’ai de « nombreuses » tables dans lesquelles il existe une colonne avec une collation CS.
Je ne sais pas s’il y a des contre-indications à faire de cette façon, ou s’il y a une autre façon de faire. Est-il intéressant d’ajouter d’autres paramètres de collation ?
Je vous remercie d’avance de partager avec moi ce que vous faites habituellement.
Partager