Мне нужно создать таблицу базы данных, в которой будут храниться параметрические описания физиологических характеристик (например, систолическое артериальное давление, концентрации триглицеридов и т. Д.) Гипотетической когорты пациентов.
Например, если пользователь задает треугольное распределение для SBP, то минимум, максимум и режим (и тип распределения) должны быть сохранены. В качестве альтернативы пользователь может указать нормальное распределение, требующее хранения среднего значения и стандартного отклонения.
Я борюсь с правильным способом нормализации этих данных. В настоящее время у меня есть таблица Cohort и таблица распределения с несколькими отношениями один к одному, как показано ниже (некоторые поля пропущены):
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.)
(тип_распределения содержит строку, описывающую распределение: "Треугольный", "Вейбулл" и т. Д.)
Я почти уверен, что это не оптимальный способ сделать это, так как у меня осталось множество пустых полей в каждом ряду Распределений.
Моя другая мысль заключалась в том, чтобы иметь отдельные таблицы для каждого типа распределения (одну для треугольной, одну для гауссовой, одну для равномерной и т. Д.) И иметь таблицу в середине со столбцом id (для использования в качестве внешнего ключа). в таблице Cohort * столбцы _dist), столбец типа распределения и столбец id для хранения внешнего ключа для строки в соответствующей таблице распределения.
Запрос будет использовать идентификатор, хранящийся в столбце «Когорта», чтобы найти тип распределения и идентификатор строки из средней таблицы, а затем найти параметры в соответствующей таблице, используя идентификатор. Однако при использовании строки для выбора соответствующей таблицы другой идентификатор для выбора соответствующей строки далек от традиционного JOIN и также не выглядит очень чистым подходом.
Итак, есть ли у кого-нибудь предложения относительно того, как наилучшим образом добиться этого (с точки зрения нормализации и / или производительности)?
Большое спасибо,
Рич