172 похожих чатов

> А я поддержу https://t.me/pgsql/268012 ;) И добавлю проблемы с

консистентностью (в JSON легко "сохранить" всё что угодно вместо корректных данных).
> А почему не нормализованная схема? Даже с учётом "ибо ответ может быть bool/timestamp/int/string" — что там получается, если спроектировать, Вы смотрели?

В логике программы там всё равно будут методы приведения типов. То есть и так и так, то, что достанется из базы данных конвертировать в типы языка (тут go). Если это json, то сама анкета хранит информацию о типах и прога к нормальным типам привести сможет, даже с учётом всяких деталей типа 32/64 бита, деятичные знаки float и т.д.. Вся разница в двух подходах лишь в том, что с json все нюансы продумывать самому, а с "нормальной" моделью частично драйвер. Но там всё равно, либо делать колонки под каждый тип, либо в базу заливать бинарные значения, а потом их расшифровывать. Логику и так и так писать.

И разница получается такая. В случае с JSON одну запись БД по сути можно представить как BINARY, которая парсится в программе. Я получаю строку JSON, которую потом обрабатываю. Это одна строка БД на одну заполненную анкету.

С другой стороны, когда храню ключ-значение в BINARY, мне всё равно надо парсить это BINARY. Даже если хранить не BINARY, а делать в БД одну колонку на каждый тип (что тоже такое себе...), то всё равно в программе надо будет собирать кусками всё. Но при этом добавляются индексы, существенно увеличивается число записей БД. А логика программы такая, что доставать всё равно надо будет целиком данные анкеты. То есть не надо доставать два ответа на первые вопросы, а остальные ответы не доставать.

Вот в результате таких рассуждений пришёл к выводу, что JSON больше подходит.

1 ответов

12 просмотров

> То есть и так и так, то, что достанется из базы данных конвертировать в типы языка (тут go). Хмм... и что, у go существенные проблемы с типами данных (я просто не в курсе)? > Вся разница в двух подходах лишь в том Не только же? С нормализованной моделью "нюансы" может взять на себя СУБД, и определяются они декларативно или являются частью модели (CHECK, FK и т.п.). > Но там всё равно, либо делать колонки под каждый тип, То есть Вы уже пробовали моделировать? И только такая (примерно) схема получается? > Логику и так и так писать. Но сложность написания разная, см. выше. > С другой стороны, когда храню ключ-значение в BINARY, мне всё равно надо парсить это BINARY. Нет, если СУБД должно быть всё равно, что там хранится (если для PostgreSQL это не более чем blob), то можно хоть bytea использовать, хоть text, хоть JSON — то, с чем удобнее работать приложению (при условии, что оно будет только одно). Т.е. если PostgreSQL используется "тупо для хранения" — почему нет?

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
Карта сайта