
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, есть таблица смены статусов с одной датой, надо разложить на два столбца. Проблема в том, что иногда статус может меняться на тот же, соответственно есть об этом запись, а результат нужен, где одна колонка с одним конкретным статусом, а вторая с другим...
И вот тут я затупил, может кто направить в нужное русло?

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
и как её формировать запросом? мне не надо таблицу, мне нужно просто выгрузить

Fike
21.09.2017
12:37:41
А, я предполагал заполнять ее при вставке. Ну подзапросом как минимум :shruggie:

Google

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 =))