@dba_ru

Страница 254 из 718
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 спасибо за совет и мнение! Я обдумаю, что ты мне сказал

Ilia
20.09.2017
12:10:39
Что опасного-то?
А чё ты спрашиваешь, сам всё знаешь...

Denis
20.09.2017
12:31:12
event sourcing
да, это не совсем мой случай

Fike
20.09.2017
12:48:47
А чё ты спрашиваешь, сам всё знаешь...
Ну опасность вставить ключ на несуществующий документ - это из разряда опасности неверности ввода данных оператором. Можно сделать дополнительную защиту на уровне БД, конечно, но это не помешает, например, указать неверный но существующий ключ.

Denis
20.09.2017
12:54:53
Ну опасность вставить ключ на несуществующий документ - это из разряда опасности неверности ввода данных оператором. Можно сделать дополнительную защиту на уровне БД, конечно, но это не помешает, например, указать неверный но существующий ключ.
разница в том, что в отличие от неверного ввода данных, при несуществующем ключе при джойнах мы будем получать null там, где рассчитывали на данные. хотя это не самая страшная вещь, которую можно обработать.

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

Марк
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
Эта?
Эта.

http://specfx.narod.ru/books/SQL_M_Gruber.pdf
Только поищи издание как можно более позднее, их было штуки 3.

Старый
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
Старый
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 =))

Страница 254 из 718