Вопрос или проблема
Я пытаюсь создать небольшую таблицу фактов в области здравоохранения с следующей информацией
[patientid], [organid], [value]
Каждый [patientid] уникален для этого пациента, но в системе доступно только 10 [organid] (сердце, левое легкое, правое легкое, печень, поджелудочная железа и т.д.). Поэтому, очевидно, вы увидите множество других [patientid] с этими же 10 или около того [organid] в этой таблице фактов.
Затем я хочу связать это с таблицами измерений, причем каждая таблица измерений будет посвящена своему органу. Так, например, таблица измерений, полностью посвященная сердцу.
Однако таблица измерений сердца будет содержать данные о сердце для каждого [patientid]. Одна колонка будет представлять сокращённую фракцию, и вы сможете увидеть сокращённую фракцию для каждого [patientid] в строках.
Для этого потребуется взаимосвязь 1:1 между таблицей фактов и таблицей измерений, поскольку строки будут уникальны для [patientid] и [organid]. Является ли это лучшей практикой, или мне следует пересмотреть свои таблицы измерений?
Также есть еще один странный вопрос. Двойное легкое будет иметь свой собственный [organid], но таблица измерений легких будет включать данные о левом и правом легких, что противоречит логике. Я не могу с этим ничего поделать, [organid] предназначен для двойного легкого, но есть конкретная информация для обоих легких. Как мне подойти к этому?
Ответ или решение
Вопрос о том, может ли факт-таблица иметь отношение 1:1 с измерительной таблицей, вызывает интерес в области баз данных и проектирования хранилищ данных (Data Warehouse). Рассмотрим ваш конкретный случай с таблицей фактов в системе здравоохранения.
Структура факт-таблицы
Факт-таблица, содержащая следующие поля:
- patientid — уникальный идентификатор пациента,
- organid — идентификатор органа,
- value — значение, связанное с измерением для пациента и органа.
Вы правильно отметили, что каждый patientid уникален для своего пациента, но значение organid может повторяться среди разных пациентов. Это создает привычную структуру, где одна факт-таблица может связаться с несколькими другими таблицами измерений: каждая таблица будет содержать информацию, специфичную для одного органа.
Отношение 1:1 с измерительной таблицей
Если говорить о вашем вопросе о том, может ли факт-таблица иметь отношение 1:1 с таблицей измерений, то данное взаимодействие возможно, однако требует особого подхода. В типичной ситуации факт-таблицы имеют отношения 1: много с таблицами измерений. В вашем случае, если в таблице измерений для сердца содержатся уникальные показатели для каждого пациента и органа, то возможна реализация 1:1 в разрезе (patientid, organid). Тем не менее, такое решение может усложнить архитектуру и сделать её менее гибкой.
Рекомендуемая структура
Наилучшей практикой было бы рассмотреть вариант, где ваши таблицы измерений могут хранить поля, уникальные для каждого пациента, а факты о них будут представлены в многомерной форме. Вы можете создать универсальные меры в факт-таблице, в то время как измерительная таблица будет предоставлять атрибуты, которые могут использоваться для аналитики. Это упростит поддержание и расширение вашей модели данных.
Вопрос о двойном легком
Теперь к вашему вопросу о двойном легком. Если у вас есть орган Double Lung, который имеет уникальный organid, но также необходимо включить информацию о каждом легком отдельно (Левое и Правое), вам следует пересмотреть структурирование вашей модели. Один из подходов — добавить дополнительную колонку для указания конкретного легкого в таблице измерений.
Таким образом, вы можете сделать следующее:
- В таблице фактов, к примеру, [patientid, organid, lung_side, value], где lung_side может иметь значения (Left, Right или Both).
- В таблицах измерений сохранить атрибуты, относящиеся к каждому легкому отдельно, чтобы обеспечить возможность детального анализа.
Заключение
Таким образом, несмотря на то, что возможно иметь отношение 1:1 между факт-таблицей и таблицами измерений в специфических случаях, данный подход может привести к потере гибкости. Исходя из ваших целей аналитики, возможно, имеет смысл сохранить возможность создания более гибких многомерных структур данных. Позаботьтесь о том, чтобы ваши таблицы были достаточно универсальными, чтобы поддерживать анализ больших объемов данных и упрощать внедрение будущих изменений.
Если вам потребуется дальнейшая помощь в проектировании вашей базы данных или возникнут дополнительные вопросы по этому вопросу, не стесняйтесь задать их.