Программирование

Ответить в тред Ответить в тред
Check this out!
Шардинговый реплицируемый баз данных тред. Бесконечный перекат Edition v1.1 /sql/ Аноним 12/03/21 Птн 08:17:03 19645731
изображение.png 3104Кб, 1951x2560
1951x2560
изображение.png 284Кб, 429x420
429x420
Новый баз данных тред, теперь с альфа-версией шапки.

Здесь мы:
- Негодуем, почему шапка - говно, и предлагаем коллективному ОПу идеи, как её улучшить.
- Разбираемся, почему PostgreSQL - не Oracle
- Пытаемся понять, зачем нужен Тырпрайс, если есть бесплатный опенсурс
- Обсуждаем, какие новые тенденции хранения данных появляются в современном цифровом обеществе
- Решаем всем тредом лабы для заплутавших студентов и задачки с sql-ex для тех, у кого завтра ПЕРВОЕ собеседование
- Анализируем, как работает поиск вконтакте
- И просто хорошо проводим время, обсирая чужой код, не раскрывая, как писать правильно


Туториалы на русском для тех, кто не умеет гуглить, не может в английский и вообще готов жрать что угодно:
SQL:
- MySQL, Postgres, SQL Server: https://metanit.com/sql/
- Синтаксис SQL кратко: https://learnxinyminutes.com/docs/ru-ru/sql-ru/
- Плейлисты по разным СУБД: https://www.youtube.com/c/SQLDeveloperBI/playlists
- Тоже плейлист, сортировка хуёвая: https://www.youtube.com/watch?v=EHvzvwAv7RU&list=PLY7PmJJFH5nT-lbFKxfbp3rw5BBuq5Azo[РАСКРЫТЬ]
- https://www.youtube.com/c/SQLDeveloperBI
NoSQL:
- MongoDB: https://metanit.com/nosql/mongodb/
- Cassandra: https://proselyte.net/tutorials/cassandra/

На инглише:
SQL:
- https://www.w3schools.com/sql/

Литература:
- Прибыл Фейерштейн. Oracle PL/SQL. Для профессионалов - если уметь исказть, можно найти бесплатно без СМС и на русском.
- Алан Бьюли. Изучаем SQL. - про MySQL, тоже легко находится. Довольно старая, но базовые вещи не сильно меняются.
- К. Дж. Дейт. Введение в системы баз данных - талмуд на овер 1000 страниц.
- Томас Кайт. Oracle для профессионалов - тоже талмуд.

Задачки для оттачивания sql-скилов:
- https://www.sql-ex.ru
- http://sql-tutorial.ru/
- https://www.codewars.com/?language=sql

ETL, OLAP, DWH и другие умные слова:
- https://www.youtube.com/watch?v=WPZuzDJXs-Q&list=PLhhjwMYxzolhP29LSPPwORVQxJX5OjYix[РАСКРЫТЬ]
- OLAP DAX Power BI: https://www.youtube.com/playlist?list=PLhhjwMYxzolhXuySjLR2_n-xb6VvWnjju

Прочее:
- https://dbdb.io/
- https://db.cs.cmu.edu/
- https://www.youtube.com/channel/UCHnBsf2rH-K7pn09rb3qvkA/playlists
- Сравнение диалектов SQL: http://troels.arvin.dk/db/rdbms/
- Как БД работают изнутри: https://habr.com/ru/company/mailru/blog/266811/


FAQ:
Q: Нужно ли знать английский?
A: Да.

Q: Что лучше, SQL или NoSQL?
A: Как обычно, зависит от задач. Нужна любой ценой скорость - бери NoSQL, нужна согласованность данных - SQL. У всего свои плюсы и минусы, и в обозримом будущем ни один подход не заменит другой полностью.

Q: Вопросы с лабами и задачками
A: Смело спрашивай, с вероятностью больше 50% ответят, но могут и обоссать. на Дваче все твои друзья

Предыдущий тред тонет здесь: >>1869616 (OP) (OP)
Аноним 12/03/21 Птн 13:18:40 19647332
Аноним 12/03/21 Птн 14:39:36 19648123
изображение.png 77Кб, 521x500
521x500
Аноним 12/03/21 Птн 18:20:45 19651524
Если я учу JS и потом хочу вкатиться в Ноду, то стоит ли изучать базы данных? Если да, то как?
Аноним 12/03/21 Птн 18:26:32 19651605
>>1965152
ВСЕ бекендеры должны знать базы данных. Иначе как эти самые данные хранить, в файлах с жсоном что ли?
Аноним 12/03/21 Птн 18:30:45 19651706
>>1965160
Понял. Пару дней Кантора читаю, так что пока не в курсе дела.

А как вкатываться в базы данных? Допустим, я хочу научиться писать парсеры с помощью Ноды.
Аноним 12/03/21 Птн 19:38:20 19652667
Сап, аноны.
Посоветуйте что-нибудь по изучению PL/SQL, желательно от простого к сложному, начиная с уровня "полный даун". В любом виде - литература, видеоуроки, циклы статей. Попробовал начать с Прибыла, но там какой-то невнятный смазанный старт: то какая-то бесполезная хуита, то сразу такой уровень материала, что уже теряешься. Сложилось впечатление что он не совсем для новичков.
Аноним 12/03/21 Птн 19:43:54 19652748
Мужики, уже две недели ебусь с написанием своей недобд. Палю годноту, если кто-то тоже хочет начать писать\разбираться в архитектуре бд:
1. https://cstack.github.io/db_tutorial/ -- имхо маст рид (и маст код), челик объясняет с кодом как написать свой неполноценный клон sqllite, единственная проблема - серия статей слишком быстро заканчивается (собсна, дальше btree с фиксированной схемой автор не пошел)
2. DATABASE SYSTEMS The Complete Book -- охуенный справочник для теории любой глубины и на любую тему. Судя по тому, что пишут на реддите, так же является лучшим учебником по теме, но я не могу представить как это можно осилить блять.
3. Database Design and Implementation -- по сути очень схоже с первым линком, только пишется кастомная база и практически полноценная. Единственный минус (и критичный для меня) - используется жава и jdbc.

Если кто еще натыкался на схожий материал -- тоже поделитесь.
Аноним 13/03/21 Суб 01:27:50 19655569
Решил я тут подтянуть Postgresql, начал заниматься по книге PostgreSQL. Основы языка SQL by Евгений Моргунов. И вроде все норм шло, но тут проблемы возникли когда началась робота с готовой базой данных по книге.
Так вот работаю на винде 10.
Прописываю команды
psql -f demo-small.sql -U postgres
psql -d demo -U postgres
База сама по себе работает, запросы обрабатывает. Но не могу менять некоторые таблицы, выдает ошибку, что Name не является таблицей. Хотя через команду \d Name можно глянуть поля и через селект инфу.
И после закрытия базы данных и перегрузки пк все изменения проделанные с базой не сохраняются.
Аноним 13/03/21 Суб 01:33:41 196556110
>>1965556
Напиши, как ты пытаешься менять таблицы.
Аноним 13/03/21 Суб 01:40:03 196556811
>>1965561
Ну например
ALTER TABLE airports
ALTER COLUMN longitude SET DATA TYPE numeric( 5,2 ),
ALTER COLUMN latitude SET DATA TYPE numeric( 5,2 );
ОШИБКА: "airports" - не таблиця, складений тип или внешняя таблица

В самой базе есть 13 таблиц, добавлял новые и меняет некоторые. А некоторые не хочет менять. Ну и не сохранят прогресс после закрытия. Добавлял 14 таблицу. Если просто закрыть консоль проблем нет, если перегрузить комп и заново прописать команды, то прогресс пропадет. Я
Аноним 13/03/21 Суб 01:46:47 196557712
>>1965568
Погуглил и понял в чем проблема у тебя.
Короче, я не знаю почему, но у Моргунова неправильно описано как пользоваться демонстрационной бд. Я хз почему. Пиши вот эти команды.

$ sudo su - postgres
$ wget https://edu.postgrespro.ru/demo-small.zip
$ zcat demo-small.zip | psql

Затем логинься через
$ sudo -u postgres psql
\d demo
Аноним 13/03/21 Суб 02:00:24 196558713
>>1965577
Это я так понял команды линукса. 1 для установки? 2 качает базу данных? 3 розархивовывает ее?
У него команды для винды в книги, они работают. В саму базу данных загружает и можно юзать ее. Но хз как будто она битая или хз.
Если я поставлю сигвин или баш на винду они будут работать? Хотя я и так скачал ее и запускаю подобными командами.

На винде
psql -f demo-small.sql -U postgres
этой загружает базу
psql -d demo -U postgres
этой логиниться в базу.
Аноним 13/03/21 Суб 02:03:57 196558914
изображение.png 26Кб, 963x513
963x513
Я батники создал для удобства, вот после 2 команд все работает. Но нельзя менять некоторые из таблиц и не сохраняет прогрес.
Аноним 13/03/21 Суб 05:31:41 196560215
>>1965589
Проверь права или попробуй название таблицы со схемой указывать. Вобще кончай дрочить консоль, поставь IDEdata grip мозга жида например
Аноним 13/03/21 Суб 05:36:00 196560316
>>1965568
Додик у тебя воздушный порт не таблица, а представление.
Аноним 13/03/21 Суб 11:50:44 196570617
изображение.png 35Кб, 577x569
577x569
В чём суть этого ограничения? Зачем нужно выделять создание функции в отдельный файл (сообщение с намёком на это появляется, если исправить выделенную ошибку), а не создать её вместе с таблицами? Хуйня же какая-то нелогичная.
Или я что-то не так делаю?
Аноним 13/03/21 Суб 11:52:17 196570818
Аноним 13/03/21 Суб 12:13:47 196573019
>>1965587
>этой загружает базу
Судя по всему оно не загружает базу, а просто использует то что находит внутри sql-скрипта, и может загружает базу во внутренний кэш или сорт оф, потому ты и не можешь ничего изменять в ней.
Аноним 13/03/21 Суб 12:14:06 196573220
>>1965706
Ладно, понял, что нужно заюзать GO перед созданием функции. Хоть и не понятно, а почему тогда 2 таблицы создать можно разом.
Аноним 13/03/21 Суб 12:15:55 196573521
>>1965603
Там именно таблица, а не представление.
другой анон
Аноним 13/03/21 Суб 12:19:49 196574022
>>1965735
Пизжу, оно действительно представление, кек.
Аноним 13/03/21 Суб 14:53:09 196583823
Помогите аноны, не уверен стоит ли создавать отдельный тред для этого.
Начал неспешно вкатываться в бд, но не до конца понимаю что и как. Задача примерно следующая - создать нечто, куда можно будет вводить ассортимент пришедших ноутов, просматривать весь ассортимент и возможность распечатать гарантию. Что мне нужно для достижения этого?
Аноним 13/03/21 Суб 15:58:27 196590524
>>1965838
То есть тебе нужен интерфейс пользователя. Можешь сделать в виде простенького сайта, для этого нужно знать html/css (можно обойтись без JS) и какой-нибудь язык для бекенда с веб-фреймворком для него. Ну или в зависимости от требований в виде десктопной программы, там либо C++/Qt, либо C#, либо JS/Electron. И уже оттуда вызывай SQL-запросы.
Аноним 13/03/21 Суб 17:24:41 196598225
>>1964573 (OP)
Решил угореть по хардкору и вкатится в суперБД Access. Посоветуйте годной литературы, чтобы я стал офисным Б-гом данных? Уже приобрел и поставил на полку "Системы баз данных. Полный курс", но чот приуныл от толщины мануала и поставил его пока на полку.
Аноним 13/03/21 Суб 17:30:58 196598626
>>1965982
> 2021
> Файл-серверные базы данных
Аноним 13/03/21 Суб 19:36:06 196609727
>>1965905
Спасибо.
Подскажи, за пару недель изучения можно написать программу, чтобы она работала и что стоит выбрать из предложенного тобой? Или же тут дело вкуса?
Аноним 13/03/21 Суб 19:38:42 196610128
>>1965905
Бэкенд, фреймвойрк, КуТэ, хуетэ....
Access+VBA!!!!!
Аноним 13/03/21 Суб 20:10:20 196613029
>>1966097
Ну тебе же написали. Что ты делать то собрался? Сайтик?
Аноним 13/03/21 Суб 20:21:31 196614330
>>1966130
В том-то и дело, что я сейчас буквально пальцем в небо тыкаю.
С html/css немного знаком, а с остальным - нет. Хотел бы попробовать десктопную программу оформить, но во времени я ограничен немного. Если есть шанс начать учить язык и на нем уже написать программу, то я бы выбрал язык.
Аноним 13/03/21 Суб 21:11:15 196617331
>>1966143
Ну просто ты с нестандартной позиции танцуешь. Есть абстрактная цель - тебе надо ее решить. Обычно либо конкретная цель, либо конкретный инструмент. Просто в базу потыкать можно и без ЯП. Если тебе надо десктоп - копай в сторону плюсов. Если веб без задротства - жс или пых. Если прям сервер написать хочешь - шарп и джава. В общем choose you fighter. Нужно сначала понять чем заниматься хочешь.
Аноним 14/03/21 Вск 05:06:44 196635932
изображение.png 166Кб, 300x200
300x200
>>1966173
он хочет курсовую\дипломную написать
Аноним 14/03/21 Вск 11:26:15 196642733
image.png 17Кб, 552x427
552x427
image.png 28Кб, 551x423
551x423
Поясните за postgresql, ставлю его, а как пароль то ввести? В установщике его нигде не запрашивают. После выбора места только 2 кадра и дальше установка. Что делать то с этим?
Аноним 14/03/21 Вск 12:02:59 196643834
>>1966427
я поставил другую версию
Аноним 14/03/21 Вск 16:31:54 196657635
>>1966427
alter user postgres set password '123'
Аноним 15/03/21 Пнд 19:39:49 196768436
Есть записи в таблице, нужно их последовательно апдейтить по N штук за раз, а потом в конце начинать сначала. Как бы это организовать?
Аноним 15/03/21 Пнд 20:13:16 196773837
Аноним 15/03/21 Пнд 20:24:09 196775238
>>1967738
Не за один подход, а по расписанию.
Аноним 15/03/21 Пнд 20:58:02 196778139
>>1964573 (OP)
Шапка пизже предыдущей, можешь не переделывать
Аноним 16/03/21 Втр 06:02:24 196813040
>>1967752
Записывать куда-нить ID на котором остановился, потом натравливаешь процедуру которая апдейтит кусками и обновляет ID по завершению.
Аноним 16/03/21 Втр 08:33:18 196816041
>>1966427
Ты тралишь? Подними докер, а в нем постгре
Аноним 17/03/21 Срд 12:51:52 196963442
Сап, аноны. Есть вопрос: существует что-то между sql базами и nosql базами, поясню: чтобы можно было задать статичную схему с типами данных (для оптимального хранения) и иметь возможность горизонтально масштабироваться как с nosql базами. Меня просто немного пугает оверхед от использования json и такого неструктурированного хранения данных.
Аноним 17/03/21 Срд 13:07:01 196964643
Аноним 17/03/21 Срд 22:08:39 197015044
>>1969646
спасибо, почитаю подробнее про них. На первый взгляд Cassandra понравилась
Аноним 18/03/21 Чтв 08:40:03 197037845
Стикер 191Кб, 281x440
281x440
>>1969634
> нужна масштабируемость как в nosql
> пугает что в nosql не сэкономили байты
> якобы в sql байты сэкономили
Аноним 18/03/21 Чтв 08:48:03 197038146
>>1964733
В файловой системе.
Аноним 18/03/21 Чтв 08:50:02 197038347
>>1965274
А зачем? Если у тебя нет идей что можно сделать принципиально лучше, зачем делать клоны того что уже есть?
Аноним 18/03/21 Чтв 08:55:10 197038648
>>1970383
Все, у кого такие идеи были, сначала писали свои недоклоны, чтобы хотя бы разобраться в разработке СУБД на практике, инфа сотка.
Аноним 18/03/21 Чтв 09:20:14 197039849
>>1970386
Как по мне, достаточно просто почитать про то как оно устроено в существующих СУБД. Писать своё очень долго. Ну разве что какое-нибудь keyvalue можно асилить. Там просто нет серебряной пули для всего, джойны будут тормозить, дедлоки будут случаться, транзакции будут не до конца честными, репликация будет упираться в CAP/PACELC-теоремы.
Аноним 18/03/21 Чтв 09:23:36 197040050
>>1970398
Если хочется попробовать for fun, почему нет?
Аноним 18/03/21 Чтв 09:26:26 197040251
Стикер 127Кб, 400x261
400x261
>>1970400
Ну попробуй, я ж не против.
Аноним 18/03/21 Чтв 18:44:19 197080452
>>1970383
>>1970398
Я писал в предыдущем треде, что у меня скоро будет очень базоориентированный проект (мб придется что-то существующее патчить для лучшего перфоманса), а про бд я знаю примерно нихуя. Ну и соответственно, если ты хочешь в чем-то разобраться -- лучше всего это написать. Оно офк не будет каким-то продакшн реди, но как альтернатива какому-нибудь BusTub от CMU -- самое то. Ну и плюс мне сейчас нехуй делать, а базы данных - одно из самых слабых моих сторон, будет полезно подкачать
Аноним 19/03/21 Птн 00:15:54 197106853
>>1970804
Для начала нужно понять какие задачи твоя БД решает. Хранятся ли данные на диске или только в памяти? Если на диске, то можно ли рассчитывать что COMMIT спасает не просто от креша/остановки приложения, а от выключения света? Есть ли мультиклиентность? По какому принципу хранятся данные: реляционные кортежи, вертикальные столбцы, таймсериес, документы как в монге, графы, простой keyvalue? Под какие паттерны использования будешь затачивать? Что важнее, консистентность или скорость?
Аноним 19/03/21 Птн 05:48:09 197112554
>>1970804
Ты как настоящий дегенерт мыслишь - не читал ни одной книги, но зато всем рассказывает что хочет написать свою.
Аноним 21/03/21 Вск 19:42:59 197347955
Поясните, а у sqlite есть веб интерфейс или чёт подобное. Или только сосать бибу и работать из консоли?
Аноним 21/03/21 Вск 19:50:17 197348556
>>1973479
Загуглил "sqlite gui", куча тулз, но сам не юзал. Да и небось можно dbeaver/datagrip/etc настроить.
Аноним 21/03/21 Вск 19:52:01 197348657
>>1973479
sqlite это просто либа. Также официально поставляеться соснольный клиент.
А так никто не мешает кому угодно написать сторонний клиент, хоть веб, хоть невеб. Но он там и нахуй не нужон.
Аноним 21/03/21 Вск 20:08:24 197349858
Аноним 21/03/21 Вск 20:32:15 197351659
111.jpg 10Кб, 401x251
401x251
Аноны, помогите ради аллаха.
Есть пикрил структура таблиц. Мне нужно получить все email'ы пользователей и номера из таблицы "значения полей", чтобы эти данные выводились в одну строку, типа [почта | номер]. Каждое значение поля хранится отдельной записью.
Например, есть элемент, его значения полей выглядят так: element_id, field_id, value. В значениях полей есть номер и ид пользователя.
Мне нужно как-то найти элементы, понять к какому пользователю они относятся, взять email этого пользователя и номер из полей элемента.
Наверное, делается это через джоины, но я в этом не силён.
Аноним 21/03/21 Вск 21:43:45 197357960
Почему не юзают СУБД на основе Prolog?
Пролог-программу можно рассматривать как реляционную базу данных, т.е. описание некоторого множества отношений. Описание отношений присутствует либо в явном виде (факты), либо в неявном виде (правила).
Встроенные предикаты дают возможность корректировать эту базу данных (БД) в процессе выполнения программы. Это делается:
1) добавлением к программе (в процессе вычислений) новых фактов;
2) вычеркиванием из нее уже существующих фактов.
Аноним 21/03/21 Вск 22:03:38 197359661
>>1973579
> Почему не юзают СУБД на основе Prolog?
Потому что никаких реальных преимуществ по сравнению с реляционными БД в этом нет, а если и есть, то только для решения узких задач. Учёт в виде таблиц появился задолго до появления реляционных БД, и на практике его достаточно почти всегда.
> Пролог-программу можно рассматривать как реляционную базу данных, т.е. описание некоторого множества отношений
В реляционных БД под реляционностью понимают именно таблицы, а не какие-то абстрактные взаимосвязи. Так-то "отношения" описывает любые произвольные структуры данных, но есть устоявшаяся терминология.
> либо в неявном виде (правила)
Мир уже пришёл к тому, что хранить бизнес-логику в БД - плохая идея. Есть "базы знаний", где хранятся факты и правила вывода, но это в конечном итоге надстройки над обычными БД.
Аноним 22/03/21 Пнд 17:18:03 197439862
Спросил в треде пхп-шников, но это, наверное, не к ним.

Можно ли писать команды так, чтобы они одинаково подходили и к MySQL и к PostgreSQL? Или синтаксис совсем несовместим?
Вот живой пример:
MySQL
ROUND((price / $coefficient),2) AS price

PostgreSQL
ROUND((price::numeric / $coefficient),2) AS price
Если у постргеса не указать, что округляемое - нумерик, то будет ругаться и вернёт ошибку. А в майскул такую конструкцию не завезли, он просто округляет. Это можно подружить как-то?

Просто, везде говорят, мол, у нас тут круто всё, можно в конфиге фреймворка поменять используемую базу и всё будет норм. А когда меняешь - оказывается, что нихренашеньки.
Аноним 22/03/21 Пнд 17:24:15 197441063
>>1974398
Разные SQL-ы отличаются настолько, что никакими конфигами к одному виду не привести, и либо не пишешь запросы сам и генерируешь через ORM, либо никак.
Аноним 22/03/21 Пнд 17:25:37 197441664
>>1974398
Такое обычно через orm делают, и только в самых простых случаях обходятся без костылей.
Аноним 22/03/21 Пнд 17:43:00 197444265
>>1974398
Если использовать поменьше функций может и ничего не придется менять, зависит от сложности запроса. Вместо округления например можно кастить в интеджер или использовать свой костыль
Аноним 22/03/21 Пнд 18:48:10 197456466
>>1974410
>>1974416
>>1974442
У меня сейчас сайт на ларавеле. Есть таблица продуктов, для которых в отдельном поле указана цена в евро. Пользователь сайта устанавливает сам, в какой валюте ему нужно показывать. Сейчас в контроллере прописана команда запроса к модели с MySQL синтаксисом команды. Как это засунуть в саму модель, не знаю. А просто запрашивать модель и потом в контроллере пересчитывать нельзя, потому что по MVC логике нужно усраться, но передвинуть перевод цен в модель.

В принципе, можно, допустим, брать цифру, делить на коэффициент, тут же умножать на 100 и округля... опять приходим к тому, что округление и преобразование типов оформлено по-разному.
Аноним 23/03/21 Втр 01:01:47 197485267
>>1974564
ХЗ гугль говорит что round() можно использовать и без второго аргумента, да и cast() должен быть одинаковым. Плюс ты можешь не использовать стандартные функции округление, а написать своё через if например.

Аноним 23/03/21 Втр 09:52:31 197496768
>>1974564
> MVC
Пчел, если ты в контроллере ебашишь SQL запросы то твоему MVC уже пiзда. В построеном по MVC приложении слой моделей самый жирный (если конечно у тебя там нет какого-то кромешного пиздеца в разметке фронта). Если ты хочешь обойтись базой данных заместо модели, то тогда тебе нужно переносить бизнес логику в базу данных. Тоесть ебашить процедуры/сабрутины. Из контроллера ты вызываешь процедуру которая возвращает цену. А уже в каждой базе своя процедура.
Аноним 23/03/21 Втр 10:24:47 197498269
>>1974967
>твоему MVC уже пiзда
В контроллере вызов метода из репозитория:
$paginator = $this->indexRepository->getWithPaginate(9, $selectedCategory, $currentExchangeRate, $cartId);

В репозитории indexRepository проверяем, выбрал пользователь категорию товаров или нет. Ну и обращаемся к модели, подставив в неё SQL-команду для перевода прайса в нужную валюту прямо при запросе. Я не знаю, это считается, что я работаю с базой из контроллера, или всё же нет?
public function getWithPaginate($perPage, $selected, $exchangeRate, $cartId)
{
#If a category is specified and it is NOT root, then the category is checked
if ($selected <= 1) {
$checkType = '<>';
$selected = 0;
} else {
$checkType = '=';
}

#Get data
$results = $this
->startConditions()
->select('id', 'title', 'slug', 'category_id', 'description', 'image_url',
\DB::raw("ROUND((price::numeric / $exchangeRate),2) AS price"))
->where('is_published', 1)
->where('category_id', $checkType, $selected)
->orderBy('id', 'ASC')
->with([
'category:id,title',//we will refer to the category relation
'cartItem' => function ($query) use ($cartId) {
$query->where('cart_id', $cartId)->select(['product_id', 'quantity']);
}
])
->paginate($perPage);

return $results;

}
Сама модель:
namespace App\Models;
use Illuminate\Database\Eloquent\SoftDeletes;
class Product extends BaseModel
{
use SoftDeletes;

protected $fillable = [
'title',
'slug',
'category_id',
'description',
'price',
'image_url',
'is_published'
];

public function category()
{
return $this->belongsTo(Category::class);
}

public function cartItem()
{
return $this->hasOne(CartItem::class);
}
}
Аноним 23/03/21 Втр 14:27:59 197522770
Сап БДач! Пожалуйста, подскажи тупню как решить вот такое?

Есть БД из 4 таблиц:
stock (id PK, shopID (FK -> shop.id), markID (FK -> mark.id), quantity)
shop (id PK, name)
mark (id PK, name, manufacturerID (FK -> manufacturer.id))
manufacturer (id PK, name, country)

Для всех дилерских центров те модели (mark.name), для которых суммарное количество выставленных на продажу экземпляров больше 10 (stock.quantity). В этом же запросе для каждой модели указать центр (shop.name), в котором находится наибольшее количество моделей (если таких несколько, то отсортировать по имени центра в алфавитном порядке).

Запрос на больше 10 экземпляров делается вроде элементарно (group by mark.name having sum(stock.quantity) > 10), но как при этом отобрать магазины, имеющие максимум? Второе условие в having вроде не засунешь. Да и группировка по магазинам это не то.
Аноним 23/03/21 Втр 16:50:21 197533171
>>1975227
Ну, вроде как частично сделал:
select Mark, Shop from
(
select mark.name as Mark from
stock inner join mark on stock.markID = mark.id
group by mark.name having sum(stock.quantity) > 10
) as s1 inner join
(
select shop.name as Shop, mark.name, dense_rank() over (partition by stock.markID order by stock.quantity desc) as rnk from
stock inner join mark on stock.markID = mark.id inner join shop on stock.shopID = shop.id
) as s2 on s1.Mark = s2.name
where s2.rnk = 1

Неясно только, как реализовать
>(если таких несколько, то отсортировать по имени центра в алфавитном порядке)
БДач, подскажи.
Аноним 23/03/21 Втр 16:52:12 197533272
>>1975331
select Mark, Shop from
(
select mark.name as Mark from
stock inner join mark on stock.markID = mark.id
group by mark.name having sum(stock.quantity) > 10
) as s1 inner join
(
select shop.name as Shop, mark.name, dense_rank() over (partition by stock.markID order by stock.quantity desc) as rnk from
stock inner join mark on stock.markID = mark.id inner join shop on stock.shopID = shop.id
) as s2 on s1.Mark = s2.name
where s2.rnk = 1
Аноним 23/03/21 Втр 20:39:26 197553173
>>1975331
>БДач, подскажи.
Понял, что спросил хуйню. Спрошу корректней:
Нужно объединить наименования центров имеющих одинаковый максимум mark.name в одну ячейку отсортированным перечислением.
Аноним 23/03/21 Втр 21:27:12 197558074
>>1974982
Все сложно сказать потому что это же не какие-то стандарты, а так придумали хуйню. В твоем случае все еще и хуже, потому что у тебя очевидный конфликт апи двух субд, поэтому все выглядит донельзя тупо. Но задача форматировать данные под бизнес требования (что похоже на твои проблемы) бывает. К примеру у меня был шиз заказчик который хотел чтобы часть цен товаров выводилась с указанием центов, а часть просто целым числом. И при этом чтобы можно было менять вид отображения для каждого товара. В соответсвии с MVC это должна делать модель. Она вытаскивает из бд сырые данные. Преобразует их в соотвествии с требованиями контроллера или бизнес-логики. И отдает их контроллеру. У тебя в общем все ок. Контроллер вызывает метод репозитория, который уже является слоем модели. И там гдет-то у тебя должна формироваться цена. Возможно это действительно какая-то сабрутина под конкретную субд, возможно это метод екземпляра конкретного класса который возвращает нужным образом округленную цену (это ORM подход).
Аноним 23/03/21 Втр 22:40:12 197564375
Аноны, приведите пример, когда в postgres'е надо использовать timestamp, а когда timestamptz.

Что-то не я понимаю большой разницы. Допустим у меня есть два столбца: один timestamp, второй timestamptz. В первый я записываю "2021-01-01 00:00" (не прямо строку записываю, а объект через orm) у меня с сохраняется "2021-01-01 00:00". Во второй записываю "2021-01-01 00:00", и при "Europe/Moscow" сохраняется "2020-12-31 21:00". Когда selec'чу, оба возвращают "2021-01-01 00:00". И вот вопрос: в каких случаях нам может пригодится то, что timestamptz при сохранении и при возврате перегоняет дату в UTC и обратно?
Аноним 24/03/21 Срд 11:13:40 197593776
>>1975643
Это нужно когда клиенты обращаются с разных часовых поясов, им можно на фронте показывать их местное время.
Аноним 24/03/21 Срд 14:34:42 197616377
Можно ли как-то сделать IN с шаблонами внутри?

Типа
WHERE
(
Nodes.Caption IN ('%pbx%', '%voip%', '%sbc%')
)

Вместо
WHERE
(
Nodes.Caption like '%pbx%'
OR Nodes.Caption like '%voip%'
OR Nodes.Caption like '%sbc%'
)
Аноним 24/03/21 Срд 14:47:21 197617078
Аноним 24/03/21 Срд 16:45:47 197639779
>>1976163
Регулярные выражения, есть во всех приличных БД, синтаксис зависит от конкретной.
Oracle: where regexp_like(Nodes.Caption,('pbx|voip|sbc')
Как человек с колоссальным опытом в БД, могу сказать, что вся эта хуета как правило работает медленнее, чем стандартные операторы типа like, поэтому решай задачу через like, если она решается через like. Не нужно заниматься украшательствами ради украшательств, не нужно бездумно пользоваться фичами только потому что знаешь, что они существуют.
Аноним 24/03/21 Срд 16:46:55 197639980
>>1976397
>where regexp_like(Nodes.Caption,'(pbx|voip|sbc)')
Аноним 24/03/21 Срд 17:07:15 197644581
>>1975227

select t.,
fitst_value(shopID) over(partition by markID order by sm desc, shopID) -- на самом деле вместо shopID его наименование, которое нужно было приджойнить в запросе, но мне лень таким заниматься
from
(
select s.
,
sum(quantity) over(partition by shopID,markID) sm
from stock s
) t
where sm > 10
Аноним 24/03/21 Срд 17:10:22 197644882
>>1976445
>select t.,
fitst_value(shopID) over(partition by markID order by sm desc, shopID) -- на самом деле вместо shopID его наименование, которое нужно было приджойнить в запросе, но мне лень таким заниматься
from
(
>select s.
,
sum(quantity) over(partition by shopID,markID) sm
from stock s
) t
where sm > 10
Аноним 25/03/21 Чтв 04:43:13 197681983
Без опыта реально вкатиться каким-то скуль/бд девелопером, или туда только с бекенда перекатываются? В резюме только на опыт смотрят, портфолио с работами же не сделаешь? Может лучше пытаться аналитиком?
Что учить дальше после всяких DWH ETL OLAP BI, внутренности конкретных бд, администрирование?
Аноним 25/03/21 Чтв 10:03:49 197691284
>>1975531
>>1975332
Ну вроде допетрил, хотя, наверное, коряво вышло:

select Mark, string_agg(convert(nvarchar(max), Shop), ',') within group (order by Shop asc) as MaxShop from
(
select mark.name as Mark from
stock inner join mark on stock.markID = mark.id
group by mark.name having sum(stock.quantity) > 10
) as s1 inner join
(
select shop.name as Shop, mark.name, dense_rank() over (partition by stock.markID order by stock.quantity desc) as rnk from
stock inner join mark on stock.markID = mark.id inner join shop on stock.shopID = shop.id
) as s2 on s1.Mark = s2.name
where s2.rnk = 1
group by Mark

>>1976445
Так у тебя же два запроса или я чего-то совсем не понимаю что не мудренно?
Аноним 25/03/21 Чтв 10:05:35 197691385
>>1976912
Ну, ясное дело, что джоинить по name вместо id - тухлый план.
Аноним 25/03/21 Чтв 10:13:47 197691886
>>1976912
>два запроса
Это запрос к запросу, макаба звездочки спизила
select t.[зведочка],
fitst_value(shopID) over(partition by markID order by sm desc, shopID) -- на самом деле вместо shopID его наименование, которое нужно было приджойнить в запросе, но мне лень таким заниматься
from
(
>select s.[звездочка],
>sum(quantity) over(partition by shopID,markID) sm
>from stock s
) t
where sm > 10

Если в таблице ровно одна строка для каждой комбинации марки и магазина, то подзапрос выделенный гринтекстом не нужен и вместо этого можно взять сразу таблицу stock, тогда получается аккурат в один запрос с моим гениальным использованием функции first_value()

select t.[зведочка],
fitst_value(shopID) over(partition by markID order by quantity desc, shopID)
from stock s
where quantity> 10

Ты точно сделал какую-то хуйню, потому что тебе не нужно делать string_agg для наименования магазина, тебе явно сказано, что если у магазинов количество одинаковое, нужно вывести первый по алфавиту.
Аноним 25/03/21 Чтв 10:23:54 197692887
>>1976819
>Без опыта реально вкатиться каким-то скуль/бд девелопером
Ну если тебе меньше 25, то да, а дальше уже начнутся вопросы, а чем ты занимался все это время. Ну и будешь тупым как вот этот персонаж >>1976912
С бекенда туда не перекатываются, разработчики бд это отдельная каста.
>В резюме только на опыт смотрят, портфолио с работами же не сделаешь
Да, портфолио тут нет, дают задачи на sql, спрашиваю про устройство конкретной бд, если работа сложнее джуновской.
>Может лучше пытаться аналитиком?
Да, выучил sql и в путь. Сразу в разрабы сложнее, потому что это хоть и хуевенькая, но все-таки разработка.
>внутренности конкретных бд, администрирование?
А нахуй тебе оно надо вообще? Укатываются во всякие питоны и бигдаты, точно не в администрирование. Ну и у БД-разраба и БД-админа совсем разный функционал, админу можно и sql не знать дальше простых запросов, но при этом быть замечательным админом. Туда скорее всякие сисадмины/эникеи перекатываются.
Аноним 25/03/21 Чтв 10:59:41 197695488
>>1976918
>тебе явно сказано, что если у магазинов количество одинаковое, нужно вывести первый по алфавиту.
rly?
> (если таких несколько, то отсортировать по имени центра в алфавитном порядке)
Я так понял, что если есть несколько магазинов с максимумом одинаковой марки, то нужно вывести все. Вот и думал как их вывести в одной строке.
Аноним 25/03/21 Чтв 15:12:01 197714289
>>1976928
Да пока что 99.9% вакансий разраба бд это мидлы с 3 годами опыта и мне естественно не отвечают. Вот и рассматриваю разные варианты через которые потом можно будет перекатиться в разраба бд. Мб через аналитика, может через админа или бекенд. Правда туда тоже время нужно чтобы вкатиться. Всякие питоны и дата сайенс не рассматриваю там вообще год-два дрочиться придется.
Аноним 25/03/21 Чтв 15:28:00 197715490
>>1977142
Лол. 99.99% вакансий в айти такие. Ничего нового. Кто ищет, тот найдет.
Аноним 25/03/21 Чтв 15:33:13 197716291
>>1977142
Ага, а вот в БД селекты научился писать и сразу попрет?! Это не так работает, тут тоже нужно жизнь положить, чтобы стать профессионалом. Но профессионалом становишься не от дрочки курсов, а от реальных задач. Вообще, я не знаю откуда БД-девелоперы берутся, это вообще не хайповая тема сейчас, так что всякие стажировки и тд можно не рассматривать.

Ты отличай chad db developer от virgin sql analyst. На второго может пойти любая мартышка, прошедшая sqlex, а разработчик это разработчик, тут еще учиться надо.

Еще гугли по конкретным базенкам, там же так обычно пишут, "Oracle Developer, MS SQL Developer". По вакансии "DB Deveoper" нужны скорее всего специалисты по всем БД сразу как я и вакашки там с прицелом на проектирование, архитектуру, выбор решений, а не просто загрузить табличку из точки А в точку Б.
Аноним 25/03/21 Чтв 15:50:44 197718792
>>1977162
По-моему, ДБ-девелоперы это древний тренд вроде современных микросервисов, или что там ещё было. Все начали хуевертить всякую йобу прямо в базах, а потом расхуяривать обратно, как мода прошла.
Аноним 25/03/21 Чтв 15:59:55 197720193
>>1977154
Отчасти да, но на бек/фронт я хотя бы видел стажировки и вакансии джуна без опыта. Понятно что там по сотне откликов, но мб есть хоть какой-то шанс за счет портфолио вывезти.

>>1977162
Да понятно что я червь без реального опыта, и никакие курсы и книжки его не заменят. По конкретным бд смотрел, то же самое. Ну хз, буду наверно в бек вкатываться, там хоть скл пригодится.
Аноним 25/03/21 Чтв 16:04:26 197721194
>>1977187
Конечно, мое время проходит. Но с оракла крупные конторы еще долго не слезут, например, так что без работы не останусь.
Аноним 25/03/21 Чтв 19:18:12 197742995
>>1975937
Под клиентами ты имеешь ввиду клиентов, которые к БД обращаются? Если ты пишешь про веб-серверное приложение, то я что-то не могу понять, как timestamptz поможет возвращать на фронт время в разных часовых поясах.
Аноним 26/03/21 Птн 09:53:49 197785696
>>1977162
>virgin sql analyst
>может пойти любая мартышка, прошедшая sqlex
Подтверждаю, сам такой.
Аноним 26/03/21 Птн 11:19:26 197791797
>>1977856
Сколько опыта, сколько платят? Если не из ДС, можешь не отвечать, нерелевантно будет все равно.
Аноним 26/03/21 Птн 11:58:22 197795598
>>1977917
Опыт 10 месяцев. Платят сейчас 60к, на старте было 35к. Но это меня уже повысили. Это в ДС.
Аноним 26/03/21 Птн 16:53:48 197819499
>>1977955
А всякие матстатистика, теорвер, регрессионный анализ, сопутствующие приложения, python нинужны?
Аноним 26/03/21 Птн 17:06:55 1978210100
>>1964573 (OP)
В postgres у таблицы employee есть 3 вида json-полей: fields, providedFields, optionalFields (хз зачем так сделали). В этих json-ах мне надо найти значение по ключу "preferences", оно может быть в каком-то одном поле, а может не быть ни в каком, как мне вытащить его оттуда чтобы не запускать 3 отдельных операции SELECT?

(вытаскивать его надо именно в таком приоритете: fields -> providedFields -> optionalFields; если значения нет то переходим к следующему полю)
Аноним 26/03/21 Птн 18:08:59 1978289101
>>1977955
В 2021 это мало даже для самого обоссанного джуна, я на такие деньги вкатывался в 2015
Аноним 26/03/21 Птн 18:27:54 1978319102
>>1978289
Ну вот, а сейчас джуны вкатываются на зп кассира пятерочки. То ли еще будет.
Аноним 26/03/21 Птн 18:56:24 1978363103
>>1978210
В чем проблема так сделать?

select employee_id, preferences
from (
select employee_id,
COALESCE(
COALESCE(fields -> 'preferences', providedFields -> 'preferences'),
optionalFields -> 'preferences'
) as preferences
from employee
) emp
where preferences IS NOT NULL
Аноним 26/03/21 Птн 19:25:32 1978391104
>>1978194
Python или любой другой язык полезен ("будет плюсом" как принято писать). Тервер и матстат лично мне на собесе нужны были на самом детском уровня. Эксель тоже.

>>1978289
А чего ты хочешь, зная только sql и не имея опыта? 100к с порога? Анон выше верно написал, что одно дело быть DBD, который знает хотя бы теорию БД, и совсем другое - sql-макакой, который вкатился после 50 задач на sql-ex (хотя я и теорию тоже вспоминал).
Аноним 26/03/21 Птн 20:19:22 1978436105
>>1978391
Я просто хочу за еду получать опыт.
Ну вот допустим прошел я материалы курсов от carnegie mellon, курсы Semistructured Data and XML, Development of a Database Application, еще какие-то бесплатные от зарубежных вузов. Прочел книги по подготовке к сдаче экзаменов для сертификатов майков а-ля Developing SQL-Databases, Implementing a Data Warehouse using SQL. Прочел книги по типу The Internals Of Postgresql, доки самих бд.
По вышке ну у меня говношаражка, так что не в счет теории множеств, логики, алгоритмов, ну и прочее, пару языков на уровне синтаксиса, ооп, простых задач.

Куда дальше сосать? Становиться няшным трапиком, найти деда с 30 лет опыта дбд и пытаться ему на хуй скакнуть?
Аноним 26/03/21 Птн 21:34:33 1978531106
>>1978436
По-моему, с таким набором можно искать работу полноценным DBD, если ты всё перечисленное освоил, конечно. Или аналитиком, или каким-нибудь ETL-разработчиком (но там своя специфика, насколько мне известно). А если у тебя ещё и диплом профильный есть, не важно шарага или нет, то это огромный буст тебе среди других вкатышей.
В общем, ясчитаю у тебя уже есть варианты, главное ищи и откликайся.
Аноним 26/03/21 Птн 23:39:49 1978614107
>>1978436
>допустим прошел
Так допустим или прошел? Я не верю, что нужно настолько хотеть вкатиться в БД, чтобы всё это изучать. На этом свет клином не сошелся. Почему именно это, если ты готов так много ресурсов потратить на вкат в айти? Обычно люди просто учат базовый SQL и ходят по собесам. Хотя мне кажется, что тебя по софт-скиллам отбракуют, ты какой-то ебанутый.
Аноним 27/03/21 Суб 07:15:30 1978687108
16056125054221.jpg 28Кб, 343x256
343x256
Аноны что можно почитать/посмотреть по data vault? Что-то попадались всего пару книг и те говно.
Аноним 27/03/21 Суб 07:18:24 1978688109
>>1978436
Ну тащемта помимо базового sql неплохо бы знать особенности конкретных диалектов/бд, обязательно транзакции мне кажется даже если не используют на собесе спросят. Если направления куда копать - BI\ETL\DWH либо Java\Python сплош9ь и рядом используют совместно с бд
Аноним 27/03/21 Суб 07:36:02 1978689110
>>1978687
или подскажите какой подход к организации данных можно применить. Вот условно прилетают данные по одному бизнес процессу из разных источников, надо их собрать вместе в новой модели. Если просто наваливать джоинами в одну сущность, в конечном итоге будет ли несогласованность данных, либо дупликаты, либо ещё какое-нибудь говно. Нужно сначала модель построить, что можно использовать помимо data vault подхода а у то у меня уж башка от этих всех сателитов взрывается?
Аноним 29/03/21 Пнд 14:25:25 1980459111
>>1965160
Ты че, про Монгу не слышал?
Как там в 2006?
Аноним 29/03/21 Пнд 14:29:31 1980463112
Можно ли в чистом sql сделать так: берем у некой таблицы Student поле phone (оно может быть написано коряво - то есть с присутствием плюсов, дефисов и других посторонних символов), убираем оттуда все посторонние символы и сохраняем его в жсон-поле attributes по ключу "cleanedPhone" ?
Аноним 29/03/21 Пнд 14:34:03 1980468113
>>1980459
> Монгу
Как там в 2014?
ключевое слово - файлы, а не то что в них жсон
Аноним 29/03/21 Пнд 14:46:47 1980480114
>>1980463
А "чистый sql" это какой? Так-то вроде у Oracle есть регулярные выражения, может можно что-то через маску where phone like ... изобразить. Но я вот этот тупень >>1976912
поэтому ко мне доверия никакого.
>>1978436
Допустим, я захотел по-хардкору угореть по БД, с чего вообще имеет смысл начинать? Что читать? Просто быстрое гугление выдаёт совсем уж древнюю литературу (ясен пень, что реляционная и объектные модели придуманы миллион лет назад и едва ли что-то фундаментальное открылось после).
Аноним 29/03/21 Пнд 14:49:39 1980481115
>>1980480
>А "чистый sql" это какой
Постгрес

Про "чистый sql" я говорил, подразумевая что можно написать скрипт на питоне, если просто на sql такое сделать нельзя / заебно
Аноним 29/03/21 Пнд 16:06:57 1980561116
>>1980481
Тогда в чём проблема просто прогнать через регулярное выражение, убрав всё не нужное (ну и практически плохой совет, но на этапе разработки можно просто замутить маску, чтобы пропускало только нужный формат записи), не?
Мб замутить функцию, которая будет прогонять содержимое phone и вытаскивать, например, только цифры?
Аноним 29/03/21 Пнд 16:18:50 1980569117
>Стандарт SQL требует, чтобы тип timestamp подразумевал timestamp without time zone
Нахуя? Сейчас же хранить без таймзоны антипаттерн.
Аноним 29/03/21 Пнд 16:31:33 1980579118
>>1980569
Так там есть отдельный timestamp with timezone
Ну а так есть же всякие нюансы с переходом на летнее время или принятием полученного значения в общемировое. Ну то есть проще по-умолчанию считать что время указывает без часового пояса и потом его явно добавить, чем выяснить, что в конечном итоге время тебе показывает по Гринвичу (а ты на Аляске).
Аноним 29/03/21 Пнд 20:33:00 1980756119
Аноны, подскажите хороший GUI-клиент для PostgreSQL под линукс.
PGAdmin - глючное УГ, даже не показывает таблицы в базе.

Navicat - можно купить на торрентах, но только под винду
DataGrip - то же самое
Аноним 29/03/21 Пнд 21:15:44 1980812120
>>1980561
Забил хер и написал скрипт на питоне...
Аноним 29/03/21 Пнд 22:25:35 1980911121
Тут есть люди с опытом DBD или ДБА? Какие у вас зп? Где-нибудь кроме банков работали? Есть те кто сейчас хиптсерский кликхаус или вертику осваивает? МБ хадупы? Что думаете о современном стеке дбд девелопера и посыле нахуй АСИДа в угоду производительности?
Аноним 29/03/21 Пнд 22:26:45 1980913122
Аноним 30/03/21 Втр 12:20:05 1981207123
>>1980913
Да понял я намек, понял, учу уже ваш питон ебаный.
оракловщик-200к
Аноним 30/03/21 Втр 22:19:40 1981959124
>>1981207
Кроме тебя тут никого нет?
Аноним 31/03/21 Срд 10:19:14 1982219125
>>1975643
Бамп вопросу. Зачем хранить дату в tz и при записи конвертировать её в UTC, если во время чтения она будет конвертирована обратно?
Аноним 31/03/21 Срд 10:25:47 1982221126
анон, почему у меня 900 строк удаляется >часа+ ?
Аноним 31/03/21 Срд 11:48:19 1982275127
Аноним 31/03/21 Срд 11:51:37 1982277128
>>1982275
Кстати насчет локов:

>>1964573 (OP)
Мне надо обновить кучу записей в таблице (около миллиона), скрипт для этого есть однако Postgres лочит таблицу на момент UPDATE и у меня никак не выходит провести эти транзакции параллельно (ни асинхронно, ни с помощью тредов). Я понимаю что он ссыкует что данные могут скорраптится, но я знаю что у меня все обновляемые строки разные, как временно убрать этот лок?
Аноним 31/03/21 Срд 16:26:35 1982498129
Есть таблица
atr_1
1
2
3
4
5
Я её могу проранжировать
atr_1
1 1
2 2
3 3
4 4
5 5

Я могу это сделать роу_намбером

А если я хочу проранжировать её вот так
1 5
2 5
3 5
4 5
5 5
6 10
7 10
8 10
9 10
10 10
11 15
12 15
И тд. есть для этого какая-то надстройка или костыль нужно изобретать?
Аноним 31/03/21 Срд 17:05:49 1982540130
>>1982498
Делай то же самое с desc
>>1982277
Гугли батч апдейт или меняй уровень изоляции транзакции
Аноним 31/03/21 Срд 17:07:02 1982542131
>>1982498
А бля долблюсь, не то хотел ты, но вроде роу тоже это умеет. Или кросс аплай попробуй
Аноним 31/03/21 Срд 18:09:22 1982610132
image.png 23Кб, 441x557
441x557
>>1982498
Фантазию включи, чел.
ceil - функция для целочисленного деления, в других диалектах будет другая, на картинке оракл.
Аноним 31/03/21 Срд 18:14:06 1982616133
>>1982610
>ceil - функция для целочисленного деления
Извините, исправлюсь, это не совсем целочисленное деление, ceil возвращает для нецелого числа наибольшее целое.
Аноним 31/03/21 Срд 19:14:02 1982677134
>>1982610
Я бы написал сам костыль. Я просто спрашивал - есть ли над аналитическими функциями надстройка для таких случаев.
Аноним 31/03/21 Срд 23:48:56 1982920135
>>1982540
Варик есть - update from
postgres сам снимает все локи и тестовый запрос вместо 140 секунд выполнился за 1.2 секунды (!)
Аноним 01/04/21 Чтв 03:47:59 1982965136
>>1982498
SELECT ID, iif(round(id/5,1)=0,1,round(id/5,1))*5
Аноним 01/04/21 Чтв 03:49:51 1982967137
>>1982677
А в чём тут аналитика? В твоём выражение даже в соседнии строки заглядывать не нужно.
Аноним 01/04/21 Чтв 08:55:07 1982998138
>>1982275
А разве можно удалять данные без лока?
Аноним 01/04/21 Чтв 09:37:58 1983008139
Сап, аноны.

Есть условная таблица:
Поле1 Поле2
1 4
2 5
3 1
4 1

Я хочу посчитать сколько например 1 было в каждом поле. Условно GROOUP BY NUM, COUNT(Поле1),COUNT(Поле2). Но у меня нет в исходной таблице этих 1-2-3, по которым надо группировать, они есть только в виде данных в ячейках, при том для групировки нужны учитывать данные из обоих ячеек, если в одной ячейки есть число 7, а в другой нет, то 7 должна присутствовать в итоговой агрегации.
Аноним 01/04/21 Чтв 09:44:57 1983010140
Сегодня в ночь решил шесть задач на sql-ex.ru, пока впечатления такие, что sql не сильно сложнее экселя получается.

Вообще тема здоровская, уже в головушки мыслишки роятся о том, как например сделать БД по результатам переписи 2002 и 2010 годов. Отдельно туда добавить сборники ОКТМО от Росстата. Потом задрочиться запросами через селект, вывести все муниципальные образования в которых проживают чеченцы за исключением муниципальных образований Чеченской республики. Вывести все муниципальные образования в которых русские в доле населения составляют менее 50%. А если к этой херне прикрепить какую-нибудь графическую оболочку, чтобы прямо на карте дублировались данные вообще была бы красота.
Аноним 01/04/21 Чтв 10:43:49 1983035141
>>1982677
>костыль
Не костыль, а умное и изящное решение!
Нет никаких надстроек и быть не может, это слишком узкий кейс, заебешься каждый пердеж в параметры закладывать.
Аноним 01/04/21 Чтв 10:49:42 1983040142
>>1983008
x, count(*)
(
select Поле1 as x from t
union all
select Поле2 from t
)
group by x
Аноним 01/04/21 Чтв 10:56:01 1983044143
>>1982967
>А в чём тут аналитика
Аналитическая функция - это любая функция, результат которой зависит от других строк, а не только от строки, на которой она вызвана. В данном случае результат зависит от порядка по столбцу.
Умник ебучий.
Аноним 01/04/21 Чтв 11:28:57 1983060144
>>1983040
Таблица огромная, от таких пассажей порвётся что-нибуь. Всегда стараюсь тзбегать юнионов без острой необходимости, тут не вроде как можно избежать
Аноним 01/04/21 Чтв 11:55:54 1983087145
>>1983060
Union all - безобидная операция, она не делает сортировку.
Реальность такова, что ты не можешь сделать в одном запросе две независимых группировки по двум разным полям.
Можешь рассказать бизнес-смысл задачи? Есть шанс, что ее можно решить по-человечески.
Аноним 01/04/21 Чтв 12:02:26 1983091146
>>1983087
>не можешь сделать в одном запросе две независимых группировки по двум разным полям
На самом деле можешь, используя конструкцию group by cube(), но это ёбка какая-то, сам гугли, как это работает.
Аноним 01/04/21 Чтв 12:09:01 1983092147
image.png 16Кб, 585x177
585x177
А как сделать, чтобы данные после апдейта применялись сразу?
Написал пикрил, но данные не обновляются в таблице до тех пор, пока я её не закрою. Можно как-то фиксить?
Аноним 01/04/21 Чтв 12:12:03 1983094148
Аноним 01/04/21 Чтв 12:21:14 1983103149
>>1983094
оказывается надо было опять делать селект и после через fetchall получать данные
Аноним 01/04/21 Чтв 13:02:16 1983124150
>>1983087
Если бизнесово:
Мониторинг оборудования, нужно находить отрезки когда оборудование было недоступно\Была высокая задержка. Одна строчка что-то вроде Отправлен-Получен-Обработан. Условно оператор смотрит - у кофеварки разница во времени Отправлен-Получен больше 20 секунд, и таких случаев час было 20, значит коферка хуёвничает, её нужно чинить.

Практически:
Есть огромная таблица с несколькими временными отрезками(в одной строке несколько таймстэмпов), я хочу её схлопнуть, чтобы проще было хранить и делать запросы. Отрезки небольшие, от 1 секунды. Собирать планирую по Час-Ид-Количество-(каждого вида отрезков.). Но просто группировку сделать не могу, т.к. нет поля со всеми значениями. Distinct тоже не подходит, он сортирует. Думаю над тем чтобы просто генерировать своё поле, со значениями от 1 до 300 например, а всё что выше помечать как 300+.

Знаю, звучит как задача для NoSQL, но его нет под рукой.
Аноним 01/04/21 Чтв 13:10:31 1983137151
>>1983124
Сложно, чел. Хранить несколько тамйштампов в одной строке - это нахуя а главное зачем?
Если бы у тебя просто была таблица ИД оборудования / Отправлен / Получен, то ты считаешь для каждой строчки разницу Получен - Отправлен, округляешь ее, например, до целых секунд в большую сторону, и делаешь group by по этому полю и по ИД оборудования, получаешь на выходе таблицу ИД оборудования, Длина интервала и количество таких интервалов.
Аноним 01/04/21 Чтв 13:21:13 1983152152
>>1983137
Еслиб мишки были пчёлками...
У таблицы источника другой владелец. Могу предположить что так хранится потому-что строка - законченная операция, показывающая весь путь пакета, возможно для того чтобы сократить количество строк.

Аноним 01/04/21 Чтв 21:19:40 1983629153
Подскажите плиз.
Первый раз делаю питон проект с базой данных.
веб страничка где ты получаешь инфу из базы и выводишь ее. и кнопка где ты заносишь инфу в базу.
Разве верно получать данные из бд напрямую при каждой загрузке страницы?
Как правильно это сделать?
Аноним 01/04/21 Чтв 22:35:53 1983698154
Насколько затратна в эластике операция создания индекса?
Аноним 01/04/21 Чтв 22:40:48 1983701155
>>1983629
Запилить кеширование. ОЗУ не резиновая, поэтому обычно его делают не для всего подряд, а для сравнительно небольших, но часто используемых данных. Как конкретно его запиливать, сильно зависит от языков и фреймворков, плюс юзают Redis и его аналоги.
Ну и не забывать создавать индексы в БД.
Аноним 02/04/21 Птн 13:06:56 1983963156
>>1983629
Обычно базы сами кешируют запросы
Аноним 05/04/21 Пнд 00:47:05 1986235157
>>1983008
А если в одном столбце 7, а в другом 2, то и в подсчете 7 и и двоек плюс один?
Аноним 05/04/21 Пнд 00:52:13 1986237158
>>1981207
Анон расскажи как вкатиться с ораклом в 200к, что надо уметь и учить.
И насколько реально юзая только pl sql получать 300к в секунду
Аноним 05/04/21 Пнд 00:55:48 1986238159
>>1980463
Ага можно, я недавно такое же делал в оракле для тех. коментария через регулярку.
Если юзать pl sql, вообще красота, можно написать функцию, что будет тебе каждый номер править на удобоваримый
Аноним 05/04/21 Пнд 01:45:37 1986256160
>>1980463
Как то так будет:
select
regexp_replace(regexp_replace(str,'[^[[:digit:]]]*'), '^(7|8)[\d]{10}')
from t

Где str название столбца в котором храниться "грязные" номера, и t соотвественно таблица с этим столбцом

Описание:
Regexp_replace маской из регулярки вытаскивает нужное из стринга.
Что бы получить номер я сначало оставляю в строке только цифры, а потом из полученного считываю 10 цифр после 8 или 7

Огроничения: сработает только для мобил в России
Ну и еще я эту хуйню не проверял, так что наверное где то накосячил
Аноним 05/04/21 Пнд 08:32:41 1986289161
>>1986235
Ну агрегацию я планировал считать отдельно, по каждому столбцу.
Аноним 05/04/21 Пнд 12:25:19 1986411162
>>1986237
>вкатиться с ораклом в 200к
Сразу на 200 не вкатываются, 200к-250к это зарплата оракловщика с 5 годами опыта разработки (именно разработки, а не SQL запросов)
>что надо уметь и учить
Можно почитать Тома Кайта, но он унылый как моя залупа, не осилил. Больше решает опыт, чем больше интересных ситуации в жизни встречал, тем проще. Это не та тема, где прошел курсы и поперло.
>И насколько реально юзая только pl sql получать 300к в секунду
Нереально. С голым ораклом 250к потолок, и только если ты действительно хорош. Поэтому я понимаю, что мое время проходит и нужно в экстренном порядке учить питон и перекатываться в дата-инженеры, если я не хочу через 5 лет оказаться под карьерной лестницей и дрочить легаси со старперами.

И в очередной раз спрашиваю: а нахуя вам вкатываться именно в бд?
Аноним 05/04/21 Пнд 12:33:39 1986418163
>>1986411
>И в очередной раз спрашиваю: а нахуя вам вкатываться именно в бд?

Потому-что sql простой, как залупа
Аноним 05/04/21 Пнд 12:50:34 1986442164
>>1986418
В свое время заебался собеседовать вкатывальщиков, которые думают так же.
Он очень сложный, особенно когда речь идет об оптимизации запросов, особенностях конкретной бд... Выучить базовый синтаксис SQL — дело не хитрое, но человеком от этого не станешь.
Аноним 05/04/21 Пнд 13:20:25 1986456165
>>1986442
Спорное утверждение. Переформулирую, sql проще других языков программирования. Средняя вебмака должна быть умнее sql макаки.
Аноним 05/04/21 Пнд 13:24:05 1986459166
>>1986456
Нет, не должна. Клепатель формочек — низшее существо. Вот туда и вкатывайтесь. А в такие благородные отрасли как разработка БД не надо лезть.
Аноним 05/04/21 Пнд 13:39:49 1986484167
>>1986459
Приведи пару конкретных примеров этой 'сложности'
Аноним 05/04/21 Пнд 13:44:30 1986488168
>>1986484
Веб-макака, угомонись. Ты рисуешь формочку, ты видишь, что она работает, и тебе поебать, что дальше. Разработка БД предполагает детальное понимание того, как работают процессы внутри БД, недостаточно перевести логику на язык SQL, нужно еще позаботиться о том, чтобы этот SQL был оптимален.
Аноним 05/04/21 Пнд 13:47:32 1986493169
>>1986488
Начались манёвры. По теме, скажешь что?

Аноним 05/04/21 Пнд 13:53:04 1986500170
>>1986493
>По, теме, скажешь, что?
Нет, чел, я эксперт в одной области и очень поверхностно понимаю, как работает другая. Может быть, ты мне скажешь, почему считаешь клепание форм более интеллектуальной деятельностью, чем разработку БД?
Аноним 05/04/21 Пнд 13:55:32 1986503171
>>1986500
Алё, я по твоей области и спрашиваю, пару кейсов экспертных которые делают дб-макакинг невьебенно сложным опиши.
Аноним 05/04/21 Пнд 14:00:10 1986508172
>>1986503
В общих чертах уже ответил, приводить конкретные примеры я не буду, потому что без должной экспертизы их все равно невозможно понять. Поэтому я и спросил тебя, как должно выглядеть описание сложности конкретной профессии, чтобы непосвященный человек сказал "ух бля как сложно".
Короче, я устал с тобой разговаривать, пиздуй работать.
Аноним 05/04/21 Пнд 14:04:09 1986519173
>>1986508
Этот эксперт порвался, несите следующего.

веб мака будет умней, потому-что конкуренция выше, стек технологий больше. Сейчас средней руки ньюфаг для вката в макакинг форточек должен уметь докеры,юникс, sql, и ещё кучу говен, в то время как бд-дауны до сих пор палкой по своему ораклу стучат
Аноним 05/04/21 Пнд 14:08:17 1986526174
>>1986519
Если ты такой умный, то почему такой бедный?
Аноним 05/04/21 Пнд 16:11:44 1986669175
>>1986411
А что плохого в легаси? Это типа как пару лет назад было несколько статеек, что есть много программ на забытом и древнем языке кобол, которые до сих пор надо поддерживать, а деды-колдуны начали умирать. Это же как слесарь на заводе. Сидишь в сласарке и по звуку закрытыми глазами определяешь, что сломалось и где надо подтянуть.

Мне кажется это прямо золотая жила. Легко в такую тему влезть? Буду платить в два раза больше чем по региону?
Аноним 05/04/21 Пнд 16:34:29 1986691176
>>1986669
Оракл еще долго не умрет, так что не получится стать последним человеком на свете, который знает оракл, и грести миллионы.
Ну и в целом ничего хорошего в легаси нет. Это очень маловероятная ситуация, когда ты сидишь на легаси и изредка что-то правишь, скорее всего тебе придется активно дорабатывать чужой код, пытаться впихнуть свои доработки поверх чужих и стараться, чтобы ничего не поломалось... А даже если ничего не править, никто не даст кадру просто так сидеть без дела, будут запрягать всякой другой хуйней, которая имеет мало отношения к твоим непосредственным обязанностям.
Ну и психологически тяжело будет, никакие деньги не спасут, когда поймешь, что заебался.
Аноним 08/04/21 Чтв 22:59:25 1990614177
Clip2net2104082[...].png 63Кб, 959x873
959x873
Анон, что с меня она хочет? Создал 2 пользоватиля через консоль, не через команду createuser. Теперь не могу удалить, сменить роли и тп. Вот пример удаление других пользователей.
Аноним 08/04/21 Чтв 23:10:29 1990622178
>>1986691
Не, ну править-то можно по разному.
Одно дело когда ты ломаешь мозг придумывая архитектуру нового проекта.
Другое дело когда ты после недельной переписки добавляешь один if и потом еще неделю гоняешь тесты.
Аноним 09/04/21 Птн 09:20:08 1990836179
>>1986508
Нихуя тебя опустили, это ж каким надо быть тупым, что бы тебя веб-макака опустила...
Аноним 10/04/21 Суб 01:27:47 1991517180
Анон, поможешь? Придумываю связи для таблиц, тема - автобусные перевозки. Я хочу связать как-то точку отправления автобуса и точку прибытия, это один ко многим? У одно точки выезда может же много точек прибытия, да?
Аноним 10/04/21 Суб 02:18:06 1991526181
>>1986503
>дб-макакинг невьебенно сложным

Читал инструкции по эксплуатации AS/400 или Оракл?
Аноним 10/04/21 Суб 06:15:31 1991604182
>>1991526
Долго же ты обтекал, эксперт, и всё равно высрал какй-то бред.
Давай по пунктам:
1) Опять примеры максимально общие. Я неебу что ты этим хотел сказать. Или для тебя чтение, это задача требующая экспертного знания?
Ууу, эээ, ты компьютер видел? Знаешь как работает? Инструкцию по эксплуатации читал?

2) AS/400, судя по гуглу какое-то серверное говно мамонта. Я бы ещё сильно подумал относить это дб-макакингу или системному администрированию.

3) Инструкции по эксплуатации Оракл. Дед тебе сколько лет? Ты таблетки принял? Ни разу не слышал чтоб так называли мануалы люди моложе 40. Ну читал немного и что дальше? Опять же ты примеров никаких не приводишь, так что хуй тебя разберешь. Единственное что могу сказать, сракл не сложный, он неудобный. Как условный бейсик на фоне других языков , тот же sql и сам не самый новый язык, но даже на фоне других диалектов оракл со своей дрисней умудрился всех обскакать. Например - ебанутая работа с датами. Сложно? Нет. Неудобно? Пиздец как, хуже нельзя было придумать.

А самое главное твоя хуета не развивается. Как конвертили дату через сраку 30 лет назад, так и щас делают, а за это время уже все летают на мэп-редьюсах, и подрачивают кэш в редисах, а считают спарками. И условная вебмакака 2021 должна знать больше чем аналогичная макака из 2020, а ты ораклисты так и сидят в своей пещере.


Аноним 10/04/21 Суб 12:21:58 1991720183
А картинки и видео хранятся в БД? Или они в отдельных папочках на сервере, а в БД хранятся ссылки на них?
Аноним 10/04/21 Суб 12:51:33 1991739184
>>1991604
>эксперт
Это не я, я тебе больше не отвечал, потому что с твоим манямиром бесполезно спорить.
Аноним 10/04/21 Суб 13:29:05 1991759185
>>1991720
лучше второй вариант
Аноним 10/04/21 Суб 14:47:41 1991853186
>>1986411
Анон, подскажи, кроме Кайта можно что-то ещё почитать по ораклу, чтобы кашу в голове разгрести и получить какое-то структурированное представление о синтаксисе, пакетах и прочих инструментах? А то взяли на работу разрабом, большую часть логики пишу в SQL или PL/SQL, но вижу, что базы не хватает. А Кайт ещё вроде не по уровню мне. Или только доки курить?
Аноним 10/04/21 Суб 15:37:11 1991894187
>>1991853
Кайт по уровню, там ничего сложного, просто нудно. Но Кайт это скорее про понимание того, как оракел внутри работает, процессы, файлы, вся хуйня. Тебе, как я понимаю, нужен именно PL/SQL - под это дело свой талмуд есть - Фейерштейн, который я тоже не читал.
Лучше нагугли какой-нибудь список вопросов на оракл сеньера и иди по нему, а то заебешься.
Ну и в треде спрашивай, не стесняйся.
Аноним 10/04/21 Суб 15:50:08 1991901188
>>1991894
>>1991853
Кстати хорошая тема для обсуждение. Что спрашивают на синьёров\мидлов?
Аноним 10/04/21 Суб 16:02:00 1991916189
>>1991901
Типы таблиц, типы индексов, виды соединения таблиц, виды доступа к данным, уровни изоляции транзакций, хинты, регулярные выражения.
Сеньера еще могут попросить пояснить за каждый ответ и сказать, что в какой ситуации лучше. SQL еще всякие надо писать, с аналитическими функциями и тп.
Аноним 10/04/21 Суб 16:06:30 1991921190
>>1991916
>виды доступа к данным.
Под этим что подразумевается?
>хинты
И вот под этим
>Типы таблиц
Временные/обычные?
Аноним 10/04/21 Суб 16:10:42 1991926191
>>1991921
>виды доступа к данным.
С точки зрения оптимизатора: full scan, несколько разных index scan
>хинты
Подсказки оптимизатору (соединять в определенном порядке, использовать определенне индексы и тд, тут конечно лучше погуглить)
>Типы таблиц
>Временные/обычные?
Виноват, имел в виду способы организации таблиц: heap, index-organized, cluster
Аноним 10/04/21 Суб 19:43:55 1992144192
База mysql (innoDB), в одной таблице лежит 10 000 000 строк , это фото к продуктам(пути, мета, и проч. инфо) . Появилась задача все это просчитать и сделать статистику - где используются, на каком продукте, сколько включено, выключено, не заполнено. И все это при одном заходе на страницу. Запросы написал, с вложенными и джойнами - просто вешают страницу на 5-10минут.. Как это оптимизировать( хотя бы 20сек) ? Реально ли это сделать на мускуле?
Аноним 11/04/21 Вск 03:36:07 1992480193
>>1992144
10м не так чтобы сильно много, так что да можно. Или кэшыруц рещультат в редисе.
Аноним 11/04/21 Вск 12:54:49 1992604194
>>1992144
Недавно читал статью по денормализации. Там было что-то подобное. Так вот там предлагали фото вынести в другую таблицу. Для статистики они тебе не нужны, а запрос это ускорит.
Аноним 11/04/21 Вск 15:39:34 1992721195
Как некостыльно сделать запрос, превращающий данные типа
Клиент Ид_Заказа В Клиент_1 Ид1,Ид2,Ид3?
Аноним 11/04/21 Вск 15:52:19 1992729196
>>1992721
Гугли group concatenation для своей базенки.
Аноним 11/04/21 Вск 20:44:52 1992938197
Изучаю sql, возникла проблемка с таким типом задачи: есть 3 таблицы (работники, пк, работник_пк). В "работниках" поля id, имя, фамилия. В "пк" id и производитель. В связующей id, id_работника и id_пк. Связь многие ко многим.
Задача вывести имена работников за которыми привязано больше 2 пк. К сожалению идей нет как делать это задачу. Понимаю, что надо как-то через джоины, но дальше хз. Помогите кому не впадлу)
Аноним 11/04/21 Вск 21:27:55 1992975198
>>1992938
Лучше изучай. Обычный запрос на group by и having
Аноним 11/04/21 Вск 21:29:30 1992976199
>>1964573 (OP)
Как писать модульные тесты для SQL?
Аноним 11/04/21 Вск 21:41:44 1992993200
Аноним 13/04/21 Втр 19:23:42 1994966201
Аноны, есть один SELECT и два JOIN в нем, при выполнении запроса, накладываются локи на записи. Как бы мне избежать этих локов, ибо этот запрос всегда делает просто чтение без последующих апдейтов и т.п.
Все это в PostgreSQL 12.
Аноним 13/04/21 Втр 19:24:33 1994967202
>>1994966
В гугле не забанили, но на все мои запросы возвращается только информация о том как наложить LOCK, а мне такое не надо, это я и так делаю.
Аноним 13/04/21 Втр 19:30:06 1994969203
Аноним 13/04/21 Втр 20:50:25 1995068204
>>1994966
Лок не должен включаться, если ты принудительно его не включаешь. Где ты обосрался?
Аноним 13/04/21 Втр 21:49:45 1995162205
image.png 46Кб, 1836x220
1836x220
>>1995068
Хуй знает.
Запрос идет как: ORM -> PGBouncer(session mode) -> PostgreSQL.
На на выполнение в БД попадает все без криминала и подливы - https://pastebin.com/cBnVG6Hh
Аноним 13/04/21 Втр 21:50:23 1995163206
>>1995162
Пикрил происходит при большом кол-ве запросов.
Аноним 13/04/21 Втр 22:03:14 1995183207
>>1995162
Этот тип блокировки в постгре - не эксклюзивный. Они никому не мешает. Он вызывается селектом. Относись к этому как к инфе о том, что кто-то в данный момент читает эту таблицу.
Аноним 14/04/21 Срд 00:01:16 1995334208
>>1995183
То есть если сразу N селектов захотят забрать одни и те же данные, то эта блокировка никак никому не помешает?
Бля, если так, то хули тогда этот запрос такой медленный, по 25-35мс на РДСе выполняется. БД пустая считай.
Аноним 14/04/21 Срд 13:03:35 1995665209
>>1964573 (OP)
Анончики, туплю.
Надо сделать регекс для LIKE (или NOT LIKE), чтобы выбрать все description, где есть кириллица
Подскажите решение
Аноним 14/04/21 Срд 13:14:19 1995669210
>>1995665
where description like '%[а-Я]%'
нихуя не возвращает в mssql
Аноним 14/04/21 Срд 13:33:28 1995677211
>>1995669
Я какбэ не шарю, но разве не ".[а-Я]." ?
Аноним 14/04/21 Срд 13:34:04 1995678212
>>1995677
Макакба сожрала звездочки после точек
Аноним 14/04/21 Срд 13:54:06 1995685213
Безымянный.png 8Кб, 551x239
551x239
Всем привет. Подскажите, как лучше сделать, не могу понять. Хочу сделать таблицу чтоб хранить количество свободных номеров в отеле. То есть можно сделать как на нижней таблице, но тогда категории номеров будет нужно вносить и изменять вручную, а не брать из таблицы со списком категорий номеров. Или в принципе так и норм?
Аноним 14/04/21 Срд 14:56:02 1995755214
>>1995685
Нужно три таблицы:
1)Справочник номеров
2)Справочник арендаторов(опционально)
3)Таблица бронь (если решил п2, тут же ИД арендатора):
ИД_Номера - НачалоАренды - КонецАренды

Потом делаешь запрос в бронь и смотришь какие из номер сейчас заняты.


Можно это конечно сделать и всё в одной таблице, но за такое дед препод твоё щёку для своего хуйца арендует, потому-что денормализовано
Или с ехидной ёбой спросить про нормальные формы



Аноним 14/04/21 Срд 15:26:37 1995779215
Безымянный2.png 60Кб, 1273x711
1273x711
>>1995755
Ну у меня типа такого сейчас в общем. Но что с номерами и ценами пока хз. Ты типа предлагаешь просто при каждом бронировании пробегаться по всем броням и считать, сколько попадают в этот диапазон и если их больше, чем количество номеров, то значит все занято? Но вдруг там нужно будет зачем-то заблокировать номер например? Ну или в общем поставить количество на определенные даты вручную?
Аноним 14/04/21 Срд 15:42:09 1995793216
>>1995779
По схеме:
У тебя букинг уже со всем говном, так не рисуют, рисуют просто с ключами иди переделывай.

Рисуй звезду:

В центре таблица фактов, что я описал, он по ключами соединена со справочниками. В центральной таблице НЕ ХРАНИМ всё гавнизе, только ключи на справочники.

Строчка центральной выглядит примерно так:

УниальныйИД-ИДКомнаты-ИдКлиента-ВремяНачалоАренды-ВремяКонцаАренды. (ёбаный рот никто же на 1 день не арендует)

Потом делаешь представление, в котором на текущую дату проверяешь свободные номера. Можно вобще просто заджоинить левым джоином к справочнику номеров, таблицу с фактами по диапазону дат. Где заджоинится - заняты, где нуль - свободны. Ну если две даты там сначла нужно будет посчитать попадает ли текущая дата в диапазон, но думаю там можно придумать хитрый хинт с datediff, мол если отрицательное, пошiв нахуй.

Аноним 14/04/21 Срд 16:09:16 1995823217
Аноним 14/04/21 Срд 16:11:39 1995826218
>>1995677
А-я же, строчные буквы после заглавных идут в кодировке.

И вообще есть хуиллион веб-сайтов для тестирования регулярок.
Аноним 14/04/21 Срд 16:14:16 1995829219
>>1995826
И вообще А-я тоже говно, потому что не берёт Ёё.
Делайте как нормальные люди [А-Яа-яЁё]
Аноним 14/04/21 Срд 17:13:30 1995914220
>>1995677
Не ебу. В моем скуле функцию точказвездочка выполняет знак процент.

>>1995826
>И вообще есть хуиллион веб-сайтов для тестирования регулярок.
Только сперва надо его написать

>>1995829
Справедливо, ну это ладно, у меня ё там точно нет
В любом случае, не работает
Аноним 14/04/21 Срд 18:01:34 1996014221
>>1995823
Drawsql сайт нашел в гугле.
>>1995793
Ну я понимаю, у меня там и есть внешние ключи в ней. Просто есть клиент в бд, а есть информация, которая приходит с сайта или из какого-то другого источника и там может быть какая-то рандомная инфа, типа написано латиницей или с ошибкой или не полностью. А в таблице клиенты уже точная информация, которая при заезде администратором из документа берется. Поэтому когда бронь делается сначала там данные, которые ввел пользователь при бронировании, а если он приедет и его информацию внесут в архив, то тогда она будет браться из таблицы клиентов.
Аноним 14/04/21 Срд 18:21:45 1996057222
>>1995914
where zaloopa like '%[А-Яа-яЁё]%'
Хочешь сказать, что вот так не работает?
Аноним 14/04/21 Срд 18:26:41 1996069223
>>1964573 (OP)
Тред, про базы данных и не слово про Google BigQuery.

Аноним 14/04/21 Срд 18:41:41 1996097224
изображение.png 7Кб, 735x171
735x171
изображение.png 4Кб, 282x173
282x173
>>1996057
Не работает.
Возвращает одну строчку, которая не особо релевантна запросу
(пик1)

А на пике 2 другой запрос, это чтобы просто показать, что строчки с кириллицей есть
Аноним 14/04/21 Срд 18:51:08 1996113225
>>1996097
А какой тип данных у поля Description?
Аноним 14/04/21 Срд 18:52:51 1996114226
>>1996097
И простое like '%месяц%', например, работает?
Аноним 14/04/21 Срд 19:03:22 1996138227
>>1996097
Норкоманы штоле, like это простейшие вайлдкарды.
Аноним 14/04/21 Срд 19:07:18 1996146228
>>1996138
Нет, дело в том, что в MS SQL нет отдельной функции под regexp like, условия с регулярками пишутся в обычном лайке и работают.
Аноним 14/04/21 Срд 19:28:17 1996170229
изображение.png 2Кб, 202x63
202x63
изображение.png 4Кб, 419x163
419x163
Аноним 14/04/21 Срд 19:59:22 1996222230
>>1996170
Ну значит с этого и надо было начать, а не с синтаксиса регулярок.
Попробуй like N'%месяц%' или convert(varchar(max), Description).
Нет этой хуйни под рукой, чтобы наверняка сказать, сам ебись и гугли.
Аноним 14/04/21 Срд 20:00:26 1996224231
>>1996222
Так а в чем проблема-то тут НАХОЙ?
Аноним 14/04/21 Срд 20:01:17 1996227232
Аноним 14/04/21 Срд 20:09:05 1996237233
Аноним 15/04/21 Чтв 02:20:11 1996491234
>>1996097
полнотекстовый поиск же
>>1996014
Нет ты не понимаешь. В центральной таблице это говна быть не должно. Тебе нужна отдельная таблица с бронями. Что значит он там не то что-то набронировал? Это предоплата и вьезд по паспортам, если он заполнил неправильно форму, он едет нахуй, а не в отель.

ФИО должно быть точно, иначе это хуйня. При проектировании надо опираться на бизнес-логику. Если ты неправильно заполнишь данные на сайте при покупки авиабилета, тебя не пустят в самолёт, так же и тут.

Соотвественно, когда мы будет искать занятые номера, уже бахаем три таблицы=СправочникНомеров+Брони+ЗанятыеНомера. Второй вариант добавить сущность СОБЫТИЕ и сыпать все в одно место, и брони и заезды: Ид+ИдНомера+КодСобытия(бронь-заезд-выезд)+Дата. Тогда можно будет построить полностью таймлайн, и напрмиер выбрать все номера, у которых есть выезд, но нет брони. Тут опять же вопрос в нормализации.


Аноним 15/04/21 Чтв 02:40:50 1996495235
>>1996491
Ну я сам в отеле работаю и там типа так. Вообще насрать, чего там человек заполнил на сайте, букинге или ещё где. Никто там паспортные данные не высылает, почти никогда заранее не платят. Иногда по телефону чего-то промямлют, ты запишешь кое-как и всё. Или другому человеку. Главное чтобы найти эту бронь при заезде и чтоб она квоту занимала. А уже когда заезжает человек, то берется у него паспорт, заносится в систему и он добавляется в архив уже с однозначными данными.
Думаю все-таки да, попробовать просто пробегаться по броням. А для технических блокировок мб создать какого-то клиента с именем "блокировка" и он будет создаваться когда надо на какие-то даты закрыть номера. Хотя в реальности можно обычно вручную задать количество номеров на каждый день, а значит эта информация хранится где-то.
Аноним 15/04/21 Чтв 03:07:06 1996500236
>>1996495
>>1996495
>>1996495
Тогда придерживайся второго подхода - все сыпешь в одну таблицу с событиями:
Событие - 1 бронь. В нём Ид пользоватоля вобще не заполнен, вместо этого заполнен коментарий, или вобще можно json класть в стобец с коментарием.
Событие 2 - заезд. Ид пользователя заполнено.
Событие 3 - выезд.

Кстати с таким подходом, не нужно делать две даты, достаточно одной.

Абу заебал со своими плохими воротами
Аноним 15/04/21 Чтв 09:28:53 1996609237
>>1996491
>полнотекстовый поиск же
Так и што
Аноним 15/04/21 Чтв 14:49:48 1996951238
image.png 936Кб, 1280x1130
1280x1130
>>1964573 (OP)
Не пойму, почему считается, что кассандра это availability + partition tollerance, а big table это consistency + partition tollerance
У них у обоих consistency level конфигурируется. У big table по умолчанию всего лишь eventual consistency. Такой же и у кассандры
Аноним 15/04/21 Чтв 21:36:48 1997446239
>почему PostgreSQL - не Oracle
почему?
Аноним 16/04/21 Птн 13:32:13 1997942240
>>1964573 (OP)
Делаю листалку-пагинацию (на бэке постгрес если вдруг кому интересно), если простой способ затребовать определенную страницу под номером page_num (начинаются с 0):
LIMIT page_size OFFSET page_size x page_num

Но как заранее узнать максимальное количество страниц? Так чтобы это не отнимало много времени
Аноним 16/04/21 Птн 13:54:35 1997974241
>>1997942
count(*), не благодари.
Кажется, вопрос не совсем про бд.
Аноним 16/04/21 Птн 14:17:57 1998001242
Короч аноны, контора платит, нужно выбрать какой-нибудь базовый sql курс, типа dba level 1
Не по инфраструктуре, а именно по запросикам.
Есть проверенные варианты с онлайн-курсами? Только с рашкискими школами, чтобы не ебаться с оплатой забугорному контрагенту
Аноним 16/04/21 Птн 14:22:10 1998006243
>>1998001
>dba
SLQ Analyst, скорее. DBA вообще не про то, можешь совсем ненужными вещами голову засрать.
Конкретных курсов не знаю, меня всему научила улица.
Аноним 16/04/21 Птн 15:56:06 1998099244
Аноним 16/04/21 Птн 15:56:45 1998102245
Аноним 16/04/21 Птн 16:36:23 1998160246
temp.png 110Кб, 822x662
822x662
Кто что знает из пикрелейтед?
у меня 4 из 10, жидко пукнув, обтекаю
Аноним 16/04/21 Птн 17:46:47 1998213247
есть ли способы подсчитать и вывести число аккаунтов юзеров если их много на страницу админа?
Аноним 16/04/21 Птн 18:37:40 1998285248
>>1998213
Что ты несешь, долбаеб? Сформулируй вопрос еще раз.
Какую, нахуй страницу админа, каких нахуй аккаунтов юзеров? Сука, охуеть нахуй.
Аноним 16/04/21 Птн 19:16:53 1998349249
>>1998213
SELECT COUNT(*) FROM ACCOUNTS;
Но если аккаунтов очень много, может не подойти.
Аноним 16/04/21 Птн 19:28:59 1998363250
>>1998349
Если очень много, но есть primary key, все равно должно быть заебись.
Аноним 16/04/21 Птн 19:30:19 1998364251
>>1998349
'SELECT COUNT(*) as num FROM users'
Аноним 17/04/21 Суб 02:13:15 1998649252
>>1998213
ANALIZE SELECT * FROM ACCOUNT
(postygres)
Аноним 17/04/21 Суб 07:48:26 1998770253
изображение.png 171Кб, 271x303
271x303
Славик, ты до сих пор свой пискуэль теребишь? Посмотри на Ванечку, он вкатился в погромирование и у него зарплата как три твоих.
Аноним 18/04/21 Вск 02:19:19 1999800254
>>1975643
Ещё один бамп. Хотя бы скажите, где почитать про этом можно
Аноним 18/04/21 Вск 02:22:06 1999801255
>>1999800
Все нормальные люди перегоняют время в utc, а потом навешивают сверху таймзоны, если надо. В постгресе это сделали искаропки, вот и всё.
Аноним 18/04/21 Вск 03:41:38 1999824256
16026340034170.jpg 61Кб, 683x790
683x790
Аноним 18/04/21 Вск 12:05:00 2000100257
>>1999851
>>1999841
>ДЕАНОН МОЧИ
Кого эта хуйня может вообще волновать? Вам по 13 лет?
Аноним 20/04/21 Втр 18:00:46 2002631258
192645364755891[...].jpg 70Кб, 1080x814
1080x814
https://www.ixbt.com/news/2021/04/16/google-logica-yedalog.html

Если я не умею программировать, но немного знаю скуль с питоном и хочу со временем развить скиллы по анализу данных, стоит ли сейчас вкатываться в Logica, параллельно уча скуль с питоном?
Аноним 20/04/21 Втр 21:06:30 2002844259
>>1964573 (OP)
>Clickhouse
>Пиздатая колоночная БД, дает прекрасные показатели по butch вставке и множественному чтению
>join-ы между таблицами сразу же херят всю производительность
Что это ха хрень??
Аноним 20/04/21 Втр 23:35:41 2002982260
>>2002844
Если ты дворовые реляционные БД осилил с трудом и анальными болями на уровне CRUD, то лучше не лезь.
Аноним 21/04/21 Срд 00:04:08 2003004261
mysql на винде раз в сутки выкидывает окно на две секунды с каким то прогрессом в консольке. Я за месяц так и не успел прочитать что оно делает. И не смог нагуглить. единственное успел прочитать слово initialize.
Что это за говно и как его отключить?
Аноним 21/04/21 Срд 00:13:56 2003019262
Аноним 21/04/21 Срд 00:23:54 2003027263
>>2003019
Спасибо, похоже оно. Не знаю почему сам не смог нагуглить, так и думал что избитая какая то проблема.
Аноним 21/04/21 Срд 00:26:11 2003031264
>>2003027
Я как-то успел сделать скрин и прочитать сообщение, его и загуглил.
Аноним 21/04/21 Срд 10:01:08 2003222265
>>2002982
Чмондель, любой join в контексте КХ является антипаттерном
Ты збс по-твоему?
Аноним 21/04/21 Срд 10:18:30 2003231266
>>2003222
> антипаттерном
Хуя у вас там в носкл-манямирке костыли.
Аноним 21/04/21 Срд 12:53:50 2003372267
gtw7l4rzw9i61.jpg 512Кб, 2155x2833
2155x2833
Антоши, помогите с запросом

Есть колонка, в котором такой текст:
"To: xuilo@pizda.com,petuh@kurwa.com <br />рандомное количество рандомных букв"
1.Нужно удалить первый емейл-адрес xuilo@pizda.com (он всегда такой) и запятую после него.
Т.е. получится "To: petuh@kurwa.com <br />рандомное количество рандомных букв"
2.Нужно вставить в конец строки "<br />BCC: xuilo@pizda.com"
Т.е. получится "To: petuh@kurwa.com <br />рандомное количество рандомных букв<br />BCC: xuilo@pizda.com"
Аноним 21/04/21 Срд 12:55:08 2003373268
Забыл важное: вместо petuh@kurwa.com может быть любой рандомный адрес
Аноним 21/04/21 Срд 16:00:39 2003514269
А как сделать реплейс пустой строки на что-то?
REPLACE(PropertyValue,'','chto-to') не работает
Аноним 21/04/21 Срд 20:15:57 2003792270
>>2003514
Очевидно потому, что там нечего заменять

Аноним 21/04/21 Срд 21:59:38 2003857271
 
Аноним 22/04/21 Чтв 12:48:52 2004283272
fdHc0dj[1].png 8Кб, 647x152
647x152
Есть запрос (на пикче). Нужно найти ошибку(логическую) в условиях where, которая будет тормозить выполнение запроса.

Единственное, что я тут изменил бы, это указал вместо where StateID in where <table1>.StateID in.
Есть еще варианты?
Аноним 22/04/21 Чтв 12:57:45 2004309273
Аноним 22/04/21 Чтв 13:07:13 2004312274
Назовите основные отличия pgsql от mysql. И посоветуйте что в первую очередь надо изучить перекатчику из мускля.
Аноним 22/04/21 Чтв 15:46:45 2004507275
>>2004283
Не, ну это на 300к наносек вопросы, бесплатно не готов обсуждать.
Из жизненного опыта:
Когда ты пишешь where stateid in (select stateid from ...), то без алиасов sql считает, что stateid из внутреннего запроса относится к stateid внешней таблицы, то есть условие трактуется как stateid = stateid, всегда верное, возвращает все строки из таблицы. А в твоём случае ещё и переменная так же называется, что именно интерпретатор тут поймет вообще хуй его знает... Мерзкий говнокод.
Аноним 22/04/21 Чтв 15:49:03 2004510276
>>2004507
С точки зрения логики, в максимальном приоритете интерпретатор должен брать именно тот stateid, который переменная, потому что ему невозможно прописать алиас... Ну опять же получаем условие вида 1=1 и все строки из таблицы. Ой, ну нахуй ты это принес, только расстроил меня.
Аноним 22/04/21 Чтв 16:07:18 2004536277
А где вобще используются курсоры, кроме запросов из языков погромирования?
Аноним 22/04/21 Чтв 21:02:50 2004892278
>>1964573 (OP)
У меня, как и большинства анонов, есть проблема - я забываю то, чем долго не пользуюсь. Вот и с sql сталкиваться приходится редко - чаще всего все мои задачи решает orm. Но забывать ни теорию баз данных, ни сам язык запросов не хочется. Что посоветуете, чтобы держаться на плаву?
Аноним 22/04/21 Чтв 22:08:57 2004971279
>>2004536
в текстовых редакторах
Аноним 22/04/21 Чтв 22:44:07 2004997280
>>2004892
>Что посоветуете
Сидеть в треде.
Можешь задачки решать на sql-ex или codewars, если тебе делать нехуй.
Аноним 23/04/21 Птн 00:52:01 2005084281
>>1964573 (OP)
Пытаюсь тут обновить одну таблицу в postgres (а точнее поле json), но при попытках обновиться эта падла мне часто ругается на знак "%" - это, якобы это "unsopported format character" - втф? С хера ли % не может быть внутри полей бля?

до кучи добавлю, что я вытаскиваю уже готовое поле где присутствует % (!) но когда обновляю его то postgres усирается
Аноним 23/04/21 Птн 18:12:15 2006002282
Неофит в БД, использую постгрю. Создаю таблицу для логов (user_id, operation_time, operation_date) встал вопрос в оптимальном подходе проектированию.
Нужно ле делить поля на два (время операции и дата операции), либо же делать одно поле?
Аноним 23/04/21 Птн 18:17:30 2006009283
>>2006002
Храни в одном. Если потом потребуется отдельно дата или время, ты всегда можешь юзануть соответствующие функции.
Аноним 23/04/21 Птн 18:20:09 2006014284
>>2006009
Спасибо, не знал, что можно их будет селектнуть отдельно друг от друга. Буду вкуривать.
Аноним 23/04/21 Птн 19:43:50 2006142285
>>2006002
Вообще-то дату нужно хранить в integer, равном числу секунд от рождества христова.
Аноним 24/04/21 Суб 05:22:11 2006439286
Аноним 24/04/21 Суб 12:58:19 2006633287
Аноним 24/04/21 Суб 13:15:38 2006678288
>>1999801
Так а в чём плюс то? Если я получаю ровно то, что записал?
Я понимаю, что если изменить таймзхону сервера (или соединения), то получу я другое время. Но я не могу придумать случай, когда такое может произойти
Аноним 24/04/21 Суб 14:26:04 2006805289
>>2006678
>когда такое может произойти
Когда сервер мигрирует из одной tz в другую. Ну офис у тебя переезжает, понимаешь?
мимо проходил
Аноним 24/04/21 Суб 17:03:37 2007067290
>>2006805
Понимаю.
Это такой частый кейс, что для него сделали отдельный тип?
Аноним 24/04/21 Суб 21:13:44 2007409291
>>2004510
Да я сам расстроенный сижу. Меня спрашивают, как оптимизировать этот запрос? Мой вариант - просто выкинуть его нахуй на помойку, хуйня какая - то.
Аноним 25/04/21 Вск 13:13:58 2007951292
PUv2jskut78.jpg 99Кб, 1439x405
1439x405
233033502-0218.jpg 17Кб, 225x220
225x220
Т.е. чтобы научиться работать с SQL для начала нужно было выучить бэк в виде геометрии?
Аноним 26/04/21 Пнд 00:29:51 2008703293
дрочую этот ваш скулэкс, на каком задании следует остановится если я целюсь быть qa макакеном?
Аноним 26/04/21 Пнд 00:36:57 2008713294
>>2007951
Полигоны и градусы такой себе бэк, уровня школы, вот когда вызовом 2 таблиц формируешь матрицу, и с ней надо работать, вот тогда мозги кипят добротно
Аноним 26/04/21 Пнд 00:43:16 2008717295
Аноним 26/04/21 Пнд 00:58:52 2008725296
>>2008717
Да бля, ну без тралленка, я смотрел вакансию типа qa трейни/джун, там столько говна в требованиях, типа sql, xml, bash, vbs, JS и еще сотни всякого говна, сейчас я на 29 упражнении, по сути ничего кроме вложенных запросов и джоинов нормально не освоил.
Конечно если от меня будет требоватся только Select * from выдать, у меня жопа полыхнет.
Аноним 26/04/21 Пнд 01:23:21 2008737297
>>2008725
> если от меня будет требоватся только Select * from выдать
Именно так и будет. Зачем ты вообще задрачиваешь это всё, если идёшь не на разраба? Даже меня, бэкендера, спрашивали только про джойны и нормальные формы, всерьёз с SQL ебутся только всякие ДБА. Тестеру от SQL нужно только уметь делать селекты, подставлять тестовые данные и подобное, причём не обязательно руками, можно мышкой через гуй. Даже уметь создавать таблицы не надо.
> xml
Понимать, что это такое, уметь читать и редактировать
> bash
На уровне ls/mkdir/find/cat/grep.
> vbs, JS
Ага, а ещё git, фреймворки, вёрстка и CI/CD, ведь там будут обязанности фуллстека за зарплату тестера.
Аноним 26/04/21 Пнд 01:33:57 2008742298
>>2008737
Спасибо, укачусь в QA тред
Аноним 26/04/21 Пнд 08:50:35 2008840299
>>2008713
И такую задачу не решить без знаний матриц в вышке чтоль. Или что.
Аноним 26/04/21 Пнд 10:59:54 2008910300
>>2008840
Ну да, но ничего не мешает выучить матрицы прям сейчас
Аноним 26/04/21 Пнд 11:54:21 2009006301
>>1964573 (OP)
анончик посоветуй годноты по администированию оракле, именно по администированию, настройке бекапов , примери и слееров , стендбаев и всего такого
Аноним 26/04/21 Пнд 13:53:32 2009118302
9p79qa7dsti61.jpg 420Кб, 2175x2880
2175x2880
Есть колонка, в котором такой текст:

"To: xuilo@pizda.com,petuh@kurwa.com <br />рандомное количество рандомных букв"
Вместо petuh@kurwa.com может быть любой рандомный адрес, а вот xuilo@pizda.com всегда один

1.Нужно удалить первый емейл-адрес xuilo@pizda.com (он всегда такой) и запятую после него.
Т.е. получится "To: petuh@kurwa.com <br />рандомное количество рандомных букв"

2.Нужно вставить в конец строки "<br />BCC: xuilo@pizda.com"
Т.е. получится "To: petuh@kurwa.com <br />рандомное количество рандомных букв<br />BCC: xuilo@pizda.com"

Аноним 26/04/21 Пнд 20:21:05 2009503303
image.png 67Кб, 795x430
795x430
Аноны, есть один селект на постгресе. Подскажите, пожалуйста, можно ли его как-то замаппить в пары ключ-значение через hstore или другой дататип? Чтобы в итоге получилось [users, {select, select, update}], [vendors_communications, {select, select}], и т.д.
Аноним 26/04/21 Пнд 21:00:04 2009544304
Аноним 26/04/21 Пнд 21:07:11 2009552305
>>2009544
Да! Только я заюзал array_agg. Спасибо!
Аноним 27/04/21 Втр 19:08:29 2010604306
Читал про SQL, работал с sqlite как с мини-БД дял пет-проекта. Пришел на первую работку и тут PostgreSQL, постоянно фигурирует термин "схема" - как я понял это понятие близко к "таблице" но не тождественное ему? Че это блин такое?
Аноним 27/04/21 Втр 19:33:36 2010613307
Аноним 27/04/21 Втр 19:37:19 2010616308
>>2010604
В одной БД несколько схем, схема - это что-то вроде неймспейса/пакета/модуля из обычных языков. В одной схеме может быть несколько таблиц, индексов, процедур и прочего.
Ещё на будущее: под схемой в постгресе, мускле и оракле понимают три совершенно разные вещи.
Аноним 27/04/21 Втр 21:58:56 2010730309
>>2010616
>под схемой в постгресе, мускле и оракле понимают три совершенно разные вещи.
Забавно, что при этом ты дал определение схемы (ну описание) и не сказал, про какую схему ты именно говоришь - прогрессклную, мускульную или оракловую
Аноним 27/04/21 Втр 22:07:51 2010739310
>>2010730
Вопрос был про постгрес, я ответил про постгрес. Логично?
Аноним 28/04/21 Срд 19:12:35 2011827311
>>2004283
Слыш да, а нахуя вообще первый подзопрос?
Там же селект стейтАйди из т2, у которого условие на стейтАйди = константа.
Проще же сразу
...
Where stateid = stateid(переменная)
and (второй говнозапрос)
Аноним 29/04/21 Чтв 00:55:07 2012171312
>>2011827
Если набор StateID в table1 и table2 разный, то это значит, что на запросе с картинки вернутся записи из table1 только в том случае, если они есть в table2, а если заменить подзапрос на константу, то вернутся записи из table1 с этим значением вне зависимости от того, есть они в table2 или нет. Понятно, что в здоровой ситуации набор значений там одинаковый, но в общем случае логика запроса меняется, поэтому нельзя так делать.
Senior SQL Developer
Аноним 29/04/21 Чтв 07:15:01 2012344313
>>2012171
>Senior SQL Developer
Звучит как сеньёр HTML
Аноним 29/04/21 Чтв 10:35:53 2012475314
>>2012344
Ты просто нюфаня и еще не знаешь, что SQL во многих реализациях (например постгре) является тьюринг-полным языком программирования.
Аноним 29/04/21 Чтв 11:58:24 2012575315
image.png 68Кб, 218x231
218x231
Аноним 29/04/21 Чтв 13:20:33 2012670316
>>2012171
Тогда предлагаю заменить первый подзапрос на
Условие на константу + exists.

Тогда твой кейс обработаем и может быть быстрее, чем если в table2 хуиллион записей равных нашей константе тянуть
не Senior SQL Developer
Аноним 29/04/21 Чтв 13:39:29 2012680317
Аноним 29/04/21 Чтв 14:01:29 2012700318
Аноним 29/04/21 Чтв 18:02:30 2012942319
>>2012670
Согласен, коллега, не доебаться.
Аноним 30/04/21 Птн 07:55:38 2013539320
>>1964573 (OP)
Реквестирую кроссплатформенную реляционную СУБД с открытым кодом и свободной лицензией.
Аноним 30/04/21 Птн 08:11:07 2013542321
>>1964573 (OP)
Анон, можно ли как-то из базы данных SQLite, сделать клиент-серверную СУБД?
Пока нашёл, вот здесь: https://qastack.ru/dba/21/is-it-possible-to-use-sqlite-as-a-client-server-database
некий SQLitening : https://sqlitening.planetsquires.com/index.php
но это для Windows. А для прыщей чёт не могу нихуя нарыть.
Хочу сделать говносайт, с базой данных SQLite, потому что она кроссфлатфоренная и код её открыт.
Аноним 30/04/21 Птн 08:14:35 2013543322
>>2013539
Вроде нашёл HSQLDB . Есть ещё чё-нить годное?
Аноним 30/04/21 Птн 08:23:17 2013544323
Аноним 30/04/21 Птн 08:41:49 2013552324
Аноним 30/04/21 Птн 08:54:17 2013567325
>>2013543
MySQL? MariaDB? DB2 Express-C? CUBRID ? Sequel Pro? PostgreSQL?
Аноним 30/04/21 Птн 08:57:04 2013572326
>>2013567
> MySQL
Говорят, что это только формально опенсорс, а фактически его задушил оракл.
Аноним 30/04/21 Птн 09:02:21 2013581327
>>2013572
Oracle RDBMS? А она не опенсорец?
Аноним 30/04/21 Птн 09:03:35 2013582328
Аноним 30/04/21 Птн 09:05:22 2013584329
>>2013581
Нет, оракл - одна из наипроприетарнейших РСУБД.
Аноним 30/04/21 Птн 09:09:30 2013589330
>>2013584
Ну так а нафиг она тогда нужна, если сорца нету? Для понтов, мол смотри у нас тут есть скомпилированная РСУБД, она даже работает, а что там за вирусы, черви и бекдоры в коде - ебать не должно, код скрыт. Да?
Аноним 30/04/21 Птн 09:20:22 2013598331
>>2013589
Опенсорс ничего не гарантирует. В миллионах строк открытого кода тоже можно спрятать много интересного, и никто не заметит, потому что нет ни у кого времени полностью читать весь код. В линукс уже несколько раз коммитили бэкдоры, пруфы можешь поискать сам.
Да и оракл стал популярен в те времена, когда тупо не было полноценных альтернатив по возможностям, это как с линуксом, который но недавнего времени был неюзабелен на десктопе (и до сих пор вызывает вопросы). Сейчас же с использованием оракла написано слишком много кода, их нельзя быстро переписать на постгрес.
Аноним 30/04/21 Птн 09:37:35 2013604332
>>2013598
А как насчет запилить опенсорц оракл со свободной лицензией?
Аноним 30/04/21 Птн 09:49:54 2013609333
>>2013604
Оракл вряд ли на это пойдёт, он слишком жадный, и эта жадность может его погубить. У него и так кроме СУБД куча других проприетарных продуктов, и он не спешит их опенсорсить.
Аноним 30/04/21 Птн 10:42:11 2013644334
>>2013609
Да нет, ты не понял. Тупо взять деобфусцировать, декомпилировать, дизасеблировать, и/или воссоздать, дописать и портировать модули подпрограммные, которые выполняли бы всё то, что делает оракл, и назвать это оракл-опен-сорц-реверс-инженеред-портабле-еxe

>>2013539
Может ALTIBASE HDB? Тут пишут что код открыт https://datewiki.ru/wiki/Altibase
Аноним 30/04/21 Птн 10:48:39 2013653335
>>2013598
> их нельзя быстро переписать на постгрес.
А сможет ли постгрес справиться со всем тем, с чем справляется оракл?
Аноним 30/04/21 Птн 10:56:21 2013664336
image.png 9Кб, 201x456
201x456
image.png 19Кб, 832x341
832x341
Помогите написать SQL запрос для того что бы, после того как пользователь добавит товар в корзину, в списке выпадали только те размеры, которые есть на складе.

SELECT DISTINCT Склад.Размер
FROM Склад INNER JOIN Корзина ON Склад.КодТовара = Корзина.КодТовара
ORDER BY Склад.Размер;

Дошел только до этого, но оно не работает. Для курсача надо
Аноним 30/04/21 Птн 10:58:41 2013671337
Я тупой ок? и вопросы у меня тупые, но сжальтесь, как-то можно фильтровать запрос через CASE а не через WHERE или HAVING?
Аноним 30/04/21 Птн 11:00:51 2013675338
>>2013644
За это на бутылку посадят, ни одна организация не будет это использовать. Больше толку будет от портирования оракловых фич в другие БД.
Аноним 30/04/21 Птн 11:01:30 2013677339
>>2013664
WHERE склад.количество > 1
не?
Аноним 30/04/21 Птн 11:08:35 2013688340
image.png 3Кб, 279x121
279x121
>>2013677
На этот код

SELECT DISTINCT Склад.Размер
FROM Склад INNER JOIN Корзина ON Склад.КодТовара = Корзина.КодТовара
WHERE Склад.Количество > 1
ORDER BY Склад.Размер;

аксес выводит пикрил, а после тупо выводит все размеры со всех позиций на складе
Аноним 30/04/21 Птн 11:13:18 2013693341
>>2013671
Да, использовать case в where или having, но скорее всего тебе это не нужно.
Аноним 30/04/21 Птн 11:48:21 2013710342
>>2013653
Сложно сказать, сколько ни читал сравнения оракла и постгреса, везде одна субъективщина типа "а у нас есть merge и пакеты, а у вас?". С основными задачами они справляются примерно одинаково, и реальная разница в некоторых продвинутых фичах (наподобие репликации), которые нужны не всем.
Аноним 30/04/21 Птн 12:14:41 2013744343
>>2013710
>нужны не всем
Вот кому не нужны, те и слезают, а большие конторы сидят и будут сидеть.
Аноним 30/04/21 Птн 12:14:47 2013745344
>>2013688
>WHERE Склад.Количество > 1
У тебя нет поля Склад.Количество .

Может так:
>WHERE Склад.КоличествоНаСкладе >= 1
?
Аноним 30/04/21 Птн 12:19:37 2013753345
>>2013745
Это я понял, все равно корректно ничего не показывает
Аноним 30/04/21 Птн 13:39:39 2013864346
>>2013753
Нужно больше информации, алсо, попробуй реализовать через вложенный запрос, иногра обсалютно одинаковые логические запросы, через вложенный, выдают разные результаты
Аноним 30/04/21 Птн 13:43:58 2013870347
Аноним 30/04/21 Птн 13:44:25 2013871348
>>2013864
>>2013753
Типа WHERE Склад.количествонаскладе IN (SELECT Количествонаскладе
FROM склад
WHERE количествонаскладе > 0)
Аноним 30/04/21 Птн 13:47:25 2013873349
>>2013870
Та я сам только ботаю на sql-ex и откуда у тебя форма лезет не ебу
Я конечно не представляю как это должно быть, но для каждой новой клиентской корзины я бы создавал отдельно таблицу ьипа <клиентАЙДИ>корзина (продуктайди, кодичествовкорзине)
Аноним 30/04/21 Птн 13:55:03 2013879350
>>2013873
>я сам только ботаю на sql-ex
А зачем тогда людям что-то советуешь?
Ладно этот чел, он свою лабу сдаст и забудет, но вдруг кто-то прочитает бред по типу этого и будет думать, что это правда
>иногра обсалютно одинаковые логические запросы, через вложенный, выдают разные результаты
Аноним 30/04/21 Птн 14:36:52 2013908351
>>2013879
Ну по тем задачам, не помню какая именно, так и было, где-то в начале, до 20 точно
>зачем
Потому что профи годны только говниться а не подсказывать
Аноним 30/04/21 Птн 14:43:38 2013910352
>>2013908
>так и было
Нет, не было. Это ты не понял, как оно работает.
Аноним 30/04/21 Птн 14:44:33 2013911353
>>2013910
Кстати, если принесешь задачу с примерами, я скажу, где ты обосрался.
Аноним 30/04/21 Птн 21:25:24 2014401354
>>2011827
Как оказалось мой интервьюер такого ответа и ожидал.
Аноним 02/05/21 Вск 19:58:09 2016735355
>>2007951
Думаю да, у меня образование 9 классов (гдя я проебывал уроки, особенно математику). Недавно пошел на собеседование в контору, где чисто на t-sql все делают. Мне дали тестовое, которое очень просто представить на системе координат. В итоге я его так нихуя сделать и не смог... Теперь собираюсь наверстывать упущенное через Khan Academy.
Аноним 03/05/21 Пнд 04:34:47 2017152356
>>2016735
Я б таких собеседователей ногами пиздил. Второй год работаю, ниразу не одной задачи с матаном\геометрией не попалось. Если нужно что-нибудь более сложное посчитать, всегда приносят формулу.
Аноним 04/05/21 Втр 02:11:46 2018373357
>>1964573 (OP)
Как подключиться к файлу базы данных SQLite из браузера client-side, чтобы читать-писать данные там, используя SQL-запросы?
Вижу здесь: https://github.com/sql-js/sql.js
есть DEMO: https://sql.js.org/examples/GUI/
и оно вроде работает в браузере,
но оно где-то хостится на каком-то сервере,
а я не хочу вгружать и передавать свою базу данных, и сами данные,
на чей-то сервер, чтобы там кто-то колупался. Я хочу client-side.

Есть нечто подобное, чтобы работало, мм?
Аноним 04/05/21 Втр 02:18:33 2018376358
image.png 19Кб, 428x307
428x307
Аноним 04/05/21 Втр 02:22:41 2018380359
>>2018376
Бля, оно вгружает всю базу, походу в память, а если там терабайт будет?
Аноним 04/05/21 Втр 02:39:26 2018399360
>>2018380
Терабайт данных в sqlite? Скорее всего, sqlite тебе не нужен.
Аноним 04/05/21 Втр 17:12:33 2019204361
image.png 18Кб, 672x303
672x303
Как сделать так чтобы запрос вывел только самый популярный месяц, т.е. 5
Аноним 04/05/21 Втр 17:41:52 2019260362
Я правильно понимаю, что firebase в РФ запрещена для использования в качестве авторизации?
Аноним 04/05/21 Втр 17:42:50 2019262363
>>2019204
Order by count и лимит 1 в конце.
Аноним 04/05/21 Втр 17:47:42 2019267364
image.png 10Кб, 594x108
594x108
>>2019262
Такой запрос вообще ошибку выдает


Error Code: 3029. Expression #1 of ORDER BY contains aggregate function and applies to the result of a non-aggregated query
Аноним 04/05/21 Втр 17:50:24 2019274365
>>2019204
... from moving_b group by "Месяц" order by count(*) desc fetch first 1 row only;
Аноним 04/05/21 Втр 17:50:38 2019275366
>>2019204
Посчитать COUNT(Месяц) where месяц =1
потом 2 и т.д.
или
valueCount
Аноним 04/05/21 Втр 17:56:41 2019286367
>>2019267
select mounth from ... group by mounth order by count (mounth) desc limit 1;
Аноним 04/05/21 Втр 17:59:36 2019294368
image.png 20Кб, 659x241
659x241
>>2019286
>select mounth from ... group by mounth order by count (mounth) desc limit 1;
На это выдает почему то 6 месяц, а не 5
Аноним 04/05/21 Втр 18:08:44 2019304369
>>2019294
Хотя ладно, хуй с этим запросом, пропущу его. Если уж всем тредом не смогли сделать, то проще забить
Аноним 04/05/21 Втр 18:10:13 2019308370
>>2019286
> limit 1;
земля тебе хуями слэйвянский недочеловек
Аноним 04/05/21 Втр 18:19:10 2019326371
Аноним 05/05/21 Срд 11:02:38 2020054372
>>1964573 (OP)
Я знаю, что любая реляционная база данных, состоит из таблиц взаимосвязей между ними.
Но для того, чтобы работать с базой данных, нужна целая, пиздатая СУБД, которая не всегда может поставится - это раз, во вторых, там могут быть бекдоры всякие и хрен знает что, в третьих лицензии могут быть несвободные, и всякое такое.
Вопрос. А возможно ли работать с базой данных, БЕЗ СУБД?
Скажем, вот, можно ли создать базу данных, в блокноте, и просто глазами смотреть где какое значение в поле какой таблицы, и так вот читать-писать-искать значения, производя CRUD?

Если да, то можно ли пихнуть всё дело - пхнуть в один бинарный файл, а вместо индексов, просто сунуть смещения на всякие данные,
и обходить всё это, потом, алгоритмом, в том числе и кастомным, вроде SQL-запроса?

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

В общем, реквестирую, минимально-возможную реляционную СУБД, такую, чтобы возможно, её можно было с нуля написать.
Аноним 05/05/21 Срд 14:01:53 2020275373
>>2020054
Зачем, если есть SQLLite?
Аноним 05/05/21 Срд 18:29:04 2020674374
>>2020054
> нужна целая, пиздатая СУБД, которая не всегда может поставится
Я бы не стал доверять данные серверу, на котором такие проблемы с окружением.
> там могут быть бекдоры всякие и хрен знает что
А ещё они могут быть в процессоре, в ОС, в компиляторах, в мозгу с рождения, в прививке от коронавируса. Подобные рассуждения ведут только к тому, что надо срочно запереться в комнате с мягкими стенами.
> лицензии могут быть несвободные, и всякое такое.
А могут быть свободные. Ты наугад выбираешь СУБД что ли, или всё-таки ищешь подходящую под задачи с подходящей лицензией?
> возможно ли работать с базой данных, БЕЗ СУБД?
Невозможно, ты так или иначе напишешь свою СУБД, пусть это и десяток функций, ломающихся при масштабировании.
> Скажем, вот, можно ли создать базу данных, в блокноте, и просто глазами смотреть где какое значение в поле какой таблицы, и так вот читать-писать-искать значения, производя CRUD?
Множество CSV-файлов. занимать будет дохуя места, запросы будут медленными, постоянная перезапись файлов быстро убьёт диск.
> Если да, то можно ли пихнуть всё дело - пхнуть в один бинарный файл, а вместо индексов, просто сунуть смещения на всякие данные, и обходить всё это, потом, алгоритмом, в том числе и кастомным, вроде SQL-запроса?
Примитивная СУБД так и будет работать.
> И ещё, я знаю, что любую реляционную БД, любой величины, можно засунуть в одну таблицу, и в полях которой - имена всех таблиц, и всех их столбцов, и всех возможных типов данных, в таблицу, где каждая запись представляет из себя конкретное значение - данные, но придётся указывать номер таблицы, номер столбца, номер типа данных, и по этим номерам уже извлекать данные конкретного типа из конкретного столбца, конкретной таблицы, это уже дублирование пиздецкое, и ещё куча нуллей будет в такой огромной таблице.
Именно так, поэтому этого не делают.
> В общем, реквестирую, минимально-возможную реляционную СУБД, такую, чтобы возможно, её можно было с нуля написать.
Гугли 12 правил Кодда, это минимальные требования к релцяционной СУБД. Написать с нуля, конечно, возможно всё, но легко сдаться на первых сложностях наподобие реализации ACID-транзакций.

Короче, бери sqlite.
Аноним 06/05/21 Чтв 11:15:45 2021264375
>>2020674
Так просто поролить надо!


1 oracle
2 maridb
3 MSSQL
4 PostgresSQL
5 REDIS
6 CASSANDRA
7 CLICKHOUSE
8 SCILLA
9 VERTICA
0 SQL LITE

На дабл берёшь любую релиционню, 00 колоночную.
66 пишешь свою говнобазу на оркале
77 хранишь все в фс



Аноним 06/05/21 Чтв 11:16:27 2021266376
>>2021264
>66 пишешь свою говнобазу на делфи
самофикс
Аноним 06/05/21 Чтв 14:47:53 2021573377
Добрый день, господа, мне нужно получить в ближайшие полгода сертификат разработчика pl/sql, было бы неплохо чему-то научиться, но основное - получить корку. Стоимость обещали оплатить, но пределов ценовых пока не уточнял. Получал кто-нибудь такой сертификат в ДС?
Аноним 06/05/21 Чтв 14:48:37 2021575378
Аноним 06/05/21 Чтв 14:56:41 2021600379
image.png 65Кб, 853x485
853x485
image.png 216Кб, 800x600
800x600
>>2020275
Да я уже заебался с ней, просто, пиздец как.
Нихуя документации, годной, в этом ебучем тырнете, найти не могу, блядь.
Там всё копирастическим и корпоратокративным языком написано, чтобы запутать анона, и чтобы он забил на это хуй поскорей.

У меня, здесь, короче, Windows XP, CSharp (C#), и .NET Framework 4.0. И ещё есть mono на ubuntu,
где можно запускать шарповый код, совместимый с .NET Framework 4.0.

Единственную норм приложуху для тыканья sqlite3 DB, что я нашёл -
так это мокрописька Sqlite Expert Professional 5.3 (x86), с кряком от васяна.
Да, там есть гуй, и куча всяких свистоперделок, но сореца нету нихуя.

Я вижу, что она использует sqlite3.dll , потому что она есть там, внутри, прекомпиленная.
А где её сорец и как её сбилдить, и как юзать - вообще непонятно нихуя.

Нашёл здесь: https://github.com/moneymanagerex/System.Data.SQLite
сорец System.Data.SQLite.dll вроде оно компилится на c# ,
и на выходе в папке System.Data.SQLite-master\bin\2010\Win32\Debug\System.Data.SQLite.dll
лежит многовесный файл 2,80 МБ.
Он, походу, содержит в себе System.Data.SQLite.Interop.dll, который просят всякие гуи,
и работает как sqlite3.dll
Другой файл \System.Data.SQLite-master\bin\2010\Debug\bin\System.Data.SQLite.dll
имеет меньший размер, и когда его кидаешь, просит SQLite.Interop.dll (а я ебу что это такое ваще).
Ещё, в папке \System.Data.SQLite-master\bin\2010\Debug\bin\ куча всяких других, непонятных dll-лок,
я уже заебался гуглить всю эту хуйню и закрывать вкладки, эти ебучие, а потом опять открывать, и закрывать, блядь.
Искал я как работать с этой хуйнёй на шарпе, наткнулся на это: https://devpractice.ru/sqlite-c/
И там, внутри, какие-то конструкции из кода нагороженные, нихуя не понятно что к чему.
Затем я искал нормальное API, и наткнулся на вот такую софтину: https://github.com/donet5/SqliteSugar
хоть она и компилится, но там многобукв в коде, ещё и по-китайски.

Хотелось, бы, блядь, одну dll-ку, из кода скомпилить, приложить её, и дёргать за апи-методы, и пхать туда sql-запросы,
а не писать в говнокоде ебические конструкции, каждый раз подключаться, блядь, к файлу базы, для каждой операции,
и развозить всю эту хуйню - на 10,000 строк.
Судя по сайту https://system.data.sqlite.org/index.html/doc/trunk/www/index.wiki
там есть справка в формате CHM, как его открыть - вообще не ебу, у меня открывается окно, а там такое говно.
Короче, блядь, как заебал уже весь этот пердолинг ебучий,
да и нахуй мне все эти функции и свистоперделки сиквелайта?

Вот я и задался вопросом, как сделать самую простую реляционную СУБД, из говна и палок, блядь.
Чтобы было настолько проще, что аж некуда уже.
Ну и, опционально уже, прикрутить туда возможность индексации/репликации, и всю хуйню эту вот.
Но так, чтобы было опенсорец вообще заебатый.

>>2020674
>Я бы не стал доверять данные серверу, на котором такие проблемы с окружением.
А я бы напротив сделал софтины обратно-совместимыми даже с таким вот сервером, чтобы они были вообще пиздец какими кроссплатформенными.
>А ещё они могут быть в процессоре, в ОС, в компиляторах, в мозгу с рождения, в прививке от коронавируса.
>Подобные рассуждения ведут только к тому, что надо срочно запереться в комнате с мягкими стенами.
Ну так надо выявлять их и вырезать, а для этого надо сорец, чтобы не декомпилировать,
и не деобфусцировать закриптованный крипторами, дизасемблированный говнокод копирастический.
>А могут быть свободные. Ты наугад выбираешь СУБД что ли, или всё-таки ищешь подходящую под задачи с подходящей лицензией?
Я хочу самую свободную и реляционную СУБД, желательно свою, так чтобы её можно было с нуля написать и не ебаццо с лицензированием ихних всяких свистоперделок.
>Невозможно, ты так или иначе напишешь свою СУБД, пусть это и десяток функций, ломающихся при масштабировании.
ВОТ. Есть где-то вводная инфа, о том, как это можно сделать?
>Множество CSV-файлов. занимать будет дохуя места, запросы будут медленными, постоянная перезапись файлов быстро убьёт диск.
А если в архиве их хранить, чтоб дохуя места не занимали - это раз.
Во-вторых, писать в оперативу, её скидывать в кэш, а из кэша потом обновлять их в архиве?
Но, блядь, каждый раз разархивировать всю хуйню - это пиздец конечно.
>Примитивная СУБД так и будет работать.
Вот именно это и вертелось, и вертится на уме. Сделать примитивную СУБД, которая тупо работала бы с одним бинарным файлом.
И что если писать прямо в конкретные смещения, на диске, не перезаписывая весь файл?
Быть может я и пытаюсь изобрести сиквелайт, лол. Просто я в него так и не врубился, толком.
>Именно так, поэтому этого не делают.
Зато одна таблица, как-бы универсальное представление любой базы данных, получается.
К тому же, нули, это всего один байт. На диске очень дохуя нулевых байтов, всё свободное место состоит из нулевых байтов, и чё?
И числа много места не занимают, особо. Особенно если это постоянно дублирующиеся - номер таблицы и номер столбца.
Таблиц, как правило немного, и столбцов в них тоже, ну может 65535 максимум, так что по два байта можно выделить, для этих повторяющихся данных, ну или чуть больше, пох.
>Гугли 12 правил Кодда, это минимальные требования к реляционной СУБД.
Годно, но них ещё врубиться надо, по хардкору, чтобы понять их.
>Написать с нуля, конечно, возможно всё, но легко сдаться на первых сложностях наподобие реализации ACID-транзакций.
Ну это вообще космос. А нафиг они нужны?
>Короче, бери sqlite.
А на sqlite существуют какие-нибудь сайты на шарпе?
Вот, например, какой-нибудь сайт с личным кабинетом, интернет-аукцион, скажем,
где юзер может зарегистрироваться и зайти в аккаунт?

>>2021264
Тут есть NoSQL базы данных, то есть, как-бы нереляционные.
А мне надо реляционная, потому что там можно взаимосвязывать таблицы.
И мне нахуй не нужны ебические СУБД со всякими проприетарными лицензиями, которые просят бабала, и ставятся прямо в систему из инсталлера,
или запускаются на сервере где-то, где могут спиздить данные, блядь.
В идеале, я бы хотел простую и легковесную СУБД, желательно свою, и чтобы она была портабельной на флешке, как сиквелайт,
и чтобы, тупо чтобы вязать всякую хуйню, наподобии пикрил.
Вот надо расписание, например, сделать тупо. Две таблички взаимосвязать, как на пик2.
Так что для этого целый постгресс вытягивать и инталлер распаковывать?
Или сервер поднимать с проприетарным мускулом, состоящим из прекомпиленных файлов, блядь,
и писать скрипты на PHP, и делать целый сайт и ещё и хостить его, блядь?
Аноним 06/05/21 Чтв 15:06:54 2021626380
>>2021600
>00
Что это было? Сиквелайт, дабл, или колоночная?
Аноним 06/05/21 Чтв 15:19:40 2021660381
>>2021600
Что ты несёшь? Что ты блядь несёшь?

Идёшь на https://www.sqlite.org/index.html
Качаешь, там же берешь документауцию. Потом обращавшся из своего ёбаного питушарпа к базе и пишешь данные. Если не знаешь как пишешь в гугле ПИТУШАРП СИКВЛАЙТ, читаешь и обращаешся. Что блядь сложного?
Какой нахуй xp? Какаой нахуй хелп локальный? Тебя что там разморозили: Как там в нулевых?
Аноним 06/05/21 Чтв 15:20:45 2021666382
>>2021626
Ну там перенос тсроки проебался, на простой дабл берёшь что хочешь, на особые дабл берешь согласно списку. А то что она колоночная..НУ хули, ролл есть ролл
Аноним 06/05/21 Чтв 16:20:04 2021736383
>>2021600
> Там всё копирастическим и корпоратокративным языком написано, чтобы запутать анона, и чтобы он забил на это хуй поскорей.
Нет, это чтобы не было разночтений, и дока была исчерпывающей. Невозможно описать сложную систему простым языков без опускания подробностей.

> Единственную норм приложуху для тыканья sqlite3 DB, что я нашёл -
> так это мокрописька Sqlite Expert Professional 5.3 (x86), с кряком от васяна.
Редко надо руками копаться в БД, обычно всё нужное делают сайты/программы, которые пишешь.

> Вот я и задался вопросом, как сделать самую простую реляционную СУБД, из говна и палок, блядь. Чтобы было настолько проще, что аж некуда уже.
> Ну и, опционально уже, прикрутить туда возможность индексации/репликации, и всю хуйню эту вот.
> Но так, чтобы было опенсорец вообще заебатый.
Так и напишешь свои 100500 строк, будет ничем не лучше существующего.

> А я бы напротив сделал софтины обратно-совместимыми даже с таким вот сервером, чтобы они были вообще пиздец какими кроссплатформенными.
Если заниматься поддержкой всех некро-платформ с 3.5 пользователей, времени на разработку самой СУБД не будет вообще.

> Ну так надо выявлять их и вырезать, а для этого надо сорец, чтобы не декомпилировать, и не деобфусцировать закриптованный крипторами, дизасемблированный говнокод копирастический.
Зачем, если все исходники postgresql, mariadb и sqlite полностью доступны. То что сложно и многабукаф - это другой вопрос.

> Я хочу самую свободную и реляционную СУБД
postgresql, mariadb, sqlite.

> ВОТ. Есть где-то вводная инфа, о том, как это можно сделать?
Это сложная задача, которой обычно занимается толпа сеньоров с многолетним стажем. Читают талмуды на 1к страниц с лютой теорией, изучают архитектуру, документацию, опирацию на свой опыт юзания тонкостей существующих СУБД, много думают и пишут, лет через 5-10 что-то толковое может и получается.

> А если в архиве их хранить, чтоб дохуя места не занимали - это раз.
Почти все алгоритмы сжатия жмут данные так, что без полной распаковки ничего не сделать. Для работы приложения всё равно потребуется постойнный доступ к этим данным, и придётся всё держать распакованным.
> Во-вторых, писать в оперативу, её скидывать в кэш, а из кэша потом обновлять их в архиве?
Обновит пользователь часть данных, а другую часть обновить не успел из-за какой-нибудь ошибки. Данные будут несогласованны. Например, успел списать с одного счёта, а на другой не успел зачислить, и деньги потерялись. ACID-транзакции для этого и придумали, чтобы подобных проблем не было, и если в ходе транзакции была ошибка, все действия полностью откатываются. Реализовать такое сложно, но оно того стоит.

> Вот именно это и вертелось, и вертится на уме. Сделать примитивную СУБД, которая тупо работала бы с одним бинарным файлом. И что если писать прямо в конкретные смещения, на диске, не перезаписывая весь файл?
Ну, я где-то читал, что в наноборде изобрели что-то подобное, хранят бинарник и работают по смещениям, которые находят через самописный индекс. Не сильно интересовался темой. Но тут много других проблем возникает, например, что если при обновлении данные увеличились и не влезают в то место, где хранились раньше, или как удалять данные, но так, чтобы не было много неиспользованного пространства и не росла фрагментация.

> Зато одна таблица, как-бы универсальное представление любой базы данных, получается. К тому же, нули, это всего один байт. На диске очень дохуя нулевых байтов, всё свободное место состоит из нулевых байтов, и чё? И числа много места не занимают, особо. Особенно если это постоянно дублирующиеся - номер таблицы и номер столбца.
Экспоненциальный рост числа этих нуллов быстро сожрёт всё свободное место на диске. Если у тебя есть 10 таблиц, в каждой по 10 колонок и по 100 записей (сравнительноая небольшая БД), но при превращении в одну огромную таблицу это будет (10x100)^10 = 1000000000000000000000000000000 ячеек, каждая в лучшем случае будет занимать один байт.

> А на sqlite существуют какие-нибудь сайты на шарпе?
> Вот, например, какой-нибудь сайт с личным кабинетом, интернет-аукцион, скажем,
> где юзер может зарегистрироваться и зайти в аккаунт?
С расчётом на 10-20 не очень активных пользователей, может, и существует. Sqlite и друие подобные БД, где всё в одном файле, хреново масштабируются.
Аноним 06/05/21 Чтв 22:54:21 2022234384
Аноним 07/05/21 Птн 01:45:22 2022413385
image.png 103Кб, 600x442
600x442
>>2021660
>Что ты несёшь? Что ты блядь несёшь?
Жопоболь свою несу, от пердолинга, заебало гуглить уже.

>Идёшь на https://www.sqlite.org/index.html
>Качаешь, там же берешь документауцию.
Ну и чё? Открываю вкладку, иду на Documentation, вижу кучу букв по-английски, и закрываю вкладку. И так каждый раз.
Там ни слова про System.Data.SQLite, и как его юзать, блядь.
Только вот здесь: https://devpractice.ru/sqlite-c/
я нашёл некие фрагменты кода,
но оно эта софтина: https://github.com/devpractice-repo/SQLiteAndCSharp
какая-то недопиленная, скорее тестовый пример, просто.
Там нет описания всех функций и методов этой длл-ки System.Data.SQLite.dll и прочих.
А вот здесь, хоть и есть описание длл-лок: https://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki
но там ещё больше букв, и не вижу описания методов и примеров их использования.
> Если не знаешь как пишешь в гугле ПИТУШАРП СИКВЛАЙТ, читаешь и обращаешся. Что блядь сложного?
Писал на github'e sqlite api, sqlite c#, смотрел кучу кода,
там блядь TargetNetFramework 4.5, 4.6.5, какие-то Sdk, nuget packages, хуй знает что ещё, но на .NET Framework 4.0 оно не стаёт и не компилится нихуя, в Microsoft Visual Studio 2010 кококонпелятор бьёт ошибок хуеву кучу, заебало уже вкладки с этими недопиленными репозитариями закрывать.
Обратная совместимость оставляет желать лучшего, это пиздец какой-то.
>Какой нахуй xp?
Каноничный, legacy, который.
>Какаой нахуй хелп локальный?
А вот тот CHM-файл, что внизу, здесь: https://system.data.sqlite.org/index.html/doc/trunk/www/index.wiki
>Тебя что там разморозили: Как там в нулевых?
Я на XP-юше с 2002-го года, лол, Windows Vista не ставил, потому что.

>>2021666
Колоночная (00) - отпадает, пушо она не реляционная и там нельзя взаимосвязывать таблицы, блядь.
Значит либо пердолить свою СУБД (дабл), либо sqlite (0).
Хотя хз, может и есть где-то колоночные реляционные, лол.

>>2021736
>Нет, это чтобы не было разночтений, и дока была исчерпывающей. Невозможно описать сложную систему простым языков без опускания подробностей.
Меня больше интересуют описания методов, и как их юзать,
примеры какие-то, блядь, которые хуй нагуглишь, на русском.

>Редко надо руками копаться в БД, обычно всё нужное делают сайты/программы, которые пишешь.
Ну, чтобы посмотреть те же view'ы в SQLite, надо запускать эту ёбу, а она ещё и памят жрёт немало. Два экземпляра запускаю - синий и экран смерти, выхватываю, блядь.

>Так и напишешь свои 100500 строк, будет ничем не лучше существующего.
Бля. А если минимализмом обмазаться, и низвести всё до таблиц, связей между ними, и CRUD, без индексаций, репликаций, транзакций, и прочих фич? Разумеется, с перспективой их допиливания. И сделать это кроссплатформенным и опенсорцным.

>Если заниматься поддержкой всех некро-платформ с 3.5 пользователей, времени на разработку самой СУБД не будет вообще.
Да блядь, я на XP столько софта видел, была самая популярная ось, пикрил. А ты говоришь 3.5 юзера, лол.

>Зачем, если все исходники postgresql, mariadb и sqlite полностью доступны. То что сложно и многабукаф - это другой вопрос.
Так они на разных всяких других языках, и не всегда это можно поставить. Постгресс вообще имеет инсталлер, который мало того что вяжется к системе, так ещё и нихуя не запускается здесь. Mariadb - там консоль какая-то, и что с ней делать - хуй знает, и ещё и надо сервер поднимать.

>Это сложная задача, которой обычно занимается толпа сеньоров с многолетним стажем.
>Читают талмуды на 1к страниц с лютой теорией, изучают архитектуру, документацию,
>опирацию на свой опыт юзания тонкостей существующих СУБД,
>много думают и пишут, лет через 5-10 что-то толковое может и получается.
Бля... Ну пускай себе занимаются, тогда.

>> Вот именно это и вертелось, и вертится на уме.
>>Сделать примитивную СУБД, которая тупо работала бы с одним бинарным файлом.
>>И что если писать прямо в конкретные смещения, на диске, не перезаписывая весь файл?
>Ну, я где-то читал, что в наноборде изобрели что-то подобное, хранят бинарник и работают по смещениям,
>которые находят через самописный индекс. Не сильно интересовался темой.
Там тупо каждый нанопост имеет фиксированное число данных (читай что это одна строка одной таблицы),
и всё это пишется в db3-файл сыро, как raw-данные.
Отдельно, формируется индекс, в виде файла со смещениями,
https://github.com/username1565/nanoboard/blob/8f0edd8d02b9f680f7ce1f70ddd29b8f7c367110/nanodb.exe-source/Database/PostDb.cs#L28
И этот индекс быстрее загружается в память.
По индексу, уже, по ключам (хэшам), извлекаются уже смещения, а по ним - сами нанопосты из двоичного файла,
чтобы не вгружать весь двоичный файл в память.
Но, как я уже написал, весь двоичный файл - он как одна пиздатая таблица,
и там нет реляционной базы данных, как таковой, там нет множества таблиц, и их взаимосвязей.
Если сделать две-три таблицы взаимосвязанные или стопицот таблиц, то яебу как эту хуйню хранить в таком виде,
наверное надо кучу баз и кучу индексов создавать, а логику их обработки (sql-запросы, всякие), внутри кода вхардкодить, блядь.
Ебанина пиздецкая, короче, такая что даже в башке не помещается планирование этого действа.

>Но тут много других проблем возникает,
>например, что если при обновлении данные увеличились и не влезают в то место, где хранились раньше,
Тогда, добавляется новая запись в двоичный файл, и обновляются оффсеты в индексном файле, по хэшу-ключу,
а старые данные - затираются нуллями.
>или как удалять данные, но так, чтобы не было много неиспользованного пространства и не росла фрагментация.
Вот эта трабла там не решена. Когда нанопост удаляется навсегда одминчегом этой читалки постов,
в двоичном файле, данные, просто филлятся нуллями, и индекс обновляется, но хэш сохраняется,
а оффсеты в индексе обнуляются, и нанопост помечается что он удалён нах.
Всё в коде есть, и расписано, но это не реляционная СУБД, и даже не БД,
а просто одна таблица с постами и индекс для быстрой загрузки.

>Экспоненциальный рост числа этих нуллов быстро сожрёт всё свободное место на диске.
>Если у тебя есть 10 таблиц, в каждой по 10 колонок и по 100 записей (сравнительноая небольшая БД),
>но при превращении в одну огромную таблицу это будет (10x100)^10 = 1000000000000000000000000000000 ячеек,
>каждая в лучшем случае будет занимать один байт.
А нахуя ты в степень возвёл? Там примерно 10x10x100 ячеек будет, разве не?
То есть, около 10000 ячеек, получается на все данные, где-то,
и в одной пиздатой таблице это 10000 строк,
где одна ячейка - значение в каком-то поле каждой строки таблицы.
В таблице, с числом полей 1(ID) + 3(имя таблицы, имя столбца, тип данных) + 5 (если брать все типы всевозможных данных, у sqlite 5 типов данных);
и вот в такой таблице - 10000 строк, как-бы:
код, имя таблицы, имя столбца, тип данных, и сами данные в соответствующем столбце из 5-ти возможных типов.
Всего, столбцов 9, и 10000 строк - 90000 ячеек, получается.
Аноним 07/05/21 Птн 01:50:44 2022419386
>>2021736
>С расчётом на 10-20 не очень активных пользователей, может, и существует. Sqlite и друие подобные БД, где всё в одном файле, хреново масштабируются.
Тут https://stackoverflow.com/a/3867722
пишут что 100к посетителей должен держать сайт с базой данных сиквелайт.
Аноним 07/05/21 Птн 01:51:23 2022421387
>>2021736
>хреново масштабируются.
А чё за масштабирование, и в чём именно возникают проблемы?
Аноним 07/05/21 Птн 02:09:16 2022426388
>>2022413
>А нахуя ты в степень возвёл? Там примерно 10x10x100 ячеек будет, разве не?
>То есть, около 10000 ячеек, получается на все данные, где-то,
>и в одной пиздатой таблице это 10000 строк,
>где одна ячейка - значение в каком-то поле каждой строки таблицы.
>В таблице, с числом полей 1(ID) + 3(имя таблицы, имя столбца, тип данных) +
>5 (если брать все типы всевозможных данных, у sqlite 5 типов данных);
>и вот в такой таблице - 10000 строк, как-бы:
>код, имя таблицы, имя столбца, тип данных, и сами данные в соответствующем столбце из 5-ти возможных типов.
>Всего, столбцов 9, и 10000 строк - 90000 ячеек, получается.
Это вариация god-table одного анона из предыдущих тредов, если чо, я тебя помню.
В первые строки подобной таблицы, можно вместить текстом,
имена таблиц, и имена столбцов внутри них, а также типы данных,
а чтобы не дублировать имена и типы в каждой строке этой таблицы - вставить ссылки на них, в виде кодов,
числами - так меньше текста должно быть продублировано.
Но вот поля для разных типов, должны быть отдельные,
потому что данные в них могут иметь разный размер,
например, какой-либо многовесный blob может быть размером в гигабайт.

Всё это - засунуть в пиздатую таблицу, как на наноборде, и выстроить индекс для неё, отдельным файлом,
при этом, первые строки с названиями таблиц, их столбцов и типы - вгрузить в память,
а дальше шастать по всей хуйне уже через логику работы софтины.

Чем уже не самописная и главное - реляционная СУБД?
Быть может, можно заебенить всё это ещё более оптимально,
с минимальным числом строчек кода, чтобы не писать 1005000 строк, хз - это просто набросок.
Аноним 07/05/21 Птн 02:30:18 2022430389
>>2022413
>Но вот поля для разных типов, должны быть отдельные,
>потому что данные в них могут иметь разный размер,
>например, какой-либо многовесный blob может быть размером в гигабайт.
Можно сделать в 5 столбцов, походу:
Код данных, код таблицы, код столбца, код типа, сами данные.
При этом, как-бы, похуй какие данные, вообще, и какого они размера - писать их сырыми, да и всё.

>>Но тут много других проблем возникает,
>>например, что если при обновлении данные увеличились и не влезают в то место, где хранились раньше,
>Тогда, добавляется новая запись в двоичный файл, и обновляются оффсеты в индексном файле, по хэшу-ключу,
>а старые данные - затираются нуллями.
>>или как удалять данные, но так, чтобы не было много неиспользованного пространства и не росла фрагментация.
>Вот эта трабла там >>2022426 не решена. Когда нанопост удаляется навсегда одминчегом этой читалки постов,
>в двоичном файле, данные, просто филлятся нуллями, и индекс обновляется, но хэш сохраняется,
>а оффсеты в индексе обнуляются, и нанопост помечается что он удалён нах.
>Всё в коде есть, и расписано, но это не реляционная СУБД, и даже не БД,
>а просто одна таблица с постами и индекс для быстрой загрузки.
Если в блоб-е гигабайт, и он перезаписывается двух-гигабайтным блобом,
то индекс предыдущего блоба - обнуляется,
и пишется новая запись в большой таблице, уже с двух-гигабайтным блобом, и новым оффсетом в индексе.
Когда пишутся новые данные, они пишутся уже на место старого блоба,
и таким образом, база не растёт.
Но если не филлить нулями старый блоб, в базе будет мусор из байт старого блоба,
а если филлить нулями при каждом обновлении - вся хуйня будет медленно работать, и может убить диск.
Оффсеты мусора, можно отдельно помечать в индексе, чтобы на его место писать новые данные.
Но такая база будет фрагментированной, а как её дефрагментировать - хз.
Аноним 07/05/21 Птн 06:23:33 2022462390
>>2022413
>Колоночная (00) - отпадает, пушо она не реляционная и там нельзя взаимосвязывать таблицы, блядь.
Значит либо пердолить свою СУБД (дабл), либо sqlite (0).

Пожалуй начну костылить и пердолить свою личную СУБД, по даблу.
Не знаю, на сколько хватит энтузиазма, блядь. Вот черновой вариант, описания, пока-что: https://pastebin.com/HjWmbk5Z
Кода, разумеется, пока нет, но теория какая-никакая, уже есть, как-бэ, можете поправить, если чо.


Если из колоночной базы данных можно сделать релюцивонную, наверное и колоночная сошла бы, хз.
Аноним 07/05/21 Птн 10:58:15 2022629391
16195383834260.png 28Кб, 210x146
210x146
>>2022413
Можно потоньше плиз?
Аноним 07/05/21 Птн 16:37:03 2023097392
Аноним 08/05/21 Суб 16:20:36 2024242393
>>1964573 (OP)
Как в SQLite вставить строчку данных с произвольным числом столбцов, всех возможных типов,
данных, типы которые неизвестны,
ведь они могут быть в разном порядке и дублироваться?
Аноним 08/05/21 Суб 16:23:52 2024247394
>>2024242
Никак, это тебе не mongodb. Храни в text или blob, обрабатывай на уровне положения.
Аноним 08/05/21 Суб 16:24:43 2024249395
Аноним 08/05/21 Суб 16:25:45 2024253396
>>2024249
>Надо просто вопросиков напихать
Хуёво выразился. Проясню:
>VALUES (?, ?, ?)
И число этих вопросиков - число столбцов, со значениями.
Аноним 08/05/21 Суб 21:34:30 2024726397
>>1964573 (OP)
Анон, какие ты знаешь ДЕЦЕНТРАЛИЗИРОВАННЫЕ базы данных,
такие, чтобы они не имели центра, который можно разбобить ракетами?
Быть может, есть какие-то зашифрованные базы данных на блокчейнах, или что-то наподобие этого?
Первое что приходит в голову, это тупо сделать ноды для раздачи таблиц, сконвертированных в CSV или JSON, чтобы можно было синхронить данные между нодами, и скачать с любой ноды, просто подключившись к ней.
Но гонять в открытом виде данные и шарить их кому не попадя - так себе затея, ведь данные могут быть и секретными, ну или приватными, конфиденциальными, скажем.
И хотя, ничто и не мешает зашифровать их, но при длительном хранении в общем доступе, даже в зашифрованном виде - растёт риск брутфорса ключа шифрования.
Аноним 09/05/21 Вск 03:40:17 2025104398
Аноним 09/05/21 Вск 06:04:50 2025125399
>>2025104
>NoSQL
А чтобы реляционная?
Аноним 10/05/21 Пнд 11:55:04 2026400400
>>1964573 (OP)
Скачал отсюда: https://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki
Это: sqlite-netFx-source-1.0.113.0.zip (f2f89d1fc36658b1509bfa0ffa7ae31203b8f2a8)
Билдю на windows:
>set fdir=%WINDIR%\Microsoft.NET\Framework
>set msbuild=%fdir%\v4.0.30319\msbuild.exe
>%msbuild% System.Data.SQLite\System.Data.SQLite.Module.2010.csproj
>%msbuild% SQLite.Interop\SQLite.Interop.2010.vcxproj
>pause
На выходе получаю \sqlite-netFx-source-1.0.113.0\bin\2010\Win32\Debug\System.Data.SQLite.dll
которая содержит внутри себя - SQLite.Interop.dll

Как получить этт же файл, но на linux, из-под mono, используя xbuild или msbuild?
Аноним 10/05/21 Пнд 12:20:50 2026419401
>>2026400
Запустил, короче, это:
\sqlite-netFx-source-1.0.113.0\Setup\compile-interop-assembly-release.sh
получил SQLite.Interop.dll.
Переименовал его в System.Data.SQLite.dll и попытался запустить на шинде - не робит.
Открыл его потом блокнотом, и вижу ELF в начале файла,
а внутри System.Data.SQLite.dll, где SQLite.Interop.dll содержится, там MZђ

Как получить MZђ?
Аноним 10/05/21 Пнд 12:25:19 2026422402
>>2026400
На шинде, с этим батником, также работает минимальная сборка кода,
это папки "Keys", "Targets", "SQLite.Interop", и "System.Data.SQLite", плюс этот вот зелёный код в батнике build.bat .
При его запуске, сразу появляются две папки bin и obj,
и внутри многовесного файла на несколько метрабайт -
\sqlite-netFx-source-1.0.113.0\bin\2010\Win32\Debug\System.Data.SQLite.dll
содержится SQLite.Interop.dll тоже.

Но это всё на шинде. А как из под линуксом, с помощью mono, xbuild'ом/msbuild'ом именно эту вот, хуйню получить - хз.
Аноним 10/05/21 Пнд 19:17:34 2026804403
>>2021600
>там есть справка в формате CHM, как его открыть - вообще не ебу, у меня открывается окно, а там такое говно.
Сравнил тот файл с этим:

https://github.com/moneymanagerex/System.Data.SQLite/blob/master/Doc/SQLite.NET.chm

И вижу отличия. В чём - не пойму, просто разные размеры.
Этот файл, вроде открывается, и там куча инфы по ангельски.
Пиздос объебос, буду терь грызть маны эти ебучие.
Аноним 11/05/21 Втр 21:14:24 2027866404
>>1964573 (OP)
Ну всё, теперь вы все будете числиться, у меня - в моей в базе данных.
Аноним 12/05/21 Срд 17:56:53 2028741405
>>1964573 (OP)
Аноны, нужно материалов, чтобы быстро заучить особенности sql и в частности постгреса. Синтаксис и как юзается знаю, а вот конкретные определения, например, форейн ключей, констрэйнтов итд нет. Надо чтоб особо не ебаться с длинными статьями или тем более книгами, подготовиться к собеседованию
Аноним 12/05/21 Срд 18:51:55 2028807406
>>2021600
>Судя по сайту https://system.data.sqlite.org/index.html/doc/trunk/www/index.wiki
>там есть справка в формате CHM, как его открыть - вообще не ебу, у меня открывается окно, а там такое говно.
Закинул этот CHM-файл прямо на диск, в корень - открылось.
Он не открывался, потому что я его забросил в такие ебеня...
>Диск:\папка1\папка2\папка2\...\папка100500\SQLite.NET.CHM
что пути к html-файлам в архиве, уже просто - в память не лезли.

Сравнил с помощью WinMerge
Этот файл: https://system.data.sqlite.org/index.html/doc/trunk/Doc/SQLite.NET.chm?mimetype=application/x-chm
с этим:
https://github.com/moneymanagerex/System.Data.SQLite/blob/master/Doc/SQLite.NET.chm
И такие длинные названия у файлов увидел там, что охуеть просто.
Аноним 12/05/21 Срд 19:31:52 2028847407
image.png 42Кб, 512x318
512x318
>>2028741
Гугл же, не?
Главное ведь - это понять саму суть, и просто запомнить её.

Что там у тебя?
Constraint (констрейнт)...
Смотри сюда: https://www.techonthenet.com/sql_server/unique.php
Видишь строчку:
>CONSTRAINT constraint_name UNIQUE (uc_col1, uc_col2, ... uc_col_n)
Запомни её.
Вкратце, констрейнт - это список полей, которые однозначно идентифицируют каждую запись в таблице,
при этом, если значения других полей констрейнта в записи - уникальны для неё, то значения некоторых полей констрейнта - могут быть NULL,
в отличие от Primary Key (первичного ключа, PK), который содержит уникальные значения, но не NULL,
и как правило значения Primary Key присваиваются автоматически (Autoincrement).
Но существуют таблицы без Primary Key,
например: в таблице |Фамилия|Имя|Отчество|СерияПаспорта|НомерПаспорта|ИНН|
Можно не использовать уникальный номер для каждой записи, а идентифицировать каждую уникальную запись - по уникальным данным,
даже если ИНН или паспорт не указан (тогда, он может быть NULL).

Дальше... Что там у тебя?
FOREIGN KEY (Внешний ключ, FK). Смотри сюда: https://www.w3schools.com/sql/sql_foreignkey.asp
Видишь строчку:
>FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
Запомни её, в частности - ключевое слово REFERENCES для FK.
Вкратце, Foreign Key, нужен для связи таблиц, позволяя формировать этими связями - сложные схемы данных: https://www.google.com/search?q=database+schema&tbm=isch
И главное то, что этим внешним ключем, может быть как одно поле, так и констрейнт (да-да, таблица может иметь много внешних ключей и связей с другими таблицами):
https://metanit.com/sql/mysql/2.5.php

В примере на пикрил, у промежуточной таблицы, реализующей связь "многие-ко-многим" - два Foreign Keys,
это поле "gengreID" - ForeignKey1, и он СВЯЗАН с Primary Key ("ID") - таблицы "gengre" ("жанры"),
и поле "filmID" - ForeignKey2, и он СВЯЗАН с PrimaryKey ("ID") - уже другой таблицы ("films", фильмы).
В то время как первичные ключи - уникальны, значения полей вторичного ключа могут повторяться у разных записей, поэтому он "вторичный",
а следовательно, при связи таблиц формируется связь "один-ко-многим" (одно значение первичного ключа - много значений вторичного),
а через две связи "один-ко-многим" и промежуточную таблицу (эту самую, среднюю), формируется связь "многие-ко-многим".
И действительно, один фильм ("8 первых свиданий") - может иметь много жанров,
но и один жанр ("боевик"), может быть для множества фильмов.
Аноним 12/05/21 Срд 19:37:15 2028852408
>>2028847
Понятие constraint немного шире, это любое условие на данные в таблице, не только уникальность. Foreign key, внезапно, тоже constraint. Вот так вот научитесь по своему гуглу.
Аноним 12/05/21 Срд 19:39:55 2028855409
Аноним 12/05/21 Срд 19:48:56 2028865410
Аноним 15/05/21 Суб 18:09:28 2031511411
image.png 17Кб, 471x307
471x307
1.
SELECT DISTINCT maker
FROM product
WHERE type = 'pc'
EXCEPT
SELECT DISTINCT maker
FROM product
Where type = 'laptop'

2.
SELECT DISTINCT maker
FROM product
WHERE model IN(
SELECT model FROM PC
EXCEPT
SELECT model FROM laptop)

https://sql-ex.ru/learn_exercises.php?LN=8

Подскажите, почему второй вариант не верен? Разве что в таблице PC есть некоторые maker, которых нет в таблице product?
*/ Но это кажется невозможно по схеме бд
Аноним 15/05/21 Суб 18:43:18 2031550412
>>2031511
> есть некоторые maker
model, т.е.
Аноним 16/05/21 Вск 13:07:56 2032218413
>>2031511
Вы заебали со своими ссылками, там регу просит, нужно что-то делайте скриншоты.

Так что неебу что там в задача, но никто не делает EXCEPT ва таких селекатах\подзопросов.

Решаей через джоин с условием, либо через inner.
Аноним 18/05/21 Втр 00:18:59 2034035414
>>1964573 (OP)
Если любую реляционную базу данных,
со всеми её таблицами и взаимосвязями их,
можно представить в виде одной единственной таблицы,
то возможно ли эту таблицу,
хранить обычом одномерном массиве объектов с разными типами,
а пробегать, массив, как-то так:
>for(var cell=0; cell<arr.length; cell+= NumberOfCellsPerLine ){
>    //arr[cell]; arr[cell+1]; ...; arr[cell+(NumberOfCellsPerLine-1)]; //ячейки этой универсальной таблицы.
>}
И чтобы ебались они конём эти проприетарные субд копирастические?
Аноним 18/05/21 Втр 01:05:30 2034055415
>>2034035
Господи, опять ты. Если тебе нужна некрофилия с Windows XP, лучше возьми C++ и компилируй sqlite под него вместо ебли с Mono.
Сделать-то можно, это как N-мерные массивы преобразуются в одномерные. Правда, твоя БД будет ощутимо тормозить уже на 1000 записях, занимаемое место будет быстро увеличиваться, малейший сбой при вводе-выводе приведёт БД в несогласованное состояние, схему придётся контроллировать программно, эффективное удаление и обновление записей будет невозможным, работа с БД будет однопоточной.
Аноним 18/05/21 Втр 05:42:48 2034086416
>>2034035
опять выходишь на связь мудило?
Аноним 18/05/21 Втр 12:06:23 2034294417
А как деплоить постгре? Раньше я использовал орм entity framework, которая сама из модели создавала таблицы, имела миграции. На работе еще не сильно вникал в настройку бд, но там дакпак с мсскл. Но ведь дакпаки есть только под мсскл, как вообще управляют не мссскл базой данных?
Или все тупо пишут самописные скрипты?
Аноним 18/05/21 Втр 13:13:00 2034405418
>>2034294
Смотря какой орм. Питухновский и пхпшный умеют кучу бд. Скорее всего ты не туда смотришь.
Аноним 18/05/21 Втр 14:20:06 2034479419
>>1964573 (OP)
Блин, нихрена не понимаю, в чем смысл кавычек в sql query? Вот например запрос в mysql:
SELECT "id" FROM "chattbale"

Кавычки есть. Но если такой же запрос сделать у меня в postgres то он ругается что "relation does not exist", работает только если их убрать. wtf это такое?
Аноним 18/05/21 Втр 14:39:17 2034506420
>>2034479
Кроме всего прочего, кавычки делают имя регистрозависимым. Имена в БД, как правило, называются капсом, и если в кавычках написать не капсом, имя просто не найдётся.
Аноним 18/05/21 Втр 14:39:43 2034508421
>>2034479
Кавычки делают имена регистрозависимыми.
Аноним 18/05/21 Втр 14:50:03 2034522422
Тоже недавно обосрался, назвал вьюху в оракле маленькими буквами, думал он автоматом перехуярит в капс как с таблицей, в итоге если название этой вьюхи было в запросе без кавычек, запрос падал с ошибкой, пришлось дропать её и переделывать.
Аноним 18/05/21 Втр 15:34:44 2034598423
Поспрашивайте меня по ораклу что-нибудь. Перестал с ним работать и очень скучаю.
Аноним 18/05/21 Втр 15:43:07 2034609424
>>2034598
>>2021573
Это главный вопрос который меня интересует по ораклу в данный момент.
Аноним 18/05/21 Втр 16:12:43 2034660425
>>2034609
Сори, чел, никогда этой темой не интересовался и никогда даже на собесах не спрашивали про этот сертификат, хотя я именно по этому профилю и устраивался раньше. А нахуя тебе?
Аноним 18/05/21 Втр 16:30:43 2034697426
2
Аноним 18/05/21 Втр 17:16:42 2034786427
Аноним 19/05/21 Срд 01:55:18 2035272428
>>2034660
Так и сказали на работе, получишь сертификат - компенсируем стоимость и добавим зп.
душный Sharepoint 19/05/21 Срд 11:04:46 2035395429
Аноны подскажите плз, кто то сталкивался с такой еботней как SharePoint? темка такая, на нем построена система бухгалтерии, и самому бухгалтеру не приходит уведомление что заказжик залил какой то документ на сервер( я честно сказать вообще не вдупляю что происходит, но устроился на работу с умным ебалом сказал что я технического типа человек и вот дали такое задание). Как альтернативу вообще может накидаете мне литературы для изучения этой файлообменной системы. Вообще с чего начинать что бы понять как устранить проблему.(Еще существует вариант что этот бухгалтер как то отключил уведомления банально сам этого не понял, но я пока что ебал туда идти и спрашивать у этих бдушных бабок). КАРОЧЕ АНОН СПАСАЙ
Аноним 19/05/21 Срд 13:54:48 2035516430
>>2035395
А почему в этом треде, чел? Спроси в треде по C# или в общих.
Аноним 19/05/21 Срд 14:48:24 2035556431
>>1980756
Попробуй DBeaver. Вроде под линукс есть версия

мимо тестер
Аноним 19/05/21 Срд 18:05:30 2035711432
Аноним 20/05/21 Чтв 12:08:33 2036379433
image.png 1630Кб, 900x900
900x900
Кто-то знает как хэшировать пароли в Access? Типа в форме вводим пароль, а он вносит в базу хэш.

И потом как-то замутить авторизацию и сравнивать введенные в форму данные с тем, что есть в самой бд?
Аноним 20/05/21 Чтв 12:37:25 2036413434
>>2036379
В БД нет хешировпния и авторизаций, она просто хранит данные, которые ты пришлёшь из приложения, прислать ты должен уже хешированный пароль. Читай про функцих bcrypt, в зависимости от языка реализации могут быть разные, но суть в том, что она вычимлит хеш пароля, пришежшего из формы, хеш ты сохраняешь в БД, а затем, когда пользователь вводит пароль при входе, получаешь хеш из БД и с помощью специальной функции для сравнения сравниваешь значение в БД и переданное пользователем.
Аноним 20/05/21 Чтв 14:10:51 2036542435
>>2036413
Вобще-то есть. У меня в MSSQL хранится хэш, делал не я, но я уверен что делалось на стороне бд.
Аноним 20/05/21 Чтв 21:58:45 2037042436
>>2036379
Там вроде все делается через бейсик
Аноним 23/05/21 Вск 20:25:08 2040144437
Чет никак не пойму. Надо сохранить сущность, если в базе нет сущности с таким id, либо если сущность есть и выполняется какое-то условие. Как это все в один запрос впихнуть?
Аноним 23/05/21 Вск 20:48:19 2040163438
Аноним 23/05/21 Вск 20:56:57 2040178439
>>2040144
Зависит от СУБД, гугли upsert.
Аноним 23/05/21 Вск 21:26:35 2040199440
>>2040178
Upsert обычно делается если просто под условие ничего не подходит, это не то.
Аноним 23/05/21 Вск 23:23:22 2040311441
>>2040178
>Зависит от СУБД
Mongodb не бейте, лучше обоссыте
Аноним 23/05/21 Вск 23:43:57 2040328442
>>2040311
Нахуя тебе это говно мамонта?
db.huitas.update({query}, {update}, { upsert: true })
23/05/21 Вск 23:50:12 2040339443
>>2040328
Сука, ты ебаный тупорылый даун, который не в состоянии читать простые предложения и извлекать из них смысл, во всех тредах что ли сидит? Пошел нахуй блядь, долбоеб.
Аноним 24/05/21 Пнд 00:08:09 2040354444
.jpg 50Кб, 600x600
600x600
Аноним 24/05/21 Пнд 08:54:02 2040494445
>>2040354
произошёл подрыв, сделайте ему срочно insert огнетушителя
чот проиграл с шизика
Аноним 24/05/21 Пнд 11:49:58 2040773446
>>1964573 (OP)
Куда перебазировать базу данных наших базовых предприятий, составляющих производственную базу на военно-морской базе?
Аноним 24/05/21 Пнд 12:00:54 2040789447
Аноним 24/05/21 Пнд 12:40:26 2040846448
Попытался прикрутить in-memory базу sqlite для юнит-тестов, а он почему-то ни один UPDATE не выполняет. Те же запросы в постгресе отрабатывают. ЧЯДНТ?
Аноним 24/05/21 Пнд 13:27:51 2040948449
Аноним 24/05/21 Пнд 13:28:36 2040949450
>>2040773
на базовую станицию на базовой полярной базе
Аноним 24/05/21 Пнд 13:32:38 2040959451
>>2040948
Как я буду тестить скл-запросы редисом?
Аноним 24/05/21 Пнд 14:07:38 2041035452
>>2040846
Может помимо подключения к базе (connection) , надо её ещё и открыть (connection open)?
Аноним 24/05/21 Пнд 14:55:23 2041112453
>>2040948
In-memory там не самоцель, а для эмуляции в юнит-тестах обычной реляционной СУБД, чтобы подменить ораклы-постгресы
>>2040846
Возможно, у тебя условия where тупо вычисляются в false.
Аноним 24/05/21 Пнд 14:57:12 2041116454
>>2041035
Create table/select/insert работают.
>>2041112
Точно такой же запрос пробую в sqlitebrowser - работает. В постгресе тоже.
Аноним 25/05/21 Втр 01:55:03 2041968455
>>1964573 (OP)
Работаю с Elastic, закачал репозитарий с докером, который ставит Эластик, вроде все работает как надо, создаю индекс, данные сохраняются и находятся
Но как только я останавливаю докер-контейнер и перезапускаю всё, данные обнуляются - созданного индекса больше нет и надо все делать по-новой. wtf?
Аноним 25/05/21 Втр 04:23:18 2041996456
>>2041968
у тебя данные все в контейнере, как только ты его останавливаешь все в пиздень схлопывается, и нихуя не остаётся, Тебе надо указать директорию для хранения файлов данных, т.е. всего того что должно остаться после закрытия контейнера. Покури доку, там опция котороя при запуске докера передаётся в контйенер, что-то типа храни данные бд в такой то папке за пределами контейнера.
Аноним 25/05/21 Втр 04:24:36 2041997457
>>2041116
Синтаксис лайта слегка отличается от T-SQL тогоже, RTFM
Аноним 25/05/21 Втр 12:05:44 2042263458
Аноним 25/05/21 Втр 13:54:29 2042364459
Как понять, что нужно нормализовывать, а что нет? Или вообще всё нужно?
Ну вот например мне нужно хранить не просто количество товаров в наличии, а количество товаров на каждую дату. Если это услуга какая-то мб. Я думал просто сделать таблицу, где будут дата, ид товара и количество. И складывать в неё все товары на все даты. Или нужно сделать ид даты, ид товара, количество? Просто как бы дата сама по себе уже как ид. Ну типа у меня не будет задачи изменить какую-то дату у всех товаров.
Аноним 25/05/21 Втр 14:21:08 2042391460
>>2042364
id количества еще можешь сделать, вдруг каких-то товаров будет одинаковое количество
Аноним 25/05/21 Втр 14:24:58 2042395461
>>2042391
А чем ид количества отличается от самого количества?
Аноним 25/05/21 Втр 14:50:05 2042414462
Сап, датабейсеры.
Есть задача - с как можно меньшим количеством усилий написать интерфейс для субд на mysql. Нужно разделение прав доступа(администратор/клиент) и отчетность по типу количество продаж того или иного товара из базы данных за месяц.
На чем это можно сделать эффективнее всего?
Изначально думал на питоне написать, но быстро там не получится.
Смотрел в сторону apex, но толковой инфы по нему в интернетах найти не смог.
Аноним 25/05/21 Втр 14:51:48 2042417463
>>2042364
>>2042395
У тебя будет таблица с датой, количеством и ID товара?
Аноним 25/05/21 Втр 14:58:05 2042427464
Аноны, есть ли способ заполнить таблицу одним и тем же значением (единицей или нулем) без перечисления этого значения в values? У меня в таблице 70 столбцов, и это проблема

очевидно я новичок, нагуглить не смог
Аноним 25/05/21 Втр 15:07:04 2042434465
>>2042427
У тебя столбцы уже есть и ты хочешь одно поле проставить определённым значением во всех строках?
update jepa set govno=100
чем не подходит?
Аноним 25/05/21 Втр 15:18:26 2042447466
Аноним 25/05/21 Втр 15:22:03 2042453467
>>2042434
У меня 70 столбцов, которым надо присвоить значение 1. По умолчанию у меня они 0, и это мне тоже нужно. Выходит что-то типа:
govno1 = 1, govno2 = 1, govno3 = 1 ... govno70 = 1
Еще могу сделать:
INSERT INTO JEPA
VALUES
(1, 1, 1, 1 ... (64 раза) 1)

Другого варианта нет, получается? Нельзя как-то взять диапазон столбцов или что-то такое и заполнить его нулями без этой писанины?
Аноним 25/05/21 Втр 15:22:35 2042455468
>>2042453
*заполнить единицами
Аноним 25/05/21 Втр 16:11:16 2042537469
Аноним 25/05/21 Втр 16:51:44 2042618470
Аноним 25/05/21 Втр 17:03:35 2042637471
>>2042618
Судя по тому что ты это согласовываешь с анонами, а не с маняархитектором, это твоя личная поделка, так что можешь идентификатор записи не ставить. Условие уникальности по товару и дате ебани и охуенно будет.
Аноним 25/05/21 Втр 17:16:29 2042659472
Аноны, помогите вэб-макаке кое что понять.
Мне нужно помененять в базе данных даты со сдвигом по времени назад на 5 минут. Я использую такую команду:
... date = date - INTERVAL 5 minute
проблема в том что значение интревала - не статичные 5 минут, со сдвигом в 5 минут.
Тоесть первая запись приема с 08:00 до 08:20, вторая 08:20 до 08:40, потом третья 08:40 до 9.00 и так до 12 часов. Тоесть сдвиг в 5 минту.
Мне нужно уже существующие записи перекроить на 15 минутный интервал.
первый с 08:00 до 08:15,
второй с 08:15 ( тут минус 5 минут относительно прошлого значнеия 08:20 ) до 08.30 ,
третий с 08.30 ( а тут уже минус 10 минут относительно прошлого значения в ) до 08.45,
и т.д.
тоесть шаг изменения времени растет , и просто у каждой даты отнять 5 минут - не вариант
В принципе в рамках чистого sql можно ткое реализовать? Нужно что то типа переменной меняющейся после обновления каждой строки.
Аноним 25/05/21 Втр 17:23:20 2042666473
Проходим в вузе «биг дату» вот уже два месяца. На позапрошлой неделе нам объясняли кафку, а на этой ELK stack, но я вот нихуя не понял, что мы делаем и зачем. Можете посоветовать что-нибудь по теме вводное, где объясняют общую методологию всего этого без привязки к какому-нибудь конкретному решению? А то гуглил книжки по биг дате, почти про каждую пишут, что там «вода».
Аноним 25/05/21 Втр 18:23:53 2042767474
>>2042637
Идентификатор какой записи?
Аноним 25/05/21 Втр 18:30:56 2042776475
>>2042767
В таблице которую ты создаёшь с датой количеством и товаром.
Аноним 25/05/21 Втр 18:49:33 2042815476
>>2042659
Правильно ли я понимаю, что вместо 3 интервалов у тебя должно появиться 4?
Если это просто таблица с интервалами времени, то дропни все нахуй и создай заново. А если у тебя есть какие-то данные, привязанные к этому интервалу времени, то откуда же ты высрешь данные для новых интервалов? И данные для старых интервалов станут некорректны.
Аноним 25/05/21 Втр 18:55:09 2042823477
>>2042776
А, не знал про такое, лел. Собственно я думал, что ид этой записи - это и есть как бы ссылка на уникальную комбинацию даты и количества. Я прост Джанго орм юзаю ещё.
Аноним 25/05/21 Втр 19:24:07 2042856478
>>2040144
сам разобрался дауничи
Аноним 25/05/21 Втр 21:33:43 2043024479
image.png 9Кб, 312x198
312x198
Что означает вот такое описание типа из Elasticsearch?
Вроде как обычный text, но что дает вот эта приписка с fields?
Аноним 25/05/21 Втр 22:31:37 2043086480
>>2042815
Да, правильно, но это не страшно, так как конечное общее время сдвигается с 12 до 11 часов.
Аноним 25/05/21 Втр 22:33:03 2043090481
>>2043086
п.с.
не суть важна прикладная сторона, нужно именно передвинуть.
Вообще диапазон всего этого движняка - месяц, а значит еще и каждый новый день должен начинаться с сдвига в 5.
Чето мне думется без скрипта на ЯП это не решить.
Аноним 26/05/21 Срд 02:11:15 2043279482
>>2042414
Эффективней на веб приколхозить. Бахаешь веб приложение и всё. Говорят у лоровеля(пхп) очень удобный орм для sql.

>>2042427
SELECT INTO, сам селект можешь сгенерировать через какой-нибудь джоин на самого себя(cross apply\crossjoin)

>>2042659
Если уже существующие, тогда берешь таблицу календаря, с твоими временными промежутками и джоинишь к таблице фактов. Календарь генерируешь сам либо берешь готовый.
>>2042666
Без привязки к решениям, это дым из пизды. Попробуй покурить книжку с кабанчиком из ОП поста.
>>2042364
Нормализуются всякие справочники, в твоём случае ID товара. У тебя будет 2 таблицы, с фактами продаж и справочник товаров.
Аноним 26/05/21 Срд 07:14:07 2043305483
>>2043279
>Попробуй покурить книжку с кабанчиком из ОП поста.
Большое спасибо, почитаю.
Аноним 26/05/21 Срд 12:17:49 2043491484
Ребята, хз где спрашивать, мож найдутся знатоки. База сцилла.
почему при отключении нескольких нод 2 в локальном, 1 в удаленном, вначале все пашет как пахало по результаттам, но потом ноды не принимают на себя всю нагрузку и работают как будто в полсилы и сла не соблюдается, хотя ресурсы есть.
Состав кластера 5+5 вм, два дц.
После рестарта приложения и репейра нод сла по записи не достигается до того момента, когда все работало без укладывания нод.
Аноним 26/05/21 Срд 12:23:14 2043498485
>>2043491
Да, приложение, которое в базу пишет - черный ящик, так что рассматриваем только общие моменты.
Аноним 26/05/21 Срд 23:16:24 2044396486
Как в Elastic быть с поиском во вложенных (nested) полях?

Например есть поле типо этого:
'rates': {
type': 'nested',
'properties': {
'rateid': {
'type': 'long'
},
'txt': {
'type': 'text'
}
}

Надо найти фразу внутри rates.txt, как это намутить?
Аноним 27/05/21 Чтв 18:07:30 2045362487
>>2044396
Самой query должно быть nested
Аноним 30/05/21 Вск 11:56:03 2048916488
Нужен совет, можно ли вообще нормально решить такую проблему.

Изначальные условия:
Есть объявления. Пользователи могут добавлять объявления себе в закладки или в скрытые (отдельная табличка user_id, объявление_id, категория_id). Все хорошо.

Задача:
На объявлениях у нас появляется некоторый признак, по которому мы можем сказать, что это дубли.
А дубли мы хотим визуально (именно визуально) схлопывать, когда выводим список.

Проблема А:
Мы не можем схлопывать на фронте, так как начинаются проблемы с пагинацией.
И еще нам надо чтобы это работало очень быстро, поэтому нельзя делать трехэтажный запрос с группировкой.
Тут мне кажется можно попытаться решить добавив специальную группирующую сущность или фейковую запись в саму таблицу объявлений, которая будет родительской. И соответственно в выборке будут участвовать родители ИЛИ объявления без родительской сущности. Звучит кривовато, но можно попробовать.

Проблема Б:
Нужно при этом еще уметь отфильтровывать по пользовательской категории (закладка, скрыто).
То есть получается, что когда мы видим группирующую запись, надо еще знать входит ли какое-то из объявлений под ней в категорию для конкретного пользователя.
Опять же, если делать через гурппировку, то запрос становится тяжелым.
И вот тут у меня уже нет идей, что можно сделать.

Короче, подскажите, может есть какой-то рецепт для таких задач? Или может быть можно выбрать другой интрумент (не реляционку), в котором это хорошо решается?
Аноним 30/05/21 Вск 13:02:45 2049007489
Аноним 30/05/21 Вск 13:06:36 2049017490
>>2049007
Тигр?
Мультипаспорт?
Аноним 30/05/21 Вск 13:10:17 2049028491
>>2049017
Делаешь ров намбер убывающий, потом фильтруешь всё что больше 1. А ещё есть всякие Drill на фронте.
Аноним 30/05/21 Вск 13:20:44 2049049492
>>2049028
Блин, ты настолько не понимаешь проблему, что мне даже обидно, как-будто нахамили сейчас. Как-будто я это в пустоту писал.

Причем здесь оконные функции вообще? Нам нужен список
- A
- B
- [C, D, E]
- F
<[1][2]...[10] >

Где С подпадает под закладки пользователя, а D и E просто связаны.
Аноним 30/05/21 Вск 13:48:58 2049083493
>>2049049
Да, я не понимаю. в чём проблема.

У тебя список
а
а
b
c
d

Ты хочешь чтобы у тебя ВИЗУАЛЬНО схлоповались дубли, признак схлорывание в роу намбер. Схлопываешь через Drill up\Drill down. Я не вижу тут проблемы.
Аноним 30/05/21 Вск 18:46:32 2049586494
Аноним 30/05/21 Вск 19:01:42 2049602495
Аноним 30/05/21 Вск 20:28:54 2049774496
Аноним 31/05/21 Пнд 07:59:08 2050152497
Untitled1.png 49Кб, 972x622
972x622
Аноны, помогите. Хочу сделать базу по витаминкам, нужно посчитать уровень веществ по разным препаратам. Получились такие таблицы:

pills: (таблетки)
id INT
name TEXT

agents: (вещества)
id INT
name TEXT
description TEXT
pros TEXT
contras TEXT

pills_agents: (связываем множество таблеток со множеством веществ)
pill_id INT
agent_id INT

Проблема в том, что у действующего вещества есть куча синонимов, к примеру: Биотин, Biotin, B7, Vitamin B7, Vitamin H, Coenzyme R, Biopeiderm - это все одно вещество. Ну и еще пачка на русском, латыни и в сокращениях, чтобы я мог корректно распарсить базу таблеток

Напрашиваются таблички:
agents_synonyms:
id INT
alternate_name TEXT

agents_synonyms_join:
agent_id (int)
synonym_id (int)

Насколько это корректно, городить такой огород? База в принципе не важна, я планирую делать на sqlite, но из астрала мне подсказывают, что я насосусь хуйцов и пока не поздно, надо взять что-то модное и молодежное, куда можно срать сразу json / arrays.

Еще момент: по большому счету мне надо просто забить базу, а потом из своих скриптов это мучать. Похуй в каком виде. Для забивания хотел сделать морду, чтобы начинал писать "Biope", а оно выкидывало подсказку-автозаполнение "Vitamin B7 (Biopeiderm)", а то я наделаю сам кучу ошибок. Можно конечно всю логику самому завелосипедить, но:
1. Наверняка есть какой-то паттерн на этот случай
2. Может быть даже есть готовый тул, чтобы свой пхпадмин не писать
3. Если же писать все равно самому, то как логически подружить поле "вещество" с по сути отдельной структурой "синонимы"? Т.е. я должен ввести именно "вещество", но при этом осуществлять поиск в том числе по "синонимы вещества". У меня это в голове плохо укладывается
Аноним 31/05/21 Пнд 08:37:24 2050160498
>>2050152
Для синонимов достаточно одной таблички.
id, parent_id, alt_name
Аноним 31/05/21 Пнд 09:51:57 2050201499
>>2050160
Спасибо, ты прав. Непонятно о чем я думал.

А с поиском, я так понимаю, надо делать отдельную сущность "индексатор", и при индексации таблички "вещества" надо как-то в нее включать и ссылающуюся на нее табличку "синонимы". Ну и уже рисовать виджет для поля "вещества", а индексатор должен будет искать везде. Есть что-то, что можно почитать на эту тему? А то я явно изобретаю что-то готовое.
Аноним 31/05/21 Пнд 12:35:57 2050365500
>>2050201
Совсем никто готовые тулзы для наполнения баз не юзает? Смотрю на всякие https://www.adminer.org/ и не пойму, подойдет оно или нет
Аноним 01/06/21 Втр 02:32:03 2051501501
>>2050365
Нахуя? Для этого есть ORM
Аноним 01/06/21 Втр 06:51:50 2051529502
>>2051501
ORM - это самому говно говнокодить нада, а мне лень. Мне надо тупо забить базу, а потом уже скриптами ебсти.

Но похоже, даже если оно и существует (как мс аксес?), то пока разберешься, проще набыдлокодить своё.
Аноним 01/06/21 Втр 20:15:04 2052404503
cda7ed356f7a4a0[...].png 13Кб, 860x458
860x458
Подскажите, можно ли как-то при группировке выбирать любое значение в постгресе?
Типа
SELECT some(title) -- похуй какой, любой существующий сойдет
FROM projects
GROUP BY department_id

Понятно, что можно взять min/max. Но зачем лишняя сортировка, если похуй.
Аноним 01/06/21 Втр 20:20:08 2052409504
Настройки X
Ответить в тред X
15000
Макс объем: 40Mб, макс кол-во файлов: 4
Кликни/брось файл/ctrl-v
Стикеры X
Избранное / Топ тредов