Al
20.09.2017
05:45:54
Классика. Нет тз. Он не знает что выбрать
Можно монетку подкинуть
Denis
20.09.2017
05:48:37
момент, уточняю. есть задача про амбулаторные карты пациента. у пациентов меняются данные в картах, напирмер фио, адреса. есть так же полиса, документы, которые валидны только на определенный временной срез. данные вносятся в карты из внешних систем типа фомса и из регистратур (вживую пользователями). необходимо иметь в карте возможность увидеть данные на определенный момент времени по определенному источнику данных
пока склоняюсь к четвертому типу
Google
Vladislav
20.09.2017
05:50:59
Я сейчас по типам не помню, но смысл в том, что если классические реляционки, то в большинстве своем удобно по двум полям: start и end.
По одному полю выгодно, если БД колоночная и если есть хорошие аналитические функции, чтобы вынимать данные по этому одному полю
Al
20.09.2017
05:52:06
Vladislav
20.09.2017
05:52:46
Ну и еще стоит учесть, что по одному полю очень геморно иногда писать запросы, т.к. надо делать под запросы, тогда как по двум полям достаточно просто условия
Denis
20.09.2017
05:53:44
а при этом ссылочной целостности мы машем ручкой и прощаемся в внешними ключами, верно?
Vladislav
20.09.2017
05:53:50
Это очень важный момент, если надо потом данные распихивать на уровне какого-нибудь ORM или стандартизированного ETL
Al
20.09.2017
05:54:32
У меня такое впечатление что большинство людей воспринимают примеры решений как конечный паттерн в который нельзя вносить изменения под страхом импотенции
Заведи еще 100500 колонок и размещай в них ключи и ссылки и что там еще зачешется. Можешь даже даты в юникc тайм записывать. Что бы в условиях выборки проще искать. 3456 <t <456788
Denis
20.09.2017
06:02:07
ну нет, все не так страшно. смотрите, приведу пример. у меня есть пациенты,чьи контракты (документы, полисы) версионируются. грубо говоря, есть таблица в которой у одного пациента есть записи вида patid, stamp. есть контракты этого пациента вида conid, stamp, patid. ссылка осуществляется не на конкретную версию пациента, а просто на его идентификатор, так как карта пациента и его контракты меняются в разное время. в данном случае внешний ключ создать нельзя
я могу все перевести на uuid или создавать суррогатную таблицу с идентификатором пациента, на который будут ссылаться версии карты этого пациента
первый вариант хоронит uuid, второй - лишняя таблица для каждой версионируемой сущности
Al
20.09.2017
06:03:54
Пойду застрелюсь
Denis
20.09.2017
06:04:48
хи) а перед смертью прощальную записку не напишите по моему вопросу?
Google
Al
20.09.2017
06:09:38
Я написал уже
Но у вас же свои варианты.
Это типа прошу помощи, но делать буду вот так.
Ilia
20.09.2017
06:12:12
пока склоняюсь к четвертому типу
Так надо адаптивно принимать решение по каждому атрибуту, который меняется, в соответствии с ТЗ, потому что я думаю смену ФИО можно и перезаписать, а смену полиса явно надо жёстко хранить.
Denis
20.09.2017
06:13:22
Ilia
20.09.2017
06:14:32
Анахрена их вообще искать в аналитической базе?
Al
20.09.2017
06:16:29
И так далее
Denis
20.09.2017
06:17:05
Старый
20.09.2017
06:18:27
Ilia
20.09.2017
06:19:15
Ну все равно в бд надо решать про все атрибуты индивидуально
ФИО - текущее в таблице справочнике и в отдельной таблице Алиасы с датами.
Al
20.09.2017
06:21:54
Denis
20.09.2017
06:21:55
Тогда при чем тут Slowly Changing Dimensions ?
атрибуты пациента меняются не часто и должны версионироваться. при этом нужно видеть на каждый временной срез состояние пациента и его контрактов и быть способным создать выгрузку в тот же фомс по данным из его базы на нужный момент времени ((не спрашивайте, все беспощадно)
Ilia
20.09.2017
06:21:59
Denis
20.09.2017
06:22:08
что же это, если не scd?
Al
20.09.2017
06:22:38
Ilia
20.09.2017
06:22:38
Денис, просто как подходы это рассмотреть можно
Al
20.09.2017
06:22:56
Влажные фантазии?
Старый
20.09.2017
06:23:12
Ты хохлосрачь тут устроить собираешься?
а он тут причём? это вообщет данные минздрава, что они сократили 63к больничных коек и сколько то там больниц, и что мы пришли к результатам 1913 года по кол-ву врачей и больничных коек
Google
Denis
20.09.2017
06:23:13
Ilia
20.09.2017
06:23:18
Но там половина из тех типов отпадут у тебя просто потому что у тебя бд не склад данных, а оперативная
Denis
20.09.2017
06:25:18
Кривые руки?
а если конструктивно, что не так? я серьезно, поправьте лучше сейчас
Ilia
20.09.2017
06:25:47
Старый
20.09.2017
06:26:43
ну ты хоть так не смеши
Al
20.09.2017
06:26:53
Ilia
20.09.2017
06:27:00
Без этого можно только пальцем в небо тыкать
Старый
20.09.2017
06:27:52
Denis
20.09.2017
06:28:57
вообще вопрос изначально был - кто делал что-то похожее на scd и какие подводные камни были, поделитесь опытом. а вы пытаетесь решить мою задачу сейчас
Ilia
20.09.2017
06:29:48
Ну, я поделился
Старый
20.09.2017
06:30:22
есть хотелка, но тз нет
Denis
20.09.2017
06:31:10
Al
20.09.2017
06:32:56
Ilia
20.09.2017
06:33:25
А подводные камни известны, надо чтобы всегда была возможность выдать данные на сейчас и на дату в прошлом, при этом чтобы делалось это оптимальным для 80 % задач образом
Google
Старый
20.09.2017
06:33:39
сервис недел лежит, да и ладно
Ilia
20.09.2017
06:34:26
Старый
20.09.2017
06:35:14
Al
20.09.2017
06:35:24
Ilya
20.09.2017
06:35:53
Старый
20.09.2017
06:36:21
Ilia
20.09.2017
06:37:04
Старый
20.09.2017
06:39:31
Ты как бы ежели не нравится, не стесняйся, увольняйся...
я не занимаюсь проектированием базы, мне пофиг, я лишь инфраструктуру и нагрузку поддерживаю, и смотрю где проблемы, я лишь говорю о том, что идеальный мир к госам приписывать не надо, увольняться дело хорошее, но куда ты пристроишь 80 тыс человек?
Ilia
20.09.2017
06:42:44
Ты то один, не 80тыщ
Старый
20.09.2017
06:43:24
Al
20.09.2017
06:45:07
Он считает это вариантом
Старый
20.09.2017
06:46:04
Ilia
20.09.2017
06:46:08
Denis
20.09.2017
06:46:21
Al
20.09.2017
06:48:08
первый вариант хоронит uuid, второй - лишняя таблица для каждой версионируемой сущности
Denis
20.09.2017
06:48:18
я предполагал одну таблицу для карт пациента с временными штампами. классический четвертый тип scd, его единственный минус - на него нельзя создавать внешние ключи. это меня смутило, полез к вам за опытом
Al
20.09.2017
06:49:44
Google
Denis
20.09.2017
06:49:48
Al
20.09.2017
06:50:50
Denis
20.09.2017
06:56:37
на самом деле у меня есть главный вопрос - сколь опасно отказываться от внешних ключей и вводить версии для карт пациентов, по которым еще будет строиться аналитика. вроде если все правильно написать, все должно быть корректно. но внутренне содрагаюсь отказываться от защиты от дурака (себя) в виде внешних ключей
Ilia
20.09.2017
08:29:51
Опасно. Но это зависит от твоей архитектуры приложения, потому как может у тебя там 20 проверок перекрёстных по данным до того, как всё это попадает в БД...
Но я вообще не понимаю постановку вопроса : почему ты должен от FK отказываться?
Что мешает их делать всегда ?
Denis
20.09.2017
08:36:12
Ну смотри, есть две таблицы - пациенты и контракты пациентов. В таблице пациенты первичный ключ, допустим, (patid, stamp). В таблице контрактов условно три колонки - conid, stamp, patid. Первичный ключ - (conid, stamp), поле patid должно по идее ссылаться на пациентов в виде внешнего ключа, но не может, так как в таблице пациентов уникален лишь составной ключ (patid, stamp). Я думал для каждой версионируемой таблицы создавать ещё одну, например «уникальные id пациента» с первичным ключом patid, но это overhead, да и такие конструкции слишком много где жегородить придётся
Ilia
20.09.2017
08:37:10
В таблице пациенты первичный ключ, допустим, (patid, stamp).
Почему такой-то ?
Ты же на пациента контракт заводишь, а не на его паспортные данные ...
Нет, у тебя всё не так.
Тебе надо сделать одну таблицу пациентов, и там хранить неменяющиеся со временем данные, и к ней создать дочернюю таблицу, 1:N, где будут периоды действия данных и данные, которые ты будешь менять со временем.
Ссылаясь на поциэнта, ты должен ссылаться на главную таблицу с (patient_id) в виде ключа.
Ссылаясь на какие-то его данные — уже на дочернюю с ключём (patient_id, ...)
Denis
20.09.2017
08:40:33
Я понимаю идею, это как раз тот вариант где я создаю таблицу уникальный идентификаторов пациента из одной колонки - это единственное, что не может меняться)
Ilia
20.09.2017
08:40:50
Вряд ли, но путь так
Дата рождения, напр. не будет меняться.
Denis
20.09.2017
08:41:39
Поверь, так. Дата рождения - это атрибут паспорта. Можно радикально все менять
Ilia
20.09.2017
08:42:15
бл.. я име ю в виду биологическое рождение, а не по паспорту
Я понимаю, что молодуха может себе написать, что ей 38 а не 55, но от этого климакс у неё не остановится...
По паспорту это вообще в отдельных таблицах должно быть, документы, паспортные данные. и т.п.
Denis
20.09.2017
08:43:53
Я понимаю, только задача про источники данных, которым нет доверия. В базе Фомса зачастую неправильные даты рождения, данные распарила и т.д. Там есть сложный алгоритм поиска пациентов
Ilia
20.09.2017
08:44:32
Группа крови, резус, я не знаю медицину. но дофига у тебя будет показателей именно медицинских , не изменяемых.