OVH Cloud OVH Cloud

polymorphisme de type

1 réponse
Avatar
mutah
Bonjour,

je me demandais comment modéliser ce problème en SQL :

le résultat d'un test est soit un numérique, soit un texte codé (c'est à
dire une chaine de caractère courte), sachant qu'on doit être capable de
sélectionner un ensemble de résultats pour afficher leurs valeurs,
quelque soit leur type.

je vois plusieurs options :

- dans la table resultat, j'ai un champ 'valeur' de type varchar qui
peut contenir aussi bien le texte codé que la valeur numérique, avec un
champ booléen indiquant le type de résultat qui décider du transtypage
éventuel.

- dans la table resultat, un champ valeur_num et un champ valeur_char,
l'un des deux étant null pour indiquer que l'autre est significatif

- 3 tables, resultat_numeriques et resultat_texte avec une clef
étrangère vers la table parente (implémentation simple d'héritage). le
problème est alors de devoir requeter les 2 tables à chaque fois qu'on
veut la valeur d'un résultat...

merci d'avance de vos conseils éclairés :)

François

1 réponse

Avatar
Fred BROUARD - SQLpro
Si la valeur est toujoiurs numérisable, alors un simple :

CAST(ColValue AS FLOAT) est suffisant

soit utiliser un CASE, soit utiliser un UNION

A +

mutah a écrit:
Bonjour,

je me demandais comment modéliser ce problème en SQL :

le résultat d'un test est soit un numérique, soit un texte codé (c'est à
dire une chaine de caractère courte), sachant qu'on doit être capable de
sélectionner un ensemble de résultats pour afficher leurs valeurs,
quelque soit leur type.

je vois plusieurs options :

- dans la table resultat, j'ai un champ 'valeur' de type varchar qui
peut contenir aussi bien le texte codé que la valeur numérique, avec un
champ booléen indiquant le type de résultat qui décider du transtypage
éventuel.

- dans la table resultat, un champ valeur_num et un champ valeur_char,
l'un des deux étant null pour indiquer que l'autre est significatif

- 3 tables, resultat_numeriques et resultat_texte avec une clef
étrangère vers la table parente (implémentation simple d'héritage). le
problème est alors de devoir requeter les 2 tables à chaque fois qu'on
veut la valeur d'un résultat...

merci d'avance de vos conseils éclairés :)

François



--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************