Ilia
20.09.2017
08:44:43
Пол , наконец... (оригинальный)
Denis
20.09.2017
08:45:10
Хм) Тайланд делает чудеса
Ilia
20.09.2017
08:45:29
ОРИГИНАЛЬНЫЙ пол.
ИСХОДНЫЙ
Google
Denis
20.09.2017
08:47:41
Ха) Кто ж разберет этот пол) В общем, все сводится к тому, что у меня есть набор уникальных данных пациента (которые я считаю на текущий момент просто идентификатором), которые могу или держать в дополнительной таблице и иметь внешние ключи, или просто на уровне сервера генерировать или находить uuid и не создавать доп таблицы и попрощаться в внешними ключами
Только учти, что пациенты - это только малая часть. Там до черта всего нужно по такой же схеме версионировать
Ilia
20.09.2017
08:48:58
Ты по-моему непробиваем...
Нахера тебе прощаться с внешними ключами?
Denis
20.09.2017
08:50:09
Кроме усложнения схемы и дополнительных дублированных данных причин нет
Ilia
20.09.2017
08:50:18
Если ты правильно спроектируешь БД, у тебя будет всё ОК с FK.
Denis
20.09.2017
08:53:50
ПРимер усложнения и дублирования.
1 вариант. Table patient (patid serial pk), table patcard (patid int, stamp timestamp, (patid, stamp) - pk, patid - fk)
2 вариант. Table patcard (patid uuid, stamp timestamp, (patid, stamp) - pk)
Ilia
20.09.2017
08:57:27
Делай вариант 1, в чём усложнение-то?
Вставить ещё одну запись усложнение?
Denis
20.09.2017
08:59:10
Лишние данные. Речь, повторю, не только про пациентов и карточки. Там много таблиц будет иметь дубль с идентификаторами.
Ilia
20.09.2017
09:00:16
Увы, тебе придётся делать сложную структуру, если у тебя temporal data...
Да, таблиц будет в 1.5. примерно раза больше.
Google
Ilia
20.09.2017
09:00:48
в чём сложность — всё равно не понятно.
У тебя там на всю эту хрень будет таблиц 100-200 всего.
Это не очень и большая БД.
Denis
20.09.2017
09:02:39
@MasterZiv спасибо за совет и мнение! Я обдумаю, что ты мне сказал
Fike
20.09.2017
11:43:24
но мне кажется, это не ваш случай
Ilia
20.09.2017
12:10:39
Denis
20.09.2017
12:31:12
Fike
20.09.2017
12:48:47
А чё ты спрашиваешь, сам всё знаешь...
Ну опасность вставить ключ на несуществующий документ - это из разряда опасности неверности ввода данных оператором. Можно сделать дополнительную защиту на уровне БД, конечно, но это не помешает, например, указать неверный но существующий ключ.
Denis
20.09.2017
12:54:53
Fike
20.09.2017
12:55:16
давайте выясним, откуда он вощьмется
этот самый несуществующий ключ
Denis
20.09.2017
12:55:55
только из фатальной ошибки в коде, больше не откуда
а если такая ошибка есть, то вряд ли от нее защитит внешний ключ (хотя есть шанс, да)
Fike
20.09.2017
12:56:31
кому придет в голову умножать автоинкремент на два, скажем?
куда вероятнее что малолетний хацкер будет посылать в апи все что попало
и здесь ему без разницы, нуллы пихать или существующие документы
Denis
20.09.2017
12:58:27
ну, это решается валидацией входных данных в хранимках
Google
Fike
20.09.2017
13:02:54
вам нужна AI-complete хранимка, чтобы отследить баловство
Denis
20.09.2017
13:12:22
Ну для начала достаточно на уровне хранимки проверки прав доступа пользователя и проверки, что он обращается к доступным ему данным.
Fike
20.09.2017
13:12:50
ну вообще это все конечно в приложении должно быть
но я про то, что всё это борьба с не очень детерминированными штуками, против которых внешние ключи представляют частичную защиту
Denis
20.09.2017
13:14:21
Я согласен, внешние ключи - это просто ещё один пункт защиты из многих.
@etkee спасибо за обсуждение и советы
Ilia
20.09.2017
13:16:55
Denis
20.09.2017
13:18:06
Ilia
20.09.2017
13:20:59
Главное помни, что душа твоя родная, и бессмертная, одна!
Старый
20.09.2017
13:38:30
Fike
20.09.2017
13:44:16
ну да, мог бы за отсутствие восприимчивости к сарказму предложить
Марк
20.09.2017
13:49:20
Select null
Но как выше заметили, зачем вообще использовать else... ?
Пасиб. Интересовало именно наличие какой-то управляющей директивы. И еще вопросец: Чего почитать, чтобы ебашить свободно запросы размером с А4. А то какие-то простенькие джойны могу, а вот когда речь заходит о подсчетах интервалов и прочем дерьме, я упираюсь в собственное невежество.
Ilia
20.09.2017
13:50:02
Марк
20.09.2017
13:51:13
http://specfx.narod.ru/books/SQL_M_Gruber.pdf
Эта?
Alex
20.09.2017
13:58:13
https://medium.com/fuzzy-sharp/migrating-to-postgres-2dc1519a6dc7
Ilia
20.09.2017
13:58:27
Старый
21.09.2017
11:16:00
https://msdn.microsoft.com/en-US/library/ff877884(SQL.120).aspx от скольки нод это реально работает, кто пробовал?
Google
aster
21.09.2017
11:26:29
от двух
некоторые деятели даже умудряются без АД запилить
https://www.sqlpassion.at/archive/2016/01/11/how-to-create-a-sql-server-availability-group-without-an-active-directory-domain/
Vladislav
21.09.2017
12:18:51
В продолжение разговора про SCD, есть таблица смены статусов с одной датой, надо разложить на два столбца. Проблема в том, что иногда статус может меняться на тот же, соответственно есть об этом запись, а результат нужен, где одна колонка с одним конкретным статусом, а вторая с другим...
И вот тут я затупил, может кто направить в нужное русло?
Admin
Denis
21.09.2017
12:23:01
Можете ещё раз и более детально?
Vladislav
21.09.2017
12:24:35
таблица: client, status, dt
status имеет два значения
надо получить: client, end_dt, start_dt
проблема в том, что может быть такие записи:
client1, status1, dt1
client1, status0, dt2
client1, status1, dt2
client1, status0, dt3
из которых надо получить:
client1, dt1, dt3
а может быть такие записи:
client1, status1, dt1
client1, status1, dt2
client1, status0, dt2
client1, status1, dt3
из которых надо получить:
client1, dt2, dt3
Denis
21.09.2017
12:27:51
Похоже на задачу gaps and islands
Serg
21.09.2017
12:27:59
в mysql удалил несколько партиций у таблички. как теперь освободить место на диске ?
OPTIMIZE TABLE zabbix.history_log;
так ?
Fike
21.09.2017
12:30:59
а может быть такие записи:
client1, status1, dt1
client1, status1, dt2
client1, status0, dt2
client1, status1, dt3
из которых надо получить:
client1, dt2, dt3
не понял принцип формирования результата, условия точно описаны верно?
Старый
21.09.2017
12:32:06
aster
21.09.2017
12:32:54
14 и 16 - отличия минимальны. не помню сейчас в чем.
но они реально не большие
Vladislav
21.09.2017
12:35:13
похоже на очередную фигню от аналитиков
Fike
21.09.2017
12:35:56
короче, если надо игнорировать записи с новым статусом, идентичным предыдущемум
то просто создается новая колонка status_changed (bool)
Vladislav
21.09.2017
12:36:44
и как её формировать запросом? мне не надо таблицу, мне нужно просто выгрузить
Google
Fike
21.09.2017
12:37:41
А, я предполагал заполнять ее при вставке. Ну подзапросом как минимум :shruggie:
Vladislav
21.09.2017
12:38:09
который будет с having?
Fike
21.09.2017
12:39:59
я предполагал фильтровать записи по where not exists и получить cte/view из исходной таблицы
Vladislav
21.09.2017
12:40:38
а каким боком ты проверишь прошлый статус?
Fike
21.09.2017
12:41:17
select * where client = this.client and dt < this.dt order by dt desc limit 1
Vladislav
21.09.2017
12:41:46
тот же having почти...
Fike
21.09.2017
12:41:46
хотя да, тут чуть посложнее чем exists
Vladislav
21.09.2017
12:41:51
вот данные, мне по клиенту 2 надо получить две строчки:
2, 2016-10-05 16:15:43, 2016-10-05 17:45:40
2, 2017-08-03 10:21:59, 2017-08-03 14:30:22
блин, кажись догнал
Fike
21.09.2017
12:43:11
2 -> 3 -> 2?
если в лоб, то берем все 3, находим предыдущие 2, находим последующие 2, так или иначе убираем дубликаты
Vladislav
21.09.2017
12:45:01
вот да, я тоже так подумал
Dmitry
21.09.2017
12:45:25
если нужно убрать дубликаты и версия ниже 5.6 можно попробовать alter table add unique ignore
Vladislav
21.09.2017
12:46:09
с чего решили, что у меня mysql =))