Гость
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Подоскажите идею - хранение в БД разных по типу сущностей и удобная работа с ними / 22 сообщений из 22, страница 1 из 1
06.08.2021, 19:36
    #40089266
GrigoriyFomin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подоскажите идею - хранение в БД разных по типу сущностей и удобная работа с ними
Доброго дня. Есть задача - хранить результаты анализов человеческих в БД. Проблема - тип результата анализа непостоянный и должен контролироваться допустимыми пределами, а в идеале, еще и определять норма/ниже нормы/выше нормы. Результат может быть int, float, text, список значений. Например - цвет мочи - он из списка значений, температура - это флоат, пульс - инт и т.п.
Планирую хранить в виде <ИД типа анализа><Значение анализа:текст> и в тексте хранить все. Только как потом это редактировать? В гриде ж можно только 1 тип указывать - как сделать, что в зависимости от типа анализа (точнее типа нужного результата) подставлять в грид либо комбобокс, либо TextEdit, либо NumberEdit? Планирую задействовать девок и вертикалгрид, но набор параметров разный - анализ крови - один набор параметров, анализ мочи - другие...
...
Рейтинг: 0 / 0
06.08.2021, 19:39
    #40089267
Softologic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подоскажите идею - хранение в БД разных по типу сущностей и удобная работа с ними
GrigoriyFomin,

Вы с вопросом выбора СУБД не можете определиться? Так любая подойдет, задачи то у вас простейшие.
...
Рейтинг: 0 / 0
06.08.2021, 19:45
    #40089268
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подоскажите идею - хранение в БД разных по типу сущностей и удобная работа с ними
GrigoriyFomin
в тексте хранить все
Глупейшая идея
GrigoriyFomin
Например - цвет мочи - он из списка значений
Что отлично описывается целым энумератором
GrigoriyFomin
температура - это флоат
Как минимум - это NUMERIC(3, 1). А если умножить на 10, то опять целое
GrigoriyFomin
<ИД типа анализа><Значение анализа:текст>
Мысль почти правильная.
ID Анализа
Тип измерения
Значение (например NUMERIC(18, 6))

По типу измерения проводить валидацию
...
Рейтинг: 0 / 0
06.08.2021, 20:01
    #40089270
GrigoriyFomin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подоскажите идею - хранение в БД разных по типу сущностей и удобная работа с ними
_Vasilisk_,

а простой текст как хранить? НАпример ">15%"
...
Рейтинг: 0 / 0
06.08.2021, 20:10
    #40089271
Vlad F
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подоскажите идею - хранение в БД разных по типу сущностей и удобная работа с ними
GrigoriyFomin,

Вспомнилось, вот, кое-что из классики.))
https://compress.ru/article.aspx?id=11515
...
Рейтинг: 0 / 0
06.08.2021, 20:18
    #40089275
Relic Hunter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подоскажите идею - хранение в БД разных по типу сущностей и удобная работа с ними
GrigoriyFomin
_Vasilisk_,

а простой текст как хранить? НАпример ">15%"
16%
...
Рейтинг: 0 / 0
06.08.2021, 20:56
    #40089283
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подоскажите идею - хранение в БД разных по типу сущностей и удобная работа с ними
GrigoriyFomin
а простой текст как хранить?
Добавьте еще текстовое поле
...
Рейтинг: 0 / 0
06.08.2021, 22:50
    #40089298
GrigoriyFomin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подоскажите идею - хранение в БД разных по типу сущностей и удобная работа с ними
_Vasilisk_
GrigoriyFomin
а простой текст как хранить?
Добавьте еще текстовое поле

да я добавлю хоть десяток полей под каждый тип - как это в ГУЕ реализовать? хочется, как в ObjectInspector - у каждого параметра свой редактор в зависимости от типа, но там RTTI - вагон самогона надо, чтоб понять и реализовать - куча ссылок на ссылки - это сишная шняга мозг выносит кому угодно.
...
Рейтинг: 0 / 0
06.08.2021, 23:20
    #40089300
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подоскажите идею - хранение в БД разных по типу сущностей и удобная работа с ними
GrigoriyFomin
хочется, как в ObjectInspector
Код: pascal
1.
2.
3.
4.
uses
  Vcl.ValEdit;

  FEditor: TValueListEditor
...
Рейтинг: 0 / 0
07.08.2021, 00:27
    #40089303
Vlad F
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подоскажите идею - хранение в БД разных по типу сущностей и удобная работа с ними
_Vasilisk_,

Кстати, на последнем скриншоте в вышеприведённой статье оно типа такого что-то и есть. Только 20 лет назад, очевидно, ничего такого готового доступного не было.
...
Рейтинг: 0 / 0
07.08.2021, 00:44
    #40089304
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подоскажите идею - хранение в БД разных по типу сущностей и удобная работа с ними
Я бы не валил всё в кучу, а разносил отдельные анализы по разным таблицам и разным UI.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
07.08.2021, 21:08
    #40089375
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подоскажите идею - хранение в БД разных по типу сущностей и удобная работа с ними
Dimitry Sibiryakov

Я бы не валил всё в кучу, а разносил отдельные анализы по разным таблицам и разным UI.


Дим, так не интересно :( Надо сначала все в кучу обязательно. А уже потом, лет через - разбираться нафига оно было так сделано :)
...
Рейтинг: 0 / 0
08.08.2021, 11:44
    #40089407
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подоскажите идею - хранение в БД разных по типу сущностей и удобная работа с ними
GrigoriyFomin,

не надо тут никаких объектов и деревьев. Потому что их просто нет. Есть параметры крови, есть параметры мочи. Это отдельные сущности со своим набором параметров. В базе это хранится как отдельные таблицы. При чем, тут их всего ДВЕ таблицы. Городить объектное хранилище ради этого - боже упаси.
GrigoriyFomin Результат может быть int, float, text, список значений.
да не может. Цвет это всегда цвет, он не может превратиться во что-то другое. Это в карман себе вы можете всякого напихать. А у крови и мочи список параметров постоянный, и тип этих параметров давно известен.
...
Рейтинг: 0 / 0
08.08.2021, 12:52
    #40089414
GrigoriyFomin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подоскажите идею - хранение в БД разных по типу сущностей и удобная работа с ними
kdv,

а кто говорил, что анализа всего два? Это лаборатория - составы анализов - вещь динамичная. Сегодня одни наборы, завтра закупят реактивы или новую машину - и появятся новые показатели. Поэтому это должно быть универсальное решение
...
Рейтинг: 0 / 0
08.08.2021, 13:08
    #40089415
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подоскажите идею - хранение в БД разных по типу сущностей и удобная работа с ними
Значит добавишь в таблицу новые поля или новые таблицы под новые анализы. О том, чтобы
нагружать пользователей универсальным интерфейсом лучше забудь, у них своя работа есть, а
продираться сквозь твои изыски - нет времени.

"Реактивы и машины" не из воздуха материализуются, поэтому работай на опережение, добавляй
не только анализы проводимые сейчас, но и те, что могут начать делаться позже.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
08.08.2021, 13:31
    #40089420
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подоскажите идею - хранение в БД разных по типу сущностей и удобная работа с ними
GrigoriyFominПоэтому это должно быть универсальное решение
совсем нет. Вас почему-то путает необходимость работы с разными источниками (моча, кровь, ...). Вы внезапно наделяете эти источники "разным количеством и типом параметров", хотя это не так.
Кровь это кровь, у нее известен только один набор характеристик. А значит это один объект, с явным количеством параметров.
Нет никакой нужды каждый замер крови хранить как отдельный объект.
У "объектных хранилищ" самая больная мозоль - это производительность и сложность запросов, которыми вытаскиваются данные.
Я понимаю, что вам хочется "замутить что-нибудь эдакое, интересное", но нет, не надо этого делать.
И потом, данные из обычных, "плоских" таблиц можно вполне выводить в иерархическом виде. Только тут это нафиг не надо.
...
Рейтинг: 0 / 0
08.08.2021, 15:13
    #40089440
Bali
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подоскажите идею - хранение в БД разных по типу сущностей и удобная работа с ними
GrigoriyFomin
Поэтому это должно быть универсальное решение

Универсальное решение:
Код объекта исследования (Кровь, моча и т.д.); Код исследования; Код показателя; Значение.
И справочники объектов исследования, типов исследования, показателей (с референсными значениями).
И не каких больше, меньше. Всегда можно сделать выборку и группировку больше(меньше) по сравнению с референсным значением,
...
Рейтинг: 0 / 0
08.08.2021, 17:08
    #40089476
Virtual Student
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подоскажите идею - хранение в БД разных по типу сущностей и удобная работа с ними
GrigoriyFomin

Поэтому это должно быть универсальное решение

Код: sql
1.
create table [anal] :) ([id] bigint, [ida] int {тип анализа}, [date] datetime, [xml] nvarchar(max), ...)


1. Каждый тип анализа - класс для сохранения/загрузки xml-документа. В каждом таком классе классовое свойство (метод) отвечающий типу анализа.
2. Менеджер классов, выбирающий нужный класс, для сохранения/загрузки анализов по типам из таблицы.

Например:

Код: pascal
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.
TIdAnal = Word;

TBaseAnal = class
public
  procedure Load(AXml: string); virtual;
  procedure Save(var AXml: string); virtual;
  ...
  property IdAnal: TIdAnal;
  ...
end;

TAnal1 = class(TBaseAnal)
public 
  procedure Load(AXml: string); override;
  procedure Save(var AXml: string); override;
  ...
  property IdAnal: TIdAnal;
  ...
end;

TAnal2 = class(TBaseAnal)
...
TAnal99...

TAnalManager = class
  function GetAnalClass(const AIdAnal: TIdAnal): TBaseAnal ; 
public
  procedure Load(DataSet: TDataSet);
  procedure Save(DataSet: TDataSet);
end;


Дальше полет фантазии. Но, вроде, идея должна быть понятна...
...
Рейтинг: 0 / 0
08.08.2021, 18:55
    #40089517
bk0010
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подоскажите идею - хранение в БД разных по типу сущностей и удобная работа с ними
Virtual Student
Код: pascal
1.
TAnalManager = class

Дальше полет фантазии.
Да, почти 2 часа прошло, а еще никто не спошлил про AnalManager... Форум высокой культуры!
PS Про полет фантазии тут тоже очень к месту.
...
Рейтинг: 0 / 0
08.08.2021, 21:50
    #40089571
delphinotes
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подоскажите идею - хранение в БД разных по типу сущностей и удобная работа с ними
GrigoriyFomin,

Моё видение (без погружения в предметную область, т.е. на вскидку) такое. По таблицам в БД.
Первая группа - описательная (справочники):
- 1.1 виды биоматериалов (кровь, моча и т.п.)
- 1.2 типы анализов (общая биохимия, специфичная) - возможно дочерняя к 1.1
- 1.3 типы показателей (цвет, хим. элемент и т.п.) - дочерняя к 1.1
- 1.4 применимость показателей к конкретному типу анализа (многие-ко-многим между 1.2 и 1.3)
Вторая группа - предметная (анализы)
- 2.1 документ (анализ: вид, тип, дата, ФИО и т.п.)
- 2.2 показатели - дочерняя к 2.1 (показатель, значение)

Далее самое интересное, 1.3 должна описывать тип значения показателя - целое/вещественное/выбор и справочника/произвольный текст и т.п., допустимые границы (для ограничения пользовательского ввода, чтобы пользователь в принципе не мог ввести бред).
Нормы значений (верхняя/нижняя граница нормы) - наверное на уровне 1.4 (либо и на уровне 1.3 - как умалчиваемая норма, так и на уровне 1.4 - как норма для конкретного типа анализа)
Таблица 2.2 - это просто пара вида атрибут = значение (ессно со ссылкой на "объект" и возможно доп. комментариями). Для простоты я бы значения хранил просто в текстовом столбце (вряд ли нужна будет какая-то крутая аналитика по всем анализам от разных людей), но обязательно в фиксированном для каждого типа значения формате (типа если число - то без пробелов и точка как разделитель) с валидацией при вводе.

Для визуализации можно использовать любой грид, который позволяет при редактировании значения создавать свой контрол для ввода значения, и уже динамически от типа редактируемого значения можно создавать TEdit/TNumberedEdit/TCombobox/TCheckBox и т.п.
(Я такое делал в VirtualTreeView + едиты из EhLib - кода не мало, но работает на ура.)

А по поводу сложности построения запросов - да, запросы писать не удобно, но:
а) никто не мешает написать функцию вида get_attr_value(object_id, attr_id)
б) проще сделать N-представлений (вьюх или запросов, которые можно строить динамически по описательной части), чем N-таблиц и всё равно N-запросов к ним.
...
Рейтинг: 0 / 0
08.08.2021, 21:56
    #40089572
GrigoriyFomin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подоскажите идею - хранение в БД разных по типу сущностей и удобная работа с ними
Всем спасибо за участие, особенно понравились идеи и примеры от Virtual Student и delphinotes !!!!
...
Рейтинг: 0 / 0
09.08.2021, 01:00
    #40089599
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подоскажите идею - хранение в БД разных по типу сущностей и удобная работа с ними
GrigoriyFomin,

да. "create table [anal]" - это пять.
Вообще, вам надо было сразу сюда
https://www.sql.ru/forum/db-design

Но я сразу могу сказать - таблица в БД с основными данными в xml - это хрень полная. То есть, это значит, что по всем параметрам анализов не предполагается проводить какие-то статистические или поисковые функции.
Сколько самих анализов вообще предполагается хранить в этой БД?
Искали вы уже примеры реализации хранения в БД анализов такого типа?
И т.д.
А так, если заняться нечем - самообразование всегда полезно, независимо от отрицательного или положительного результата.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Подоскажите идею - хранение в БД разных по типу сущностей и удобная работа с ними / 22 сообщений из 22, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]