Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Создание структуры БД. Что лучше?
|
|||
|---|---|---|---|
|
#18+
Суть проблемы - на 1 запись (больной) будет 124 поля, характеризующие его состояние. Большинство полей будет полями подстановки, т.е. значения черпаются из других таблиц. Вопрос: что лучше 1) в БД создать 124 таблицы, которые привязать к главной или 2) программно задавать список значений полей в DBGrid'e (напр. EhDbGrid), а в базе - 1 таблица с порядковыми номерами значений? Данные 124 полей никак объединить нельзя (от роста, веса до даты последних месячных...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2004, 22:55 |
|
||
|
Создание структуры БД. Что лучше?
|
|||
|---|---|---|---|
|
#18+
ну прям даж не знаю что сказать в принципе мона сделать так таблица1 ид_больного |дата_измерения|фамилия|имя|отч|полное_имя|темпаратура|давление ... ну короче все 124 параметра таблица 2 ид_параметра|полное_название_параметра то есть в таблице больного эти параметры берутся из справочника то есть название параметра можно будет легко изменить единственно будет не очень красиво если придётся добавлять ещё параметры какието но всё же лучше чем 124 таблицы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2004, 05:58 |
|
||
|
Создание структуры БД. Что лучше?
|
|||
|---|---|---|---|
|
#18+
ну если не очень важна скорость то можно сделать так ид_больного |дата_измерения|фамилия|имя|отч|полное_имя|результаты_змерений(через ; например)|ид_результатов(тож через ;) таблица 2 ид_параметра|полное_название_параметра получится чтот типа 1 |20,01,2004|иванов| иван |виванович|иванов иван иванович|36,6;120-70|1;2 а в таблице справочнике 1 температура 2 давление .......... в конце концов не у всех же меячные или месяц беременности ;-)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2004, 09:12 |
|
||
|
Создание структуры БД. Что лучше?
|
|||
|---|---|---|---|
|
#18+
Если разговор идет именно о структуре базы, тогда лучше завести 2 таблицы "Больной" и "Состояние больного", связанные один-"ко-многим". В этом случае при изменении набора состояний больного (например, вес больше не учитываем, а вместо него добавляем еще 4 состояния) не придется изменять структуру одной большой таблицы (что само по себе требует хирургического вмешательства в базу). Другое дело, что при создании клиентского приложения придется как-то "транспонировать" (превращать набор строк в набор полей и наоборот) набор данных по состоянию больного. Но это уже другая история... Я рекомендую 2 таблицы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2004, 09:26 |
|
||
|
Создание структуры БД. Что лучше?
|
|||
|---|---|---|---|
|
#18+
Лучше не мучайтесь, а обратите внимание на то, что 90% медицинских систем в США работают на CACHE. Надо думать неспроста... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2004, 09:44 |
|
||
|
Создание структуры БД. Что лучше?
|
|||
|---|---|---|---|
|
#18+
В догонку... а почему бы не воспользоваться CREATE TYPE и типизированными таблицами? и вообще , почему в форуме не обсуждаются объектные расширения ORACLE и DB2? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2004, 10:49 |
|
||
|
Создание структуры БД. Что лучше?
|
|||
|---|---|---|---|
|
#18+
--jvvjvv --Сообщений: 2 Лучше не мучайтесь, а обратите внимание на то, что 90% медицинских систем в США работают на CACHE. Надо думать неспроста... Еще бы. Медицинаская система США, как и страховая - две больших мафии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2004, 19:50 |
|
||
|
Создание структуры БД. Что лучше?
|
|||
|---|---|---|---|
|
#18+
gardenman, "и вообще , почему в форуме не обсуждаются объектные расширения ORACLE и DB2?" - так расскажите, как данную проблему можно решить в упомянутых Вами системах. Было бы интересно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2004, 22:31 |
|
||
|
Создание структуры БД. Что лучше?
|
|||
|---|---|---|---|
|
#18+
Спасибо за помощь. Решено делать так: 2 таблицы. 1-я - Справочник (VocID, FieldID, FieldValue) 2-я - Фамилия + 124 поля (VocID из справочника). В справочнике значения хранятся как строки. В DBGrid показываются 124 поля. Когда пользователь хочет выбрать значение из списка в ячейке (LookupField) - включаем фильтр по номеру поля FieldID - показываются только нужные значения. По-моему оптимальный вариант. Или есть другие оптимальные варианты? Есть еще вопросик: как сдесь лучше сортировку сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2004, 22:48 |
|
||
|
Создание структуры БД. Что лучше?
|
|||
|---|---|---|---|
|
#18+
2 Ulyanitsky Ну вот, приехали :( Только какими путями ехали - непонятно. авторРешено делать так: 2 таблицы. 1-я - Справочник (VocID, FieldID, FieldValue) 2-я - Фамилия + 124 поля (VocID из справочника). В справочнике значения хранятся как строки. Просто превосходно. Я в шоке. Извиняюсь, что влез, сейчас будем все раскладывать по полочкам. Во-первых, таблиц должно быть три или даже больше: 1 - Разновидности параметров состояния, 2 - Параметры состояния, 3 - Больные. 1 - имеет в своем составе поля: идентификатор разновидности (ПК), ------------ наименование разновидности (рост, вес, объем груди и т.д.), тип данных (метаданные - поможет при конвертировании строки), ну и еще всякие разные метаданные может иметь (например, мин и макс значения). 2 - имеет: идентификатор больного, идентификатор разновидности, порядковый номер измерения у данного больного (ПК), ---------------- значение (тут согласен, храним строкой), дату измерения. 3 - имеет: идентификатор больного (ПК) ---------------- фамилию больного параметры больного, не зависящие от даты измерения (пол, дата рождения). Еще могут быть таблицы кросс-условий (типа, если пол мужской, то месячных не бывает (или все-таки бывают? ;-) )), для списков выбора и т.д. А насчет того, что нужно пользоваться датагридом - я сильно не уверен. По мне, и простой грид подойдет. А показывать в этом гриде нужно не в строку все параметры больного, а в столбец. И запросы будут простые, и вообще будет тебе щастье ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2004, 00:14 |
|
||
|
Создание структуры БД. Что лучше?
|
|||
|---|---|---|---|
|
#18+
Достаточно странное решение ... А что если завтра этих параметров станет 125 или не у всех клиентов необходимо заполнять все 124 параметра ? Я бы предложил следующее решение Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. Как ее развернуть в преличный пользовательский интерфейс ... это уже другой вопрос ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2004, 00:19 |
|
||
|
Создание структуры БД. Что лучше?
|
|||
|---|---|---|---|
|
#18+
Это не к Urri предыдущее сообщение к автору Просто набивалт с ури видимо в одно время и его ответа еще небыло ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2004, 00:22 |
|
||
|
Создание структуры БД. Что лучше?
|
|||
|---|---|---|---|
|
#18+
Это все конечно хорошо, можно легко расширять набор параметров, просто добавляя новые записи с таблицу параметров, можно хранить историю изменения параметров в таблице исселедования. НО как быть если нужен отчет по отделению - например, мы хотим посчитать среднюю температуру по больнице / :-) шутка /, или нужна статистика насколько быстро показатели больных приходят в норму (допустим для принятия решения насколько эффективен используемый препарат против данной формы гриппа или любой другой болезни). То есть, как осуществлять аггрегации? Например, как выбрать всех больных ростом выше 1.80 м? Далее, основной рабочей таблицей здесь становится таблица параметры - судя по всему она будет очень длинной - по сотне (в среднем, т.к. не для всех нужны будут все 124 показателя) показателей на каждого пациента, она будет достаточно быстро расти. Как все это скажется на производительности? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2004, 14:06 |
|
||
|
Создание структуры БД. Что лучше?
|
|||
|---|---|---|---|
|
#18+
На самом деле, нормальная нормализация (прошу прощения за каламбур ;-)) подразумевает в числе прочего и то, что все промежуточные нормальные формы могут быть восстановлены. В предлагаемом мною и olk решении нетрудно написать sql-запрос, который восстановит табличку в исходном виде - "вширь". (На практике же такое окажется ненужным, поскольку наверняка каждый раз мы будем выбирать по одному параметру; все более "навороченные" задачи можно легко свести к этой.) Можно будет даже построить на основе этого запроса вьюху, к которой и обращаться вместо того, чтобы каждый раз связывать в запросах исходные таблицы. Т.е. "скрыть" всю сложность во вьюхе - "контейнере". Насчет скорости - тут оно конечно да, как правило более нормализованные варианты несколько тормознее денормализованных. Помогут грамотно спроектированные индексы. Наконец, бояться, что таблица будет расти быстрее, не стоит. Скорее, даже наоборот: поскольку записи будут заводиться только на действительно измеренные параметры, рост замедлится (в общем случае, тут разные реализации БД, конечно, окажут свое, разное, влияние). Но общая тенденция такова. В самом деле: человек измеряет только температуру - а в твоем варианте потребуется добавить строку со всеми остальными 124 параметрами ;-) В общем случае, на этапе физической реализации нужно учесть характеристики применяемой СУБД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2004, 15:38 |
|
||
|
Создание структуры БД. Что лучше?
|
|||
|---|---|---|---|
|
#18+
Пожалуй да, такое хранение будет наиболее гибким, но гибкость не должна переходить в расхлябанность и изишнюю свободу. Когда мы храним все значения в виде строк - это самый общий тип хранения, ведь мы должны в это поле засовывать все подряд. Допустим, у нас есть колонка отделение, не писать же там "хириргическое", "терапия" или "пневма"? Это неправильно ни с точки зрения нормализации и хранения избыточных данных, так и с точки зрения интерфейса, кто-то напишет "хирургическое", кто-то "хирургия" а кто-то просто букву "Х", поскольку в этот момент поступила куча тяжело больных их нужно было срочно распихать по палатам и врачам, плюс вероятность ошибки возрастает. Как потом составлять отчет по этим данным??? Значит, нужно писать номер отделения и в отдельной таблице-справочнике хранить расшифровки этих номеров. Итак, параметры распадаются на ссылочные (отделение, принявшая пациента сестра, район города, лечащий врач ...) и уникальные (имя, фамилия, номер палаты ....). Все это нужно хранить в одном поле. Т.е получается такой вариант: № строки -- № пациента -- тип параметра -- значение 1 -- 1 -- ФИО -- Петров Ы. Ъ. (ни на что не ссылается) 2 -- 1 -- отделение -- 3 (ссылается на таблицу "отделения") 3 -- 1 -- район -- 5 (ссылается на таблицу районы города) 4 -- 1 -- диагноз -- пневмония с ... (очень такая длинная строка, которая тоже ни на что не ссылается, но зато может уточняться и изменяться со временем). Далее, поскольку из одного поля нам нужно ссылаться на самые разные таблицы, то как их группировать динамически во время запроса? Или разбить на несколько запросов? Т.е. вначале отдельными запросами выяснить, номер доктора, номер района, а потом уже делать выборку? Как вариант, можно вынести все уникальные значения (напр. фамилии, адреса, номера домов) в отдельную таблицу, и на нее ссылаться, тогда можно значение хранить не ввиде строки, а ввиде числа-ключа, а вот для какой таблицы будет этот ключ, это уже зависит от предыдущей колонки - типа параметра. Едем дальше, вами уже указывалось , что не все параметры, которые есть в списке применимы ко всем больным - значит это нужно как-то контролировать. Т.е. отдельная таблица, указывающая, то для такого-то типа больных применим такой список параметров. (Замечание в скобках: а что такое тип больного? Пол? А если возникает более четкая градация? Например по отделениям и тп) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2004, 17:03 |
|
||
|
Создание структуры БД. Что лучше?
|
|||
|---|---|---|---|
|
#18+
Ну, я не говорил, что все это легко ;-) Чтобы не было бардака, на данные, которые хранятся в виде текста, нужно накладывать ограничения. А для этого нужно держать метаданные - истинный тип данных, которые хранятся в поле, маску, которую нужно наложить на поле на стороне клиента, чтобы он не ввел ничего неподобающего (и/или список выбора, для чего потребуются отдельные таблицы - и даже не одна, а минимум две ;-), и/или минимальное-максимальное значение). Кроме того, потребуются хранимые процедуры для того, чтобы единообразно преобразовывать типы данных истинные к таблично-хранимым и наоборот, и, возможно, хранимые процедуры, задача которых - обеспечить дополнительный контроль введенных клиентом значений. Я даже думаю, что с метаданными можно и не очень заморачиваться (ну, кроме задания типа), а обойтись единой хп проверки-преобразования на каждый из возможных параметров, принимающей на входе тип параметра и проверяемое значение. Так будет проще (не говорю, что это здорово, но, с другой стороны, кто сказал, что в случае появления нового параметра проще настроить новый набор метаданных нежели просто слегка поправить эту хп?). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2004, 17:48 |
|
||
|
Создание структуры БД. Что лучше?
|
|||
|---|---|---|---|
|
#18+
PS А чтобы не было лишней "динамики" в запросах, структура должна быть такая, чтобы все данные можно было взять из одного и того же набора таблиц, играя лишь ключевыми значениями, а не именами таблиц и полей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2004, 17:51 |
|
||
|
Создание структуры БД. Что лучше?
|
|||
|---|---|---|---|
|
#18+
Спасибо всем, ответившим на мой вопрос. Извиняюсь, что только сейчас отвечаю - аппендикс вырезали. На счет БД - суть задачи плавно изменилась с создания справочника , из которого будут браться значения в столбцы БД (напомню, что их 124) в разбиение БД на 3 таблицы. Urri, Olk - спасибо за Ваше предложение. Действительно - достаточно гибко с точки зрения управления параметрами обследования, однако почти все параметры (120) будут подставляемыми, т.е. для каждого параметра есть свой список значений , который должен предлагаться юзеру при редактированнии соответствующего поля (юзер не "набирает", а выбирает). К тому же заказчик желает, чтобы это все было представлено в одной таблице для большего удобства редактирования (124 поля - параметры, записи - соттветственно данные обследования). Как же быть? Что же всетаки лучше? создать 2 таблицы (1 - переченть параметров; 2 - список выбиемых значений параметров для 1 таблицы) + 1. статический список значений полей в EhDbGrid 2. автофильтр списка значений для конкретного поля перед началом редактирования ячеек 3. 3 таблицы (решение Urri, Olk) + автофильтр 4 - Ваш вариант Что касается вопроса о СУБД - используется MSSQL2000, установленынй на W2000Server. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2004, 18:38 |
|
||
|
Создание структуры БД. Что лучше?
|
|||
|---|---|---|---|
|
#18+
Ulyanitsky Вопросик: а на больного должны быть задействованны все поля одновременно или они как то деляется на группы в зависимости от неких условий. Поясню: Например у каждого человека есть общее состояние, учитываемое при всех болезнях/обследованиях в медицине. Это рост, вес, давление, реакция на антибиотики и т.д. и т.п. (сорри, я слаб в медицине, но думаю пример понятен). В тоже время в зависимости направления болезни и отделения, в котором проводиться лечение больного есть свои специфичные параметры: уровень геммоглобина в крови, состояние легких и т.д. (с примерами уже туго). Плюс в зависимости от болезни параметры могут быть как обязательными к заполнению, так и не обязательными. И ко всему прочему они могут быть значениями или же выбираться из списка предложенных значений. Еще как я понимаю все эти параметры получаются в результате проведения конкретных обследований. Например взяли у пациента из пальца кровь, значит по любому будет выписан отдельный документ, подтверждающий кем и когда был проведен анализ. А раз отдельный документ, значит по идее он отдельно должен быть зафиксирован. Исходя из этих соображений Вам бы стоило уточнить постановку задачи: что именно от Вас требуют ? Просто примитивно хранить параметры больной/показатели и их печатать, или же все таки вести историю обследований больных. При первом варианте подойдет табличка с 124 полями - сделаете и забудете. Если же все таки что то посложнее, то рекомендую еще раз очень серьезно уточнить и описать для себя постановку и только описав все требуемые характеристики системы начинать продумывать структуру БД. Так как лично я думаю, что в этом случае будет даже маловато 2-х табличкек "Параметры" и "Значения", дело тогда пахнет не маленькой учетной системой с реализацией механизма, похожего на механизм документооборота. P.S. И еще мне не вериться, что заказчик настаивает, чтобы вся эта система была реализована на одном гриде. Я просто представить себе не могу юзера, который согласиться заносить данные в грид, содержащий более 100 полей. Зато вот программиста представить вполне могу - бросил себе DataSet, DBGrid и DBNavigator и клиент готов :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2004, 23:12 |
|
||
|
Создание структуры БД. Что лучше?
|
|||
|---|---|---|---|
|
#18+
2 Ulyanitsky давайте попробуем немного по рассуждать. Есть 124 параметра (и их может быть больше) . Как их хранить? В одной строке с 124 полями или в списке из 124 строк?. Я вижу два пути решения, которые зависят исключительно от выбора Инструмента разработки системы. 1. Лобовое решение. Если прикладная система имеет в себе встроенный Генератор (модификатор) БД, в терминах доступных для конечного юзера - можно смело делать строку с 124 полями, и когда понадобится - добавлять еще используя этот генератор. В целях оптимизации хранения инфо в БД - можно предусмотреть процедуру периодической реорганизации таблицы (пустые поля -в конец....если конечно это ....поможет:-). 2. Списочное решение - 124 строки. Здесь два вопроса - ввод данных и выборка данных. Ввод - возможно потребуется создать 124 интерфейса, имеющих свою бизнес логику. Вывод. Возможно потребуется создать 124 конструкции select ...union или 124 select....case.... или 124 функции вызываемого из одного селекта или 124 строки в условии WHERE. По части Ввода - 1 вариант и второй - полностью индеитичны. Как для заполнения 124 полей 1 строки так и для 124 строк - все равно нужно создавать прикладные интерфейсы ....выбора значений из списка или верификации ввода с клавиатуры.... По части вывода - 1 вариант и второй различаюся принципиально. Но, "как решить задачу - не решая ее"? Нет ли какого волшебного приемчика....в пользу выборки данных по второму варианту? Некий трюк, метод...что гарантирует скорость SQL машины + гибкость на клиенте?. Мне кажется, такой способ можно придумать. Вот что пришло на вскидку.... Что если, прикладной интерфейс, для поиска данных в списке (1*124) *N порций записей, всегда предварительно создаст временную таблицу - из кол-ва строк <<124, где будет по сути прописано условие(параметры фильтра). Т.е - запрос сначала отбирает список возможных значений ID по фильтру, а потом уже делает простой JOIN к таблице (1*124) *N порций без какого либо условия WHERE. Тогда мы должны "мгновенно" получить заданную выборку. Снова возникает вопрос о представлении данных, но уже выборки. С одной стороны - нужны фиксированные отчеты - карточки и нужен также и грид. Тогда можно реализовать сразу эти два метотода - и все. Дать универсальный грид для просмотра и иметь комплект карточек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2004, 12:57 |
|
||
|
Создание структуры БД. Что лучше?
|
|||
|---|---|---|---|
|
#18+
ASCRUS На больного задействованны все поля одновременно, на группы они не делятся в зависимотси от условий (напр. диагноза), что значительно упрощает задачу. Однако из всех данных (124) обязательных только несколько (штук 10: ФИО, пол, дата рожд, дата поступления и т.д.), а остальные вводятся по мере того, был ли обследован больной или нет и являются собой ВЫПАДАЮЩИМИ СПИСКАМИ в гриде, т.е. значения по идее должны браться из других таблиц. Т.е. основная задача - как сделать эти 114 выпадающих списка и привязать их к большому гриду (как-то не хочется 114 таблиц (1 табл - список вариантов 1 параметра) делать). Если делать тремя табличками, то думаю ввод данных будет не очень симпатичным (выбираешь из списка параметр и вводишь его значение, но так как ВВОДИТЬ НИЧЕГО собственно не надо (надо ВЫБИРАТЬ) - то придется придумывать автофильтр для текушего параметра). Я просто представить себе не могу юзера, который согласиться заносить данные в грид, содержащий более 100 полей... Краткий экскурс в прошлое, объясняющий, почему клиент желает большой грид: просто несколько лет назад ему написали на PowerBuilder'e базу (на другую тему), с которой он длительное время работал; а в нем (PowerBuilder'e) как известно, сделать 114 списков не так-то сложно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2004, 20:04 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=32387431&tid=1546612]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
167ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
| others: | 13ms |
| total: | 283ms |

| 0 / 0 |
