2009-02-15 2 views
0

У меня есть медицинская база данных, в которой хранятся разные типы данных о пациентах: экзамены, результаты лабораторных исследований, рентгеновские снимки ... каждый тип записи существует в отдельной таблице. Мне нужно представить эти данные на одной таблице, чтобы показать историю пациента в конкретной клинике.Лучший способ получения информации из нескольких таблиц базы данных

Мой вопрос: что это лучший способ сделать это? Должен ли я делать SELECT из каждой таблицы, где совпадает идентификатор пациента, заказывать их по дате и затем хранить в какой-либо искусственной структуре, подобной спискам (упорядочен по дате)? Или есть лучший способ сделать это?

Я использую WPF и SQL Server 2008 для этого приложения.

ответ

4

Как говорили другие, JOIN - это то, как вы обычно это делаете. Однако, если в одной таблице есть несколько строк в одной таблице, тогда есть вероятность, что вы получите данные в некоторых столбцах, повторяющихся в нескольких строках, что часто вам не нужно. В этом случае иногда проще использовать UNION или UNION ALL.

Предположим, у вас есть две таблицы, examinations и xrays, каждая с идентификатором пациента, датой и некоторыми дополнительными деталями. Вы можете комбинировать их так:

SELECT PatientID, ExamDate [Date], ExamResults [Details] 
FROM examinations 
WHERE PatientID = @patient 

UNION ALL 

SELECT PatientID, XrayDate [Date], XrayComments [Details] 
FROM xrays 
WHERE PatientID = @patient 

Теперь у вас есть один большой набор результатов с PatientID, датой и подробными сведениями столбцов. Я нашел это удобным для «слияния» нескольких таблиц с похожими, но не идентичными данными.

+0

Создание ПРОСМОТРА UNION ALL будет работать хорошо. Если количество строк в таблицах велико, тогда рассмотрите горизонтальное разбиение на разделы, и если это не даст необходимой производительности, то денормализовать создание таблицы хранилища. – Kristen

+0

Не забудьте проиндексировать представление как столбцами PatientID, так и Date. – configurator

1

Используйте JOIN для получения данных из нескольких таблиц.

+0

Конечно, внешние левые соединения из таблицы пациентов? –

+0

Возможно, вы правы. Хотя в случае пациента/обследования это может быть внутреннее соединение. – M4N

+1

Если вы ПРИСОЕДИНИТЕСЬ (даже ЛЕВОЙ ВНЕШНИЙ ПРИСОЕДИНЯЙТЕСЬ) [пациенты] с обследованиями, результатами лабораторных исследований и рентгеновскими лучами, вы получите картографический результат - каждый экзамен соединяется с каждым лабораторным результатом !! СОЮЗ каждого из них необходим, как ответ Мэтта Гамильтона. – Kristen

1

Если это то, что вы часто будете делать, у меня возникнет соблазн создать денормализованное представление всех данных пациента (присоединитесь к соответствующим таблицам) и index the appropriate column(s) in the view. Затем используйте соответствующий метод (хранимая процедура и т. Д.) Для извлечения данных для переданного пациента.

0

Вы можете использовать соединение (не помню, какой именно тип), чтобы получить все записи из каждой таблицы для конкретного пациента. Способ, которым это работает, зависит от дизайна вашей базы данных.

0

Я бы сделал это с отдельными операторами SELECT, поскольку простой JOIN, вероятно, не будет делать из-за того, что некоторые таблицы могут иметь более 1 строки для пациента.

Поэтому я хотел бы получить несколько результирующих наборов в простом DataSet, добавьте DalaRelation, кэшировать объект и запросить его вниз линию (по дате, по типу экзамена, подмножеств, ...)

Главная Дело в том, что у вас есть все данные, удобные, даже кэшированные, если необходимо, в структуре, которая легко запрашивается и фильтруется.

Смежные вопросы