J'ai besoin de créer une table de base de données qui stocke des descriptions paramétriques des caractéristiques physiologiques (par exemple la pression artérielle systolique, les concentrations de triglycérides, etc.) d'une cohorte hypothétique de patients. Par exemple, en supposant que l'utilisateur spécifie une distribution triangulaire pour SBP, alors le minimum, le maximum et le mode (et le type de distribution) devraient être stockés. Alternativement, l'utilisateur peut spécifier une distribution normale, nécessitant le stockage de la moyenne et de l'écart-type. Je suis aux prises avec la bonne façon de normaliser ces données. À l'heure actuelle, j'ai une table de cohorte et une table de distribution avec un certain nombre d'un à-un comme suit (certains champs omis):Normalisation correcte de la base de données avec colonnes optionnelles
Cohort id (INT, NOT NULL, PRIMARY) name (TEXT, NOT NULL) comments (TEXT) systolic_blood_pressure_dist (FOREIGN KEY referencing Distributions.id) triglyceride_dist (FOREIGN KEY referencing Distributions.id) ...other physiological parameters Distributions id (INT, NOT NULL, PRIMARY) distribution_type (TEXT) minimum (FLOAT) maximum (FLOAT) mean (FLOAT) mode (FLOAT) sd (FLOAT) ...other distribution parameters (alpha, beta, shape, scale, etc.)
(distribution_type contient une chaîne décrivant la distribution: « Triangulaire », " Weibull ", etc.)
Je suis assez sûr que ce n'est pas la manière optimale de le faire car il me reste beaucoup de champs NULL dans chaque ligne de distributions. Mon autre pensée était d'avoir des tableaux séparés pour chaque type de distribution (un pour triangulaire, un pour gaussien, un pour uniforme, etc.) et avoir une table au milieu avec une colonne id (pour être utilisé comme un étranger clé dans les colonnes * _dist de la table de cohorte), une colonne de type de distribution et une colonne id pour stocker la clé étrangère de la ligne dans la table de distribution appropriée. La requête utiliserait l'identifiant stocké dans la colonne Cohorte pour trouver le type de distribution et l'identifiant de ligne de la table du milieu, puis rechercher les paramètres dans la table appropriée en utilisant l'ID. Cependant, en utilisant une chaîne pour sélectionner la table appropriée, alors un autre identifiant pour sélectionner la ligne appropriée est loin d'un JOIN traditionnel et ne semble pas non plus être une approche très propre.
Alors, est-ce que quelqu'un a des suggestions sur la meilleure façon d'y parvenir (en termes de normalisation et/ou de performance)?
Un grand merci, Rich
Merci beaucoup pour votre réponse rapide! Cependant, je ne comprends pas très bien certains aspects de la solution, en particulier la table CohortParameters - quel est son but et à quoi sert la colonne de valeur? En outre, la table des distributions aurait toujours le problème des valeurs NULL (bien que l'espace gaspillé négligeable mis à part, je ne me suis toujours pas convaincu que c'est vraiment un problème ...). Merci encore pour votre contribution à ce sujet, Rich. –