Новый баз данных тред, теперь с альфа-версией шапки.
Здесь мы: - Негодуем, почему шапка - говно, и предлагаем коллективному ОПу идеи, как её улучшить. - Разбираемся, почему PostgreSQL - не Oracle - Пытаемся понять, зачем нужен Тырпрайс, если есть бесплатный опенсурс - Обсуждаем, какие новые тенденции хранения данных появляются в современном цифровом обеществе - Решаем всем тредом лабы для заплутавших студентов и задачки с sql-ex для тех, у кого завтра ПЕРВОЕ собеседование - Анализируем, как работает поиск вконтакте - И просто хорошо проводим время, обсирая чужой код, не раскрывая, как писать правильно
Литература: - Прибыл Фейерштейн. Oracle PL/SQL. Для профессионалов - если уметь исказть, можно найти бесплатно без СМС и на русском. - Алан Бьюли. Изучаем SQL. - про MySQL, тоже легко находится. Довольно старая, но базовые вещи не сильно меняются. - К. Дж. Дейт. Введение в системы баз данных - талмуд на овер 1000 страниц. - Томас Кайт. Oracle для профессионалов - тоже талмуд.
Q: Что лучше, SQL или NoSQL? A: Как обычно, зависит от задач. Нужна любой ценой скорость - бери NoSQL, нужна согласованность данных - SQL. У всего свои плюсы и минусы, и в обозримом будущем ни один подход не заменит другой полностью.
Q: Вопросы с лабами и задачками A: Смело спрашивай, с вероятностью больше 50% ответят, но могут и обоссать. на Дваче все твои друзья
Сап, аноны. Посоветуйте что-нибудь по изучению PL/SQL, желательно от простого к сложному, начиная с уровня "полный даун". В любом виде - литература, видеоуроки, циклы статей. Попробовал начать с Прибыла, но там какой-то невнятный смазанный старт: то какая-то бесполезная хуита, то сразу такой уровень материала, что уже теряешься. Сложилось впечатление что он не совсем для новичков.
Мужики, уже две недели ебусь с написанием своей недобд. Палю годноту, если кто-то тоже хочет начать писать\разбираться в архитектуре бд: 1. https://cstack.github.io/db_tutorial/ -- имхо маст рид (и маст код), челик объясняет с кодом как написать свой неполноценный клон sqllite, единственная проблема - серия статей слишком быстро заканчивается (собсна, дальше btree с фиксированной схемой автор не пошел) 2. DATABASE SYSTEMS The Complete Book -- охуенный справочник для теории любой глубины и на любую тему. Судя по тому, что пишут на реддите, так же является лучшим учебником по теме, но я не могу представить как это можно осилить блять. 3. Database Design and Implementation -- по сути очень схоже с первым линком, только пишется кастомная база и практически полноценная. Единственный минус (и критичный для меня) - используется жава и jdbc.
Если кто еще натыкался на схожий материал -- тоже поделитесь.
Решил я тут подтянуть Postgresql, начал заниматься по книге PostgreSQL. Основы языка SQL by Евгений Моргунов. И вроде все норм шло, но тут проблемы возникли когда началась робота с готовой базой данных по книге. Так вот работаю на винде 10. Прописываю команды psql -f demo-small.sql -U postgres psql -d demo -U postgres База сама по себе работает, запросы обрабатывает. Но не могу менять некоторые таблицы, выдает ошибку, что Name не является таблицей. Хотя через команду \d Name можно глянуть поля и через селект инфу. И после закрытия базы данных и перегрузки пк все изменения проделанные с базой не сохраняются.
>>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 таблицу. Если просто закрыть консоль проблем нет, если перегрузить комп и заново прописать команды, то прогресс пропадет. Я
>>1965568 Погуглил и понял в чем проблема у тебя. Короче, я не знаю почему, но у Моргунова неправильно описано как пользоваться демонстрационной бд. Я хз почему. Пиши вот эти команды.
>>1965577 Это я так понял команды линукса. 1 для установки? 2 качает базу данных? 3 розархивовывает ее? У него команды для винды в книги, они работают. В саму базу данных загружает и можно юзать ее. Но хз как будто она битая или хз. Если я поставлю сигвин или баш на винду они будут работать? Хотя я и так скачал ее и запускаю подобными командами.
На винде psql -f demo-small.sql -U postgres этой загружает базу psql -d demo -U postgres этой логиниться в базу.
В чём суть этого ограничения? Зачем нужно выделять создание функции в отдельный файл (сообщение с намёком на это появляется, если исправить выделенную ошибку), а не создать её вместе с таблицами? Хуйня же какая-то нелогичная. Или я что-то не так делаю?
>>1965587 >этой загружает базу Судя по всему оно не загружает базу, а просто использует то что находит внутри sql-скрипта, и может загружает базу во внутренний кэш или сорт оф, потому ты и не можешь ничего изменять в ней.
Помогите аноны, не уверен стоит ли создавать отдельный тред для этого. Начал неспешно вкатываться в бд, но не до конца понимаю что и как. Задача примерно следующая - создать нечто, куда можно будет вводить ассортимент пришедших ноутов, просматривать весь ассортимент и возможность распечатать гарантию. Что мне нужно для достижения этого?
>>1965838 То есть тебе нужен интерфейс пользователя. Можешь сделать в виде простенького сайта, для этого нужно знать html/css (можно обойтись без JS) и какой-нибудь язык для бекенда с веб-фреймворком для него. Ну или в зависимости от требований в виде десктопной программы, там либо C++/Qt, либо C#, либо JS/Electron. И уже оттуда вызывай SQL-запросы.
>>1964573 (OP) Решил угореть по хардкору и вкатится в суперБД Access. Посоветуйте годной литературы, чтобы я стал офисным Б-гом данных? Уже приобрел и поставил на полку "Системы баз данных. Полный курс", но чот приуныл от толщины мануала и поставил его пока на полку.
>>1965905 Спасибо. Подскажи, за пару недель изучения можно написать программу, чтобы она работала и что стоит выбрать из предложенного тобой? Или же тут дело вкуса?
>>1966130 В том-то и дело, что я сейчас буквально пальцем в небо тыкаю. С html/css немного знаком, а с остальным - нет. Хотел бы попробовать десктопную программу оформить, но во времени я ограничен немного. Если есть шанс начать учить язык и на нем уже написать программу, то я бы выбрал язык.
>>1966143 Ну просто ты с нестандартной позиции танцуешь. Есть абстрактная цель - тебе надо ее решить. Обычно либо конкретная цель, либо конкретный инструмент. Просто в базу потыкать можно и без ЯП. Если тебе надо десктоп - копай в сторону плюсов. Если веб без задротства - жс или пых. Если прям сервер написать хочешь - шарп и джава. В общем choose you fighter. Нужно сначала понять чем заниматься хочешь.
Поясните за postgresql, ставлю его, а как пароль то ввести? В установщике его нигде не запрашивают. После выбора места только 2 кадра и дальше установка. Что делать то с этим?
Сап, аноны. Есть вопрос: существует что-то между sql базами и nosql базами, поясню: чтобы можно было задать статичную схему с типами данных (для оптимального хранения) и иметь возможность горизонтально масштабироваться как с nosql базами. Меня просто немного пугает оверхед от использования json и такого неструктурированного хранения данных.
>>1970386 Как по мне, достаточно просто почитать про то как оно устроено в существующих СУБД. Писать своё очень долго. Ну разве что какое-нибудь keyvalue можно асилить. Там просто нет серебряной пули для всего, джойны будут тормозить, дедлоки будут случаться, транзакции будут не до конца честными, репликация будет упираться в CAP/PACELC-теоремы.
>>1970383 >>1970398 Я писал в предыдущем треде, что у меня скоро будет очень базоориентированный проект (мб придется что-то существующее патчить для лучшего перфоманса), а про бд я знаю примерно нихуя. Ну и соответственно, если ты хочешь в чем-то разобраться -- лучше всего это написать. Оно офк не будет каким-то продакшн реди, но как альтернатива какому-нибудь BusTub от CMU -- самое то. Ну и плюс мне сейчас нехуй делать, а базы данных - одно из самых слабых моих сторон, будет полезно подкачать
>>1970804 Для начала нужно понять какие задачи твоя БД решает. Хранятся ли данные на диске или только в памяти? Если на диске, то можно ли рассчитывать что COMMIT спасает не просто от креша/остановки приложения, а от выключения света? Есть ли мультиклиентность? По какому принципу хранятся данные: реляционные кортежи, вертикальные столбцы, таймсериес, документы как в монге, графы, простой keyvalue? Под какие паттерны использования будешь затачивать? Что важнее, консистентность или скорость?
>>1973479 sqlite это просто либа. Также официально поставляеться соснольный клиент. А так никто не мешает кому угодно написать сторонний клиент, хоть веб, хоть невеб. Но он там и нахуй не нужон.
Аноны, помогите ради аллаха. Есть пикрил структура таблиц. Мне нужно получить все email'ы пользователей и номера из таблицы "значения полей", чтобы эти данные выводились в одну строку, типа [почта | номер]. Каждое значение поля хранится отдельной записью. Например, есть элемент, его значения полей выглядят так: element_id, field_id, value. В значениях полей есть номер и ид пользователя. Мне нужно как-то найти элементы, понять к какому пользователю они относятся, взять email этого пользователя и номер из полей элемента. Наверное, делается это через джоины, но я в этом не силён.
Почему не юзают СУБД на основе Prolog? Пролог-программу можно рассматривать как реляционную базу данных, т.е. описание некоторого множества отношений. Описание отношений присутствует либо в явном виде (факты), либо в неявном виде (правила). Встроенные предикаты дают возможность корректировать эту базу данных (БД) в процессе выполнения программы. Это делается: 1) добавлением к программе (в процессе вычислений) новых фактов; 2) вычеркиванием из нее уже существующих фактов.
>>1973579 > Почему не юзают СУБД на основе Prolog? Потому что никаких реальных преимуществ по сравнению с реляционными БД в этом нет, а если и есть, то только для решения узких задач. Учёт в виде таблиц появился задолго до появления реляционных БД, и на практике его достаточно почти всегда. > Пролог-программу можно рассматривать как реляционную базу данных, т.е. описание некоторого множества отношений В реляционных БД под реляционностью понимают именно таблицы, а не какие-то абстрактные взаимосвязи. Так-то "отношения" описывает любые произвольные структуры данных, но есть устоявшаяся терминология. > либо в неявном виде (правила) Мир уже пришёл к тому, что хранить бизнес-логику в БД - плохая идея. Есть "базы знаний", где хранятся факты и правила вывода, но это в конечном итоге надстройки над обычными БД.
Спросил в треде пхп-шников, но это, наверное, не к ним.
Можно ли писать команды так, чтобы они одинаково подходили и к MySQL и к PostgreSQL? Или синтаксис совсем несовместим? Вот живой пример: MySQL ROUND((price / $coefficient),2) AS price
PostgreSQL ROUND((price::numeric / $coefficient),2) AS price Если у постргеса не указать, что округляемое - нумерик, то будет ругаться и вернёт ошибку. А в майскул такую конструкцию не завезли, он просто округляет. Это можно подружить как-то?
Просто, везде говорят, мол, у нас тут круто всё, можно в конфиге фреймворка поменять используемую базу и всё будет норм. А когда меняешь - оказывается, что нихренашеньки.
>>1974398 Разные SQL-ы отличаются настолько, что никакими конфигами к одному виду не привести, и либо не пишешь запросы сам и генерируешь через ORM, либо никак.
>>1974398 Если использовать поменьше функций может и ничего не придется менять, зависит от сложности запроса. Вместо округления например можно кастить в интеджер или использовать свой костыль
>>1974410 >>1974416 >>1974442 У меня сейчас сайт на ларавеле. Есть таблица продуктов, для которых в отдельном поле указана цена в евро. Пользователь сайта устанавливает сам, в какой валюте ему нужно показывать. Сейчас в контроллере прописана команда запроса к модели с MySQL синтаксисом команды. Как это засунуть в саму модель, не знаю. А просто запрашивать модель и потом в контроллере пересчитывать нельзя, потому что по MVC логике нужно усраться, но передвинуть перевод цен в модель.
В принципе, можно, допустим, брать цифру, делить на коэффициент, тут же умножать на 100 и округля... опять приходим к тому, что округление и преобразование типов оформлено по-разному.
>>1974564 ХЗ гугль говорит что round() можно использовать и без второго аргумента, да и cast() должен быть одинаковым. Плюс ты можешь не использовать стандартные функции округление, а написать своё через if например.
>>1974564 > MVC Пчел, если ты в контроллере ебашишь SQL запросы то твоему MVC уже пiзда. В построеном по MVC приложении слой моделей самый жирный (если конечно у тебя там нет какого-то кромешного пиздеца в разметке фронта). Если ты хочешь обойтись базой данных заместо модели, то тогда тебе нужно переносить бизнес логику в базу данных. Тоесть ебашить процедуры/сабрутины. Из контроллера ты вызываешь процедуру которая возвращает цену. А уже в каждой базе своя процедура.
>>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;
Сап БДач! Пожалуйста, подскажи тупню как решить вот такое?
Есть БД из 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 вроде не засунешь. Да и группировка по магазинам это не то.
>>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 Неясно только, как реализовать >(если таких несколько, то отсортировать по имени центра в алфавитном порядке) БДач, подскажи.
>>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
>>1975331 >БДач, подскажи. Понял, что спросил хуйню. Спрошу корректней: Нужно объединить наименования центров имеющих одинаковый максимум mark.name в одну ячейку отсортированным перечислением.
>>1974982 Все сложно сказать потому что это же не какие-то стандарты, а так придумали хуйню. В твоем случае все еще и хуже, потому что у тебя очевидный конфликт апи двух субд, поэтому все выглядит донельзя тупо. Но задача форматировать данные под бизнес требования (что похоже на твои проблемы) бывает. К примеру у меня был шиз заказчик который хотел чтобы часть цен товаров выводилась с указанием центов, а часть просто целым числом. И при этом чтобы можно было менять вид отображения для каждого товара. В соответсвии с MVC это должна делать модель. Она вытаскивает из бд сырые данные. Преобразует их в соотвествии с требованиями контроллера или бизнес-логики. И отдает их контроллеру. У тебя в общем все ок. Контроллер вызывает метод репозитория, который уже является слоем модели. И там гдет-то у тебя должна формироваться цена. Возможно это действительно какая-то сабрутина под конкретную субд, возможно это метод екземпляра конкретного класса который возвращает нужным образом округленную цену (это ORM подход).
Аноны, приведите пример, когда в 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 и обратно?
Типа WHERE ( Nodes.Caption IN ('%pbx%', '%voip%', '%sbc%') ) Вместо WHERE ( Nodes.Caption like '%pbx%' OR Nodes.Caption like '%voip%' OR Nodes.Caption like '%sbc%' )
>>1976163 Регулярные выражения, есть во всех приличных БД, синтаксис зависит от конкретной. Oracle: where regexp_like(Nodes.Caption,('pbx|voip|sbc') Как человек с колоссальным опытом в БД, могу сказать, что вся эта хуета как правило работает медленнее, чем стандартные операторы типа like, поэтому решай задачу через like, если она решается через like. Не нужно заниматься украшательствами ради украшательств, не нужно бездумно пользоваться фичами только потому что знаешь, что они существуют.
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
>>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
Без опыта реально вкатиться каким-то скуль/бд девелопером, или туда только с бекенда перекатываются? В резюме только на опыт смотрят, портфолио с работами же не сделаешь? Может лучше пытаться аналитиком? Что учить дальше после всяких DWH ETL OLAP BI, внутренности конкретных бд, администрирование?
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 Так у тебя же два запроса или я чего-то совсем не понимаю что не мудренно?
>>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 для наименования магазина, тебе явно сказано, что если у магазинов количество одинаковое, нужно вывести первый по алфавиту.
>>1976819 >Без опыта реально вкатиться каким-то скуль/бд девелопером Ну если тебе меньше 25, то да, а дальше уже начнутся вопросы, а чем ты занимался все это время. Ну и будешь тупым как вот этот персонаж >>1976912 С бекенда туда не перекатываются, разработчики бд это отдельная каста. >В резюме только на опыт смотрят, портфолио с работами же не сделаешь Да, портфолио тут нет, дают задачи на sql, спрашиваю про устройство конкретной бд, если работа сложнее джуновской. >Может лучше пытаться аналитиком? Да, выучил sql и в путь. Сразу в разрабы сложнее, потому что это хоть и хуевенькая, но все-таки разработка. >внутренности конкретных бд, администрирование? А нахуй тебе оно надо вообще? Укатываются во всякие питоны и бигдаты, точно не в администрирование. Ну и у БД-разраба и БД-админа совсем разный функционал, админу можно и sql не знать дальше простых запросов, но при этом быть замечательным админом. Туда скорее всякие сисадмины/эникеи перекатываются.
>>1976918 >тебе явно сказано, что если у магазинов количество одинаковое, нужно вывести первый по алфавиту. rly? > (если таких несколько, то отсортировать по имени центра в алфавитном порядке) Я так понял, что если есть несколько магазинов с максимумом одинаковой марки, то нужно вывести все. Вот и думал как их вывести в одной строке.
>>1976928 Да пока что 99.9% вакансий разраба бд это мидлы с 3 годами опыта и мне естественно не отвечают. Вот и рассматриваю разные варианты через которые потом можно будет перекатиться в разраба бд. Мб через аналитика, может через админа или бекенд. Правда туда тоже время нужно чтобы вкатиться. Всякие питоны и дата сайенс не рассматриваю там вообще год-два дрочиться придется.
>>1977142 Ага, а вот в БД селекты научился писать и сразу попрет?! Это не так работает, тут тоже нужно жизнь положить, чтобы стать профессионалом. Но профессионалом становишься не от дрочки курсов, а от реальных задач. Вообще, я не знаю откуда БД-девелоперы берутся, это вообще не хайповая тема сейчас, так что всякие стажировки и тд можно не рассматривать.
Ты отличай chad db developer от virgin sql analyst. На второго может пойти любая мартышка, прошедшая sqlex, а разработчик это разработчик, тут еще учиться надо.
Еще гугли по конкретным базенкам, там же так обычно пишут, "Oracle Developer, MS SQL Developer". По вакансии "DB Deveoper" нужны скорее всего специалисты по всем БД сразу как я и вакашки там с прицелом на проектирование, архитектуру, выбор решений, а не просто загрузить табличку из точки А в точку Б.
>>1977162 По-моему, ДБ-девелоперы это древний тренд вроде современных микросервисов, или что там ещё было. Все начали хуевертить всякую йобу прямо в базах, а потом расхуяривать обратно, как мода прошла.
>>1977154 Отчасти да, но на бек/фронт я хотя бы видел стажировки и вакансии джуна без опыта. Понятно что там по сотне откликов, но мб есть хоть какой-то шанс за счет портфолио вывезти.
>>1977162 Да понятно что я червь без реального опыта, и никакие курсы и книжки его не заменят. По конкретным бд смотрел, то же самое. Ну хз, буду наверно в бек вкатываться, там хоть скл пригодится.
>>1975937 Под клиентами ты имеешь ввиду клиентов, которые к БД обращаются? Если ты пишешь про веб-серверное приложение, то я что-то не могу понять, как timestamptz поможет возвращать на фронт время в разных часовых поясах.
>>1964573 (OP) В postgres у таблицы employee есть 3 вида json-полей: fields, providedFields, optionalFields (хз зачем так сделали). В этих json-ах мне надо найти значение по ключу "preferences", оно может быть в каком-то одном поле, а может не быть ни в каком, как мне вытащить его оттуда чтобы не запускать 3 отдельных операции SELECT?
(вытаскивать его надо именно в таком приоритете: fields -> providedFields -> optionalFields; если значения нет то переходим к следующему полю)
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
>>1978194 Python или любой другой язык полезен ("будет плюсом" как принято писать). Тервер и матстат лично мне на собесе нужны были на самом детском уровня. Эксель тоже.
>>1978289 А чего ты хочешь, зная только sql и не имея опыта? 100к с порога? Анон выше верно написал, что одно дело быть DBD, который знает хотя бы теорию БД, и совсем другое - sql-макакой, который вкатился после 50 задач на sql-ex (хотя я и теорию тоже вспоминал).
>>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 лет опыта дбд и пытаться ему на хуй скакнуть?
>>1978436 По-моему, с таким набором можно искать работу полноценным DBD, если ты всё перечисленное освоил, конечно. Или аналитиком, или каким-нибудь ETL-разработчиком (но там своя специфика, насколько мне известно). А если у тебя ещё и диплом профильный есть, не важно шарага или нет, то это огромный буст тебе среди других вкатышей. В общем, ясчитаю у тебя уже есть варианты, главное ищи и откликайся.
>>1978436 >допустим прошел Так допустим или прошел? Я не верю, что нужно настолько хотеть вкатиться в БД, чтобы всё это изучать. На этом свет клином не сошелся. Почему именно это, если ты готов так много ресурсов потратить на вкат в айти? Обычно люди просто учат базовый SQL и ходят по собесам. Хотя мне кажется, что тебя по софт-скиллам отбракуют, ты какой-то ебанутый.
>>1978436 Ну тащемта помимо базового sql неплохо бы знать особенности конкретных диалектов/бд, обязательно транзакции мне кажется даже если не используют на собесе спросят. Если направления куда копать - BI\ETL\DWH либо Java\Python сплош9ь и рядом используют совместно с бд
>>1978687 или подскажите какой подход к организации данных можно применить. Вот условно прилетают данные по одному бизнес процессу из разных источников, надо их собрать вместе в новой модели. Если просто наваливать джоинами в одну сущность, в конечном итоге будет ли несогласованность данных, либо дупликаты, либо ещё какое-нибудь говно. Нужно сначала модель построить, что можно использовать помимо data vault подхода а у то у меня уж башка от этих всех сателитов взрывается?
Можно ли в чистом sql сделать так: берем у некой таблицы Student поле phone (оно может быть написано коряво - то есть с присутствием плюсов, дефисов и других посторонних символов), убираем оттуда все посторонние символы и сохраняем его в жсон-поле attributes по ключу "cleanedPhone" ?
>>1980463 А "чистый sql" это какой? Так-то вроде у Oracle есть регулярные выражения, может можно что-то через маску where phone like ... изобразить. Но я вот этот тупень >>1976912 поэтому ко мне доверия никакого. >>1978436 Допустим, я захотел по-хардкору угореть по БД, с чего вообще имеет смысл начинать? Что читать? Просто быстрое гугление выдаёт совсем уж древнюю литературу (ясен пень, что реляционная и объектные модели придуманы миллион лет назад и едва ли что-то фундаментальное открылось после).
>>1980481 Тогда в чём проблема просто прогнать через регулярное выражение, убрав всё не нужное (ну и практически плохой совет, но на этапе разработки можно просто замутить маску, чтобы пропускало только нужный формат записи), не? Мб замутить функцию, которая будет прогонять содержимое phone и вытаскивать, например, только цифры?
>>1980569 Так там есть отдельный timestamp with timezone Ну а так есть же всякие нюансы с переходом на летнее время или принятием полученного значения в общемировое. Ну то есть проще по-умолчанию считать что время указывает без часового пояса и потом его явно добавить, чем выяснить, что в конечном итоге время тебе показывает по Гринвичу (а ты на Аляске).
Тут есть люди с опытом DBD или ДБА? Какие у вас зп? Где-нибудь кроме банков работали? Есть те кто сейчас хиптсерский кликхаус или вертику осваивает? МБ хадупы? Что думаете о современном стеке дбд девелопера и посыле нахуй АСИДа в угоду производительности?
>>1964573 (OP) Мне надо обновить кучу записей в таблице (около миллиона), скрипт для этого есть однако Postgres лочит таблицу на момент UPDATE и у меня никак не выходит провести эти транзакции параллельно (ни асинхронно, ни с помощью тредов). Я понимаю что он ссыкует что данные могут скорраптится, но я знаю что у меня все обновляемые строки разные, как временно убрать этот лок?
Есть таблица 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 И тд. есть для этого какая-то надстройка или костыль нужно изобретать?
>>1982610 >ceil - функция для целочисленного деления Извините, исправлюсь, это не совсем целочисленное деление, ceil возвращает для нецелого числа наибольшее целое.
Я хочу посчитать сколько например 1 было в каждом поле. Условно GROOUP BY NUM, COUNT(Поле1),COUNT(Поле2). Но у меня нет в исходной таблице этих 1-2-3, по которым надо группировать, они есть только в виде данных в ячейках, при том для групировки нужны учитывать данные из обоих ячеек, если в одной ячейки есть число 7, а в другой нет, то 7 должна присутствовать в итоговой агрегации.
Сегодня в ночь решил шесть задач на sql-ex.ru, пока впечатления такие, что sql не сильно сложнее экселя получается.
Вообще тема здоровская, уже в головушки мыслишки роятся о том, как например сделать БД по результатам переписи 2002 и 2010 годов. Отдельно туда добавить сборники ОКТМО от Росстата. Потом задрочиться запросами через селект, вывести все муниципальные образования в которых проживают чеченцы за исключением муниципальных образований Чеченской республики. Вывести все муниципальные образования в которых русские в доле населения составляют менее 50%. А если к этой херне прикрепить какую-нибудь графическую оболочку, чтобы прямо на карте дублировались данные вообще была бы красота.
>>1982677 >костыль Не костыль, а умное и изящное решение! Нет никаких надстроек и быть не может, это слишком узкий кейс, заебешься каждый пердеж в параметры закладывать.
>>1982967 >А в чём тут аналитика Аналитическая функция - это любая функция, результат которой зависит от других строк, а не только от строки, на которой она вызвана. В данном случае результат зависит от порядка по столбцу. Умник ебучий.
>>1983040 Таблица огромная, от таких пассажей порвётся что-нибуь. Всегда стараюсь тзбегать юнионов без острой необходимости, тут не вроде как можно избежать
>>1983060 Union all - безобидная операция, она не делает сортировку. Реальность такова, что ты не можешь сделать в одном запросе две независимых группировки по двум разным полям. Можешь рассказать бизнес-смысл задачи? Есть шанс, что ее можно решить по-человечески.
>>1983087 >не можешь сделать в одном запросе две независимых группировки по двум разным полям На самом деле можешь, используя конструкцию group by cube(), но это ёбка какая-то, сам гугли, как это работает.
А как сделать, чтобы данные после апдейта применялись сразу? Написал пикрил, но данные не обновляются в таблице до тех пор, пока я её не закрою. Можно как-то фиксить?
>>1983087 Если бизнесово: Мониторинг оборудования, нужно находить отрезки когда оборудование было недоступно\Была высокая задержка. Одна строчка что-то вроде Отправлен-Получен-Обработан. Условно оператор смотрит - у кофеварки разница во времени Отправлен-Получен больше 20 секунд, и таких случаев час было 20, значит коферка хуёвничает, её нужно чинить.
Практически: Есть огромная таблица с несколькими временными отрезками(в одной строке несколько таймстэмпов), я хочу её схлопнуть, чтобы проще было хранить и делать запросы. Отрезки небольшие, от 1 секунды. Собирать планирую по Час-Ид-Количество-(каждого вида отрезков.). Но просто группировку сделать не могу, т.к. нет поля со всеми значениями. Distinct тоже не подходит, он сортирует. Думаю над тем чтобы просто генерировать своё поле, со значениями от 1 до 300 например, а всё что выше помечать как 300+.
Знаю, звучит как задача для NoSQL, но его нет под рукой.
>>1983124 Сложно, чел. Хранить несколько тамйштампов в одной строке - это нахуя а главное зачем? Если бы у тебя просто была таблица ИД оборудования / Отправлен / Получен, то ты считаешь для каждой строчки разницу Получен - Отправлен, округляешь ее, например, до целых секунд в большую сторону, и делаешь group by по этому полю и по ИД оборудования, получаешь на выходе таблицу ИД оборудования, Длина интервала и количество таких интервалов.
>>1983137 Еслиб мишки были пчёлками... У таблицы источника другой владелец. Могу предположить что так хранится потому-что строка - законченная операция, показывающая весь путь пакета, возможно для того чтобы сократить количество строк.
Подскажите плиз. Первый раз делаю питон проект с базой данных. веб страничка где ты получаешь инфу из базы и выводишь ее. и кнопка где ты заносишь инфу в базу. Разве верно получать данные из бд напрямую при каждой загрузке страницы? Как правильно это сделать?
>>1983629 Запилить кеширование. ОЗУ не резиновая, поэтому обычно его делают не для всего подряд, а для сравнительно небольших, но часто используемых данных. Как конкретно его запиливать, сильно зависит от языков и фреймворков, плюс юзают Redis и его аналоги. Ну и не забывать создавать индексы в БД.
>>1980463 Ага можно, я недавно такое же делал в оракле для тех. коментария через регулярку. Если юзать pl sql, вообще красота, можно написать функцию, что будет тебе каждый номер править на удобоваримый
>>1980463 Как то так будет: select regexp_replace(regexp_replace(str,'[^[[:digit:]]]*'), '^(7|8)[\d]{10}') from t
Где str название столбца в котором храниться "грязные" номера, и t соотвественно таблица с этим столбцом
Описание: Regexp_replace маской из регулярки вытаскивает нужное из стринга. Что бы получить номер я сначало оставляю в строке только цифры, а потом из полученного считываю 10 цифр после 8 или 7
Огроничения: сработает только для мобил в России Ну и еще я эту хуйню не проверял, так что наверное где то накосячил
>>1986237 >вкатиться с ораклом в 200к Сразу на 200 не вкатываются, 200к-250к это зарплата оракловщика с 5 годами опыта разработки (именно разработки, а не SQL запросов) >что надо уметь и учить Можно почитать Тома Кайта, но он унылый как моя залупа, не осилил. Больше решает опыт, чем больше интересных ситуации в жизни встречал, тем проще. Это не та тема, где прошел курсы и поперло. >И насколько реально юзая только pl sql получать 300к в секунду Нереально. С голым ораклом 250к потолок, и только если ты действительно хорош. Поэтому я понимаю, что мое время проходит и нужно в экстренном порядке учить питон и перекатываться в дата-инженеры, если я не хочу через 5 лет оказаться под карьерной лестницей и дрочить легаси со старперами.
И в очередной раз спрашиваю: а нахуя вам вкатываться именно в бд?
>>1986418 В свое время заебался собеседовать вкатывальщиков, которые думают так же. Он очень сложный, особенно когда речь идет об оптимизации запросов, особенностях конкретной бд... Выучить базовый синтаксис SQL — дело не хитрое, но человеком от этого не станешь.
>>1986456 Нет, не должна. Клепатель формочек — низшее существо. Вот туда и вкатывайтесь. А в такие благородные отрасли как разработка БД не надо лезть.
>>1986484 Веб-макака, угомонись. Ты рисуешь формочку, ты видишь, что она работает, и тебе поебать, что дальше. Разработка БД предполагает детальное понимание того, как работают процессы внутри БД, недостаточно перевести логику на язык SQL, нужно еще позаботиться о том, чтобы этот SQL был оптимален.
>>1986493 >По, теме, скажешь, что? Нет, чел, я эксперт в одной области и очень поверхностно понимаю, как работает другая. Может быть, ты мне скажешь, почему считаешь клепание форм более интеллектуальной деятельностью, чем разработку БД?
>>1986503 В общих чертах уже ответил, приводить конкретные примеры я не буду, потому что без должной экспертизы их все равно невозможно понять. Поэтому я и спросил тебя, как должно выглядеть описание сложности конкретной профессии, чтобы непосвященный человек сказал "ух бля как сложно". Короче, я устал с тобой разговаривать, пиздуй работать.
>>1986508 Этот эксперт порвался, несите следующего.
веб мака будет умней, потому-что конкуренция выше, стек технологий больше. Сейчас средней руки ньюфаг для вката в макакинг форточек должен уметь докеры,юникс, sql, и ещё кучу говен, в то время как бд-дауны до сих пор палкой по своему ораклу стучат
>>1986411 А что плохого в легаси? Это типа как пару лет назад было несколько статеек, что есть много программ на забытом и древнем языке кобол, которые до сих пор надо поддерживать, а деды-колдуны начали умирать. Это же как слесарь на заводе. Сидишь в сласарке и по звуку закрытыми глазами определяешь, что сломалось и где надо подтянуть.
Мне кажется это прямо золотая жила. Легко в такую тему влезть? Буду платить в два раза больше чем по региону?
>>1986669 Оракл еще долго не умрет, так что не получится стать последним человеком на свете, который знает оракл, и грести миллионы. Ну и в целом ничего хорошего в легаси нет. Это очень маловероятная ситуация, когда ты сидишь на легаси и изредка что-то правишь, скорее всего тебе придется активно дорабатывать чужой код, пытаться впихнуть свои доработки поверх чужих и стараться, чтобы ничего не поломалось... А даже если ничего не править, никто не даст кадру просто так сидеть без дела, будут запрягать всякой другой хуйней, которая имеет мало отношения к твоим непосредственным обязанностям. Ну и психологически тяжело будет, никакие деньги не спасут, когда поймешь, что заебался.
Анон, что с меня она хочет? Создал 2 пользоватиля через консоль, не через команду createuser. Теперь не могу удалить, сменить роли и тп. Вот пример удаление других пользователей.
>>1986691 Не, ну править-то можно по разному. Одно дело когда ты ломаешь мозг придумывая архитектуру нового проекта. Другое дело когда ты после недельной переписки добавляешь один if и потом еще неделю гоняешь тесты.
Анон, поможешь? Придумываю связи для таблиц, тема - автобусные перевозки. Я хочу связать как-то точку отправления автобуса и точку прибытия, это один ко многим? У одно точки выезда может же много точек прибытия, да?
>>1991526 Долго же ты обтекал, эксперт, и всё равно высрал какй-то бред. Давай по пунктам: 1) Опять примеры максимально общие. Я неебу что ты этим хотел сказать. Или для тебя чтение, это задача требующая экспертного знания? Ууу, эээ, ты компьютер видел? Знаешь как работает? Инструкцию по эксплуатации читал?
2) AS/400, судя по гуглу какое-то серверное говно мамонта. Я бы ещё сильно подумал относить это дб-макакингу или системному администрированию.
3) Инструкции по эксплуатации Оракл. Дед тебе сколько лет? Ты таблетки принял? Ни разу не слышал чтоб так называли мануалы люди моложе 40. Ну читал немного и что дальше? Опять же ты примеров никаких не приводишь, так что хуй тебя разберешь. Единственное что могу сказать, сракл не сложный, он неудобный. Как условный бейсик на фоне других языков , тот же sql и сам не самый новый язык, но даже на фоне других диалектов оракл со своей дрисней умудрился всех обскакать. Например - ебанутая работа с датами. Сложно? Нет. Неудобно? Пиздец как, хуже нельзя было придумать.
А самое главное твоя хуета не развивается. Как конвертили дату через сраку 30 лет назад, так и щас делают, а за это время уже все летают на мэп-редьюсах, и подрачивают кэш в редисах, а считают спарками. И условная вебмакака 2021 должна знать больше чем аналогичная макака из 2020, а ты ораклисты так и сидят в своей пещере.
>>1986411 Анон, подскажи, кроме Кайта можно что-то ещё почитать по ораклу, чтобы кашу в голове разгрести и получить какое-то структурированное представление о синтаксисе, пакетах и прочих инструментах? А то взяли на работу разрабом, большую часть логики пишу в SQL или PL/SQL, но вижу, что базы не хватает. А Кайт ещё вроде не по уровню мне. Или только доки курить?
>>1991853 Кайт по уровню, там ничего сложного, просто нудно. Но Кайт это скорее про понимание того, как оракел внутри работает, процессы, файлы, вся хуйня. Тебе, как я понимаю, нужен именно PL/SQL - под это дело свой талмуд есть - Фейерштейн, который я тоже не читал. Лучше нагугли какой-нибудь список вопросов на оракл сеньера и иди по нему, а то заебешься. Ну и в треде спрашивай, не стесняйся.
>>1991901 Типы таблиц, типы индексов, виды соединения таблиц, виды доступа к данным, уровни изоляции транзакций, хинты, регулярные выражения. Сеньера еще могут попросить пояснить за каждый ответ и сказать, что в какой ситуации лучше. SQL еще всякие надо писать, с аналитическими функциями и тп.
>>1991921 >виды доступа к данным. С точки зрения оптимизатора: full scan, несколько разных index scan >хинты Подсказки оптимизатору (соединять в определенном порядке, использовать определенне индексы и тд, тут конечно лучше погуглить) >Типы таблиц >Временные/обычные? Виноват, имел в виду способы организации таблиц: heap, index-organized, cluster
База mysql (innoDB), в одной таблице лежит 10 000 000 строк , это фото к продуктам(пути, мета, и проч. инфо) . Появилась задача все это просчитать и сделать статистику - где используются, на каком продукте, сколько включено, выключено, не заполнено. И все это при одном заходе на страницу. Запросы написал, с вложенными и джойнами - просто вешают страницу на 5-10минут.. Как это оптимизировать( хотя бы 20сек) ? Реально ли это сделать на мускуле?
>>1992144 Недавно читал статью по денормализации. Там было что-то подобное. Так вот там предлагали фото вынести в другую таблицу. Для статистики они тебе не нужны, а запрос это ускорит.
Изучаю sql, возникла проблемка с таким типом задачи: есть 3 таблицы (работники, пк, работник_пк). В "работниках" поля id, имя, фамилия. В "пк" id и производитель. В связующей id, id_работника и id_пк. Связь многие ко многим. Задача вывести имена работников за которыми привязано больше 2 пк. К сожалению идей нет как делать это задачу. Понимаю, что надо как-то через джоины, но дальше хз. Помогите кому не впадлу)
Аноны, есть один SELECT и два JOIN в нем, при выполнении запроса, накладываются локи на записи. Как бы мне избежать этих локов, ибо этот запрос всегда делает просто чтение без последующих апдейтов и т.п. Все это в PostgreSQL 12.
>>1995068 Хуй знает. Запрос идет как: ORM -> PGBouncer(session mode) -> PostgreSQL. На на выполнение в БД попадает все без криминала и подливы - https://pastebin.com/cBnVG6Hh
>>1995162 Этот тип блокировки в постгре - не эксклюзивный. Они никому не мешает. Он вызывается селектом. Относись к этому как к инфе о том, что кто-то в данный момент читает эту таблицу.
>>1995183 То есть если сразу N селектов захотят забрать одни и те же данные, то эта блокировка никак никому не помешает? Бля, если так, то хули тогда этот запрос такой медленный, по 25-35мс на РДСе выполняется. БД пустая считай.
Всем привет. Подскажите, как лучше сделать, не могу понять. Хочу сделать таблицу чтоб хранить количество свободных номеров в отеле. То есть можно сделать как на нижней таблице, но тогда категории номеров будет нужно вносить и изменять вручную, а не брать из таблицы со списком категорий номеров. Или в принципе так и норм?
>>1995685 Нужно три таблицы: 1)Справочник номеров 2)Справочник арендаторов(опционально) 3)Таблица бронь (если решил п2, тут же ИД арендатора): ИД_Номера - НачалоАренды - КонецАренды
Потом делаешь запрос в бронь и смотришь какие из номер сейчас заняты.
Можно это конечно сделать и всё в одной таблице, но за такое дед препод твоё щёку для своего хуйца арендует, потому-что денормализовано Или с ехидной ёбой спросить про нормальные формы
>>1995755 Ну у меня типа такого сейчас в общем. Но что с номерами и ценами пока хз. Ты типа предлагаешь просто при каждом бронировании пробегаться по всем броням и считать, сколько попадают в этот диапазон и если их больше, чем количество номеров, то значит все занято? Но вдруг там нужно будет зачем-то заблокировать номер например? Ну или в общем поставить количество на определенные даты вручную?
>>1995779 По схеме: У тебя букинг уже со всем говном, так не рисуют, рисуют просто с ключами иди переделывай.
Рисуй звезду:
В центре таблица фактов, что я описал, он по ключами соединена со справочниками. В центральной таблице НЕ ХРАНИМ всё гавнизе, только ключи на справочники.
Строчка центральной выглядит примерно так:
УниальныйИД-ИДКомнаты-ИдКлиента-ВремяНачалоАренды-ВремяКонцаАренды. (ёбаный рот никто же на 1 день не арендует)
Потом делаешь представление, в котором на текущую дату проверяешь свободные номера. Можно вобще просто заджоинить левым джоином к справочнику номеров, таблицу с фактами по диапазону дат. Где заджоинится - заняты, где нуль - свободны. Ну если две даты там сначла нужно будет посчитать попадает ли текущая дата в диапазон, но думаю там можно придумать хитрый хинт с datediff, мол если отрицательное, пошiв нахуй.
>>1995823 Drawsql сайт нашел в гугле. >>1995793 Ну я понимаю, у меня там и есть внешние ключи в ней. Просто есть клиент в бд, а есть информация, которая приходит с сайта или из какого-то другого источника и там может быть какая-то рандомная инфа, типа написано латиницей или с ошибкой или не полностью. А в таблице клиенты уже точная информация, которая при заезде администратором из документа берется. Поэтому когда бронь делается сначала там данные, которые ввел пользователь при бронировании, а если он приедет и его информацию внесут в архив, то тогда она будет браться из таблицы клиентов.
>>1996170 Ну значит с этого и надо было начать, а не с синтаксиса регулярок. Попробуй like N'%месяц%' или convert(varchar(max), Description). Нет этой хуйни под рукой, чтобы наверняка сказать, сам ебись и гугли.
>>1996097 полнотекстовый поиск же >>1996014 Нет ты не понимаешь. В центральной таблице это говна быть не должно. Тебе нужна отдельная таблица с бронями. Что значит он там не то что-то набронировал? Это предоплата и вьезд по паспортам, если он заполнил неправильно форму, он едет нахуй, а не в отель.
ФИО должно быть точно, иначе это хуйня. При проектировании надо опираться на бизнес-логику. Если ты неправильно заполнишь данные на сайте при покупки авиабилета, тебя не пустят в самолёт, так же и тут.
Соотвественно, когда мы будет искать занятые номера, уже бахаем три таблицы=СправочникНомеров+Брони+ЗанятыеНомера. Второй вариант добавить сущность СОБЫТИЕ и сыпать все в одно место, и брони и заезды: Ид+ИдНомера+КодСобытия(бронь-заезд-выезд)+Дата. Тогда можно будет построить полностью таймлайн, и напрмиер выбрать все номера, у которых есть выезд, но нет брони. Тут опять же вопрос в нормализации.
>>1996491 Ну я сам в отеле работаю и там типа так. Вообще насрать, чего там человек заполнил на сайте, букинге или ещё где. Никто там паспортные данные не высылает, почти никогда заранее не платят. Иногда по телефону чего-то промямлют, ты запишешь кое-как и всё. Или другому человеку. Главное чтобы найти эту бронь при заезде и чтоб она квоту занимала. А уже когда заезжает человек, то берется у него паспорт, заносится в систему и он добавляется в архив уже с однозначными данными. Думаю все-таки да, попробовать просто пробегаться по броням. А для технических блокировок мб создать какого-то клиента с именем "блокировка" и он будет создаваться когда надо на какие-то даты закрыть номера. Хотя в реальности можно обычно вручную задать количество номеров на каждый день, а значит эта информация хранится где-то.
>>1996495 >>1996495 >>1996495 Тогда придерживайся второго подхода - все сыпешь в одну таблицу с событиями: Событие - 1 бронь. В нём Ид пользоватоля вобще не заполнен, вместо этого заполнен коментарий, или вобще можно json класть в стобец с коментарием. Событие 2 - заезд. Ид пользователя заполнено. Событие 3 - выезд.
Кстати с таким подходом, не нужно делать две даты, достаточно одной.
>>1964573 (OP) Не пойму, почему считается, что кассандра это availability + partition tollerance, а big table это consistency + partition tollerance У них у обоих consistency level конфигурируется. У big table по умолчанию всего лишь eventual consistency. Такой же и у кассандры
>>1964573 (OP) Делаю листалку-пагинацию (на бэке постгрес если вдруг кому интересно), если простой способ затребовать определенную страницу под номером page_num (начинаются с 0): LIMIT page_size OFFSET page_size x page_num
Но как заранее узнать максимальное количество страниц? Так чтобы это не отнимало много времени
Короч аноны, контора платит, нужно выбрать какой-нибудь базовый sql курс, типа dba level 1 Не по инфраструктуре, а именно по запросикам. Есть проверенные варианты с онлайн-курсами? Только с рашкискими школами, чтобы не ебаться с оплатой забугорному контрагенту
>>1998001 >dba SLQ Analyst, скорее. DBA вообще не про то, можешь совсем ненужными вещами голову засрать. Конкретных курсов не знаю, меня всему научила улица.
Если я не умею программировать, но немного знаю скуль с питоном и хочу со временем развить скиллы по анализу данных, стоит ли сейчас вкатываться в Logica, параллельно уча скуль с питоном?
>>1964573 (OP) >Clickhouse >Пиздатая колоночная БД, дает прекрасные показатели по butch вставке и множественному чтению >join-ы между таблицами сразу же херят всю производительность Что это ха хрень??
mysql на винде раз в сутки выкидывает окно на две секунды с каким то прогрессом в консольке. Я за месяц так и не успел прочитать что оно делает. И не смог нагуглить. единственное успел прочитать слово initialize. Что это за говно и как его отключить?
Есть колонка, в котором такой текст: "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"
>>2004283 Не, ну это на 300к наносек вопросы, бесплатно не готов обсуждать. Из жизненного опыта: Когда ты пишешь where stateid in (select stateid from ...), то без алиасов sql считает, что stateid из внутреннего запроса относится к stateid внешней таблицы, то есть условие трактуется как stateid = stateid, всегда верное, возвращает все строки из таблицы. А в твоём случае ещё и переменная так же называется, что именно интерпретатор тут поймет вообще хуй его знает... Мерзкий говнокод.
>>2004507 С точки зрения логики, в максимальном приоритете интерпретатор должен брать именно тот stateid, который переменная, потому что ему невозможно прописать алиас... Ну опять же получаем условие вида 1=1 и все строки из таблицы. Ой, ну нахуй ты это принес, только расстроил меня.
>>1964573 (OP) У меня, как и большинства анонов, есть проблема - я забываю то, чем долго не пользуюсь. Вот и с sql сталкиваться приходится редко - чаще всего все мои задачи решает orm. Но забывать ни теорию баз данных, ни сам язык запросов не хочется. Что посоветуете, чтобы держаться на плаву?
>>1964573 (OP) Пытаюсь тут обновить одну таблицу в postgres (а точнее поле json), но при попытках обновиться эта падла мне часто ругается на знак "%" - это, якобы это "unsopported format character" - втф? С хера ли % не может быть внутри полей бля?
до кучи добавлю, что я вытаскиваю уже готовое поле где присутствует % (!) но когда обновляю его то postgres усирается
Неофит в БД, использую постгрю. Создаю таблицу для логов (user_id, operation_time, operation_date) встал вопрос в оптимальном подходе проектированию. Нужно ле делить поля на два (время операции и дата операции), либо же делать одно поле?
>>1999801 Так а в чём плюс то? Если я получаю ровно то, что записал? Я понимаю, что если изменить таймзхону сервера (или соединения), то получу я другое время. Но я не могу придумать случай, когда такое может произойти
>>2004510 Да я сам расстроенный сижу. Меня спрашивают, как оптимизировать этот запрос? Мой вариант - просто выкинуть его нахуй на помойку, хуйня какая - то.
>>2007951 Полигоны и градусы такой себе бэк, уровня школы, вот когда вызовом 2 таблиц формируешь матрицу, и с ней надо работать, вот тогда мозги кипят добротно
>>2008717 Да бля, ну без тралленка, я смотрел вакансию типа qa трейни/джун, там столько говна в требованиях, типа sql, xml, bash, vbs, JS и еще сотни всякого говна, сейчас я на 29 упражнении, по сути ничего кроме вложенных запросов и джоинов нормально не освоил. Конечно если от меня будет требоватся только Select * from выдать, у меня жопа полыхнет.
>>2008725 > если от меня будет требоватся только Select * from выдать Именно так и будет. Зачем ты вообще задрачиваешь это всё, если идёшь не на разраба? Даже меня, бэкендера, спрашивали только про джойны и нормальные формы, всерьёз с SQL ебутся только всякие ДБА. Тестеру от SQL нужно только уметь делать селекты, подставлять тестовые данные и подобное, причём не обязательно руками, можно мышкой через гуй. Даже уметь создавать таблицы не надо. > xml Понимать, что это такое, уметь читать и редактировать > bash На уровне ls/mkdir/find/cat/grep. > vbs, JS Ага, а ещё git, фреймворки, вёрстка и CI/CD, ведь там будут обязанности фуллстека за зарплату тестера.
>>1964573 (OP) анончик посоветуй годноты по администированию оракле, именно по администированию, настройке бекапов , примери и слееров , стендбаев и всего такого
"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"
Аноны, есть один селект на постгресе. Подскажите, пожалуйста, можно ли его как-то замаппить в пары ключ-значение через hstore или другой дататип? Чтобы в итоге получилось [users, {select, select, update}], [vendors_communications, {select, select}], и т.д.
Читал про SQL, работал с sqlite как с мини-БД дял пет-проекта. Пришел на первую работку и тут PostgreSQL, постоянно фигурирует термин "схема" - как я понял это понятие близко к "таблице" но не тождественное ему? Че это блин такое?
>>2010604 В одной БД несколько схем, схема - это что-то вроде неймспейса/пакета/модуля из обычных языков. В одной схеме может быть несколько таблиц, индексов, процедур и прочего. Ещё на будущее: под схемой в постгресе, мускле и оракле понимают три совершенно разные вещи.
>>2010616 >под схемой в постгресе, мускле и оракле понимают три совершенно разные вещи. Забавно, что при этом ты дал определение схемы (ну описание) и не сказал, про какую схему ты именно говоришь - прогрессклную, мускульную или оракловую
>>2004283 Слыш да, а нахуя вообще первый подзопрос? Там же селект стейтАйди из т2, у которого условие на стейтАйди = константа. Проще же сразу ... Where stateid = stateid(переменная) and (второй говнозапрос)
>>2011827 Если набор StateID в table1 и table2 разный, то это значит, что на запросе с картинки вернутся записи из table1 только в том случае, если они есть в table2, а если заменить подзапрос на константу, то вернутся записи из table1 с этим значением вне зависимости от того, есть они в table2 или нет. Понятно, что в здоровой ситуации набор значений там одинаковый, но в общем случае логика запроса меняется, поэтому нельзя так делать. Senior SQL Developer
>>2013584 Ну так а нафиг она тогда нужна, если сорца нету? Для понтов, мол смотри у нас тут есть скомпилированная РСУБД, она даже работает, а что там за вирусы, черви и бекдоры в коде - ебать не должно, код скрыт. Да?
>>2013589 Опенсорс ничего не гарантирует. В миллионах строк открытого кода тоже можно спрятать много интересного, и никто не заметит, потому что нет ни у кого времени полностью читать весь код. В линукс уже несколько раз коммитили бэкдоры, пруфы можешь поискать сам. Да и оракл стал популярен в те времена, когда тупо не было полноценных альтернатив по возможностям, это как с линуксом, который но недавнего времени был неюзабелен на десктопе (и до сих пор вызывает вопросы). Сейчас же с использованием оракла написано слишком много кода, их нельзя быстро переписать на постгрес.
>>2013604 Оракл вряд ли на это пойдёт, он слишком жадный, и эта жадность может его погубить. У него и так кроме СУБД куча других проприетарных продуктов, и он не спешит их опенсорсить.
>>2013609 Да нет, ты не понял. Тупо взять деобфусцировать, декомпилировать, дизасеблировать, и/или воссоздать, дописать и портировать модули подпрограммные, которые выполняли бы всё то, что делает оракл, и назвать это оракл-опен-сорц-реверс-инженеред-портабле-еxe
Помогите написать SQL запрос для того что бы, после того как пользователь добавит товар в корзину, в списке выпадали только те размеры, которые есть на складе.
SELECT DISTINCT Склад.Размер FROM Склад INNER JOIN Корзина ON Склад.КодТовара = Корзина.КодТовара ORDER BY Склад.Размер;
Дошел только до этого, но оно не работает. Для курсача надо
>>2013653 Сложно сказать, сколько ни читал сравнения оракла и постгреса, везде одна субъективщина типа "а у нас есть merge и пакеты, а у вас?". С основными задачами они справляются примерно одинаково, и реальная разница в некоторых продвинутых фичах (наподобие репликации), которые нужны не всем.
>>2013753 Нужно больше информации, алсо, попробуй реализовать через вложенный запрос, иногра обсалютно одинаковые логические запросы, через вложенный, выдают разные результаты
>>2013870 Та я сам только ботаю на sql-ex и откуда у тебя форма лезет не ебу Я конечно не представляю как это должно быть, но для каждой новой клиентской корзины я бы создавал отдельно таблицу ьипа <клиентАЙДИ>корзина (продуктайди, кодичествовкорзине)
>>2013873 >я сам только ботаю на sql-ex А зачем тогда людям что-то советуешь? Ладно этот чел, он свою лабу сдаст и забудет, но вдруг кто-то прочитает бред по типу этого и будет думать, что это правда >иногра обсалютно одинаковые логические запросы, через вложенный, выдают разные результаты
>>2013879 Ну по тем задачам, не помню какая именно, так и было, где-то в начале, до 20 точно >зачем Потому что профи годны только говниться а не подсказывать
>>2007951 Думаю да, у меня образование 9 классов (гдя я проебывал уроки, особенно математику). Недавно пошел на собеседование в контору, где чисто на t-sql все делают. Мне дали тестовое, которое очень просто представить на системе координат. В итоге я его так нихуя сделать и не смог... Теперь собираюсь наверстывать упущенное через Khan Academy.
>>2016735 Я б таких собеседователей ногами пиздил. Второй год работаю, ниразу не одной задачи с матаном\геометрией не попалось. Если нужно что-нибудь более сложное посчитать, всегда приносят формулу.
>>1964573 (OP) Как подключиться к файлу базы данных SQLite из браузера client-side, чтобы читать-писать данные там, используя SQL-запросы? Вижу здесь: https://github.com/sql-js/sql.js есть DEMO: https://sql.js.org/examples/GUI/ и оно вроде работает в браузере, но оно где-то хостится на каком-то сервере, а я не хочу вгружать и передавать свою базу данных, и сами данные, на чей-то сервер, чтобы там кто-то колупался. Я хочу client-side.
>>1964573 (OP) Я знаю, что любая реляционная база данных, состоит из таблиц взаимосвязей между ними. Но для того, чтобы работать с базой данных, нужна целая, пиздатая СУБД, которая не всегда может поставится - это раз, во вторых, там могут быть бекдоры всякие и хрен знает что, в третьих лицензии могут быть несвободные, и всякое такое. Вопрос. А возможно ли работать с базой данных, БЕЗ СУБД? Скажем, вот, можно ли создать базу данных, в блокноте, и просто глазами смотреть где какое значение в поле какой таблицы, и так вот читать-писать-искать значения, производя CRUD?
Если да, то можно ли пихнуть всё дело - пхнуть в один бинарный файл, а вместо индексов, просто сунуть смещения на всякие данные, и обходить всё это, потом, алгоритмом, в том числе и кастомным, вроде SQL-запроса?
И ещё, я знаю, что любую реляционную БД, любой величины, можно засунуть в одну таблицу, и в полях которой - имена всех таблиц, и всех их столбцов, и всех возможных типов данных, в таблицу, где каждая запись представляет из себя конкретное значение - данные, но придётся указывать номер таблицы, номер столбца, номер типа данных, и по этим номерам уже извлекать данные конкретного типа из конкретного столбца, конкретной таблицы, это уже дублирование пиздецкое, и ещё куча нуллей будет в такой огромной таблице.
В общем, реквестирую, минимально-возможную реляционную СУБД, такую, чтобы возможно, её можно было с нуля написать.
>>2020054 > нужна целая, пиздатая СУБД, которая не всегда может поставится Я бы не стал доверять данные серверу, на котором такие проблемы с окружением. > там могут быть бекдоры всякие и хрен знает что А ещё они могут быть в процессоре, в ОС, в компиляторах, в мозгу с рождения, в прививке от коронавируса. Подобные рассуждения ведут только к тому, что надо срочно запереться в комнате с мягкими стенами. > лицензии могут быть несвободные, и всякое такое. А могут быть свободные. Ты наугад выбираешь СУБД что ли, или всё-таки ищешь подходящую под задачи с подходящей лицензией? > возможно ли работать с базой данных, БЕЗ СУБД? Невозможно, ты так или иначе напишешь свою СУБД, пусть это и десяток функций, ломающихся при масштабировании. > Скажем, вот, можно ли создать базу данных, в блокноте, и просто глазами смотреть где какое значение в поле какой таблицы, и так вот читать-писать-искать значения, производя CRUD? Множество CSV-файлов. занимать будет дохуя места, запросы будут медленными, постоянная перезапись файлов быстро убьёт диск. > Если да, то можно ли пихнуть всё дело - пхнуть в один бинарный файл, а вместо индексов, просто сунуть смещения на всякие данные, и обходить всё это, потом, алгоритмом, в том числе и кастомным, вроде SQL-запроса? Примитивная СУБД так и будет работать. > И ещё, я знаю, что любую реляционную БД, любой величины, можно засунуть в одну таблицу, и в полях которой - имена всех таблиц, и всех их столбцов, и всех возможных типов данных, в таблицу, где каждая запись представляет из себя конкретное значение - данные, но придётся указывать номер таблицы, номер столбца, номер типа данных, и по этим номерам уже извлекать данные конкретного типа из конкретного столбца, конкретной таблицы, это уже дублирование пиздецкое, и ещё куча нуллей будет в такой огромной таблице. Именно так, поэтому этого не делают. > В общем, реквестирую, минимально-возможную реляционную СУБД, такую, чтобы возможно, её можно было с нуля написать. Гугли 12 правил Кодда, это минимальные требования к релцяционной СУБД. Написать с нуля, конечно, возможно всё, но легко сдаться на первых сложностях наподобие реализации ACID-транзакций.
Добрый день, господа, мне нужно получить в ближайшие полгода сертификат разработчика pl/sql, было бы неплохо чему-то научиться, но основное - получить корку. Стоимость обещали оплатить, но пределов ценовых пока не уточнял. Получал кто-нибудь такой сертификат в ДС?
>>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, и делать целый сайт и ещё и хостить его, блядь?
Идёшь на https://www.sqlite.org/index.html Качаешь, там же берешь документауцию. Потом обращавшся из своего ёбаного питушарпа к базе и пишешь данные. Если не знаешь как пишешь в гугле ПИТУШАРП СИКВЛАЙТ, читаешь и обращаешся. Что блядь сложного? Какой нахуй xp? Какаой нахуй хелп локальный? Тебя что там разморозили: Как там в нулевых?
>>2021626 Ну там перенос тсроки проебался, на простой дабл берёшь что хочешь, на особые дабл берешь согласно списку. А то что она колоночная..НУ хули, ролл есть ролл
>>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 и друие подобные БД, где всё в одном файле, хреново масштабируются.
>>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 ячеек, получается.
>>2021736 >С расчётом на 10-20 не очень активных пользователей, может, и существует. Sqlite и друие подобные БД, где всё в одном файле, хреново масштабируются. Тут https://stackoverflow.com/a/3867722 пишут что 100к посетителей должен держать сайт с базой данных сиквелайт.
>>2022413 >А нахуя ты в степень возвёл? Там примерно 10x10x100 ячеек будет, разве не? >То есть, около 10000 ячеек, получается на все данные, где-то, >и в одной пиздатой таблице это 10000 строк, >где одна ячейка - значение в каком-то поле каждой строки таблицы. >В таблице, с числом полей 1(ID) + 3(имя таблицы, имя столбца, тип данных) + >5 (если брать все типы всевозможных данных, у sqlite 5 типов данных); >и вот в такой таблице - 10000 строк, как-бы: >код, имя таблицы, имя столбца, тип данных, и сами данные в соответствующем столбце из 5-ти возможных типов. >Всего, столбцов 9, и 10000 строк - 90000 ячеек, получается. Это вариация god-table одного анона из предыдущих тредов, если чо, я тебя помню. В первые строки подобной таблицы, можно вместить текстом, имена таблиц, и имена столбцов внутри них, а также типы данных, а чтобы не дублировать имена и типы в каждой строке этой таблицы - вставить ссылки на них, в виде кодов, числами - так меньше текста должно быть продублировано. Но вот поля для разных типов, должны быть отдельные, потому что данные в них могут иметь разный размер, например, какой-либо многовесный blob может быть размером в гигабайт.
Всё это - засунуть в пиздатую таблицу, как на наноборде, и выстроить индекс для неё, отдельным файлом, при этом, первые строки с названиями таблиц, их столбцов и типы - вгрузить в память, а дальше шастать по всей хуйне уже через логику работы софтины.
Чем уже не самописная и главное - реляционная СУБД? Быть может, можно заебенить всё это ещё более оптимально, с минимальным числом строчек кода, чтобы не писать 1005000 строк, хз - это просто набросок.
>>2022413 >Но вот поля для разных типов, должны быть отдельные, >потому что данные в них могут иметь разный размер, >например, какой-либо многовесный blob может быть размером в гигабайт. Можно сделать в 5 столбцов, походу: Код данных, код таблицы, код столбца, код типа, сами данные. При этом, как-бы, похуй какие данные, вообще, и какого они размера - писать их сырыми, да и всё.
>>Но тут много других проблем возникает, >>например, что если при обновлении данные увеличились и не влезают в то место, где хранились раньше, >Тогда, добавляется новая запись в двоичный файл, и обновляются оффсеты в индексном файле, по хэшу-ключу, >а старые данные - затираются нуллями. >>или как удалять данные, но так, чтобы не было много неиспользованного пространства и не росла фрагментация. >Вот эта трабла там >>2022426 не решена. Когда нанопост удаляется навсегда одминчегом этой читалки постов, >в двоичном файле, данные, просто филлятся нуллями, и индекс обновляется, но хэш сохраняется, >а оффсеты в индексе обнуляются, и нанопост помечается что он удалён нах. >Всё в коде есть, и расписано, но это не реляционная СУБД, и даже не БД, >а просто одна таблица с постами и индекс для быстрой загрузки. Если в блоб-е гигабайт, и он перезаписывается двух-гигабайтным блобом, то индекс предыдущего блоба - обнуляется, и пишется новая запись в большой таблице, уже с двух-гигабайтным блобом, и новым оффсетом в индексе. Когда пишутся новые данные, они пишутся уже на место старого блоба, и таким образом, база не растёт. Но если не филлить нулями старый блоб, в базе будет мусор из байт старого блоба, а если филлить нулями при каждом обновлении - вся хуйня будет медленно работать, и может убить диск. Оффсеты мусора, можно отдельно помечать в индексе, чтобы на его место писать новые данные. Но такая база будет фрагментированной, а как её дефрагментировать - хз.
>>2022413 >Колоночная (00) - отпадает, пушо она не реляционная и там нельзя взаимосвязывать таблицы, блядь. Значит либо пердолить свою СУБД (дабл), либо sqlite (0).
Пожалуй начну костылить и пердолить свою личную СУБД, по даблу. Не знаю, на сколько хватит энтузиазма, блядь. Вот черновой вариант, описания, пока-что: https://pastebin.com/HjWmbk5Z Кода, разумеется, пока нет, но теория какая-никакая, уже есть, как-бэ, можете поправить, если чо.
Если из колоночной базы данных можно сделать релюцивонную, наверное и колоночная сошла бы, хз.
>>1964573 (OP) Как в SQLite вставить строчку данных с произвольным числом столбцов, всех возможных типов, данных, типы которые неизвестны, ведь они могут быть в разном порядке и дублироваться?
>>1964573 (OP) Анон, какие ты знаешь ДЕЦЕНТРАЛИЗИРОВАННЫЕ базы данных, такие, чтобы они не имели центра, который можно разбобить ракетами? Быть может, есть какие-то зашифрованные базы данных на блокчейнах, или что-то наподобие этого? Первое что приходит в голову, это тупо сделать ноды для раздачи таблиц, сконвертированных в CSV или JSON, чтобы можно было синхронить данные между нодами, и скачать с любой ноды, просто подключившись к ней. Но гонять в открытом виде данные и шарить их кому не попадя - так себе затея, ведь данные могут быть и секретными, ну или приватными, конфиденциальными, скажем. И хотя, ничто и не мешает зашифровать их, но при длительном хранении в общем доступе, даже в зашифрованном виде - растёт риск брутфорса ключа шифрования.
>>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?
>>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ђ
>>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'ом именно эту вот, хуйню получить - хз.
И вижу отличия. В чём - не пойму, просто разные размеры. Этот файл, вроде открывается, и там куча инфы по ангельски. Пиздос объебос, буду терь грызть маны эти ебучие.
>>1964573 (OP) Аноны, нужно материалов, чтобы быстро заучить особенности sql и в частности постгреса. Синтаксис и как юзается знаю, а вот конкретные определения, например, форейн ключей, констрэйнтов итд нет. Надо чтоб особо не ебаться с длинными статьями или тем более книгами, подготовиться к собеседованию
>>2021600 >Судя по сайту https://system.data.sqlite.org/index.html/doc/trunk/www/index.wiki >там есть справка в формате CHM, как его открыть - вообще не ебу, у меня открывается окно, а там такое говно. Закинул этот CHM-файл прямо на диск, в корень - открылось. Он не открывался, потому что я его забросил в такие ебеня... >Диск:\папка1\папка2\папка2\...\папка100500\SQLite.NET.CHM что пути к html-файлам в архиве, уже просто - в память не лезли.
>>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 первых свиданий") - может иметь много жанров, но и один жанр ("боевик"), может быть для множества фильмов.
>>2028847 Понятие constraint немного шире, это любое условие на данные в таблице, не только уникальность. Foreign key, внезапно, тоже constraint. Вот так вот научитесь по своему гуглу.
Подскажите, почему второй вариант не верен? Разве что в таблице PC есть некоторые maker, которых нет в таблице product? */ Но это кажется невозможно по схеме бд
>>1964573 (OP) Если любую реляционную базу данных, со всеми её таблицами и взаимосвязями их, можно представить в виде одной единственной таблицы, то возможно ли эту таблицу, хранить обычом одномерном массиве объектов с разными типами, а пробегать, массив, как-то так: >for(var cell=0; cell<arr.length; cell+= NumberOfCellsPerLine ){ > //arr[cell]; arr[cell+1]; ...; arr[cell+(NumberOfCellsPerLine-1)]; //ячейки этой универсальной таблицы. >} И чтобы ебались они конём эти проприетарные субд копирастические?
>>2034035 Господи, опять ты. Если тебе нужна некрофилия с Windows XP, лучше возьми C++ и компилируй sqlite под него вместо ебли с Mono. Сделать-то можно, это как N-мерные массивы преобразуются в одномерные. Правда, твоя БД будет ощутимо тормозить уже на 1000 записях, занимаемое место будет быстро увеличиваться, малейший сбой при вводе-выводе приведёт БД в несогласованное состояние, схему придётся контроллировать программно, эффективное удаление и обновление записей будет невозможным, работа с БД будет однопоточной.
А как деплоить постгре? Раньше я использовал орм entity framework, которая сама из модели создавала таблицы, имела миграции. На работе еще не сильно вникал в настройку бд, но там дакпак с мсскл. Но ведь дакпаки есть только под мсскл, как вообще управляют не мссскл базой данных? Или все тупо пишут самописные скрипты?
>>1964573 (OP) Блин, нихрена не понимаю, в чем смысл кавычек в sql query? Вот например запрос в mysql: SELECT "id" FROM "chattbale"
Кавычки есть. Но если такой же запрос сделать у меня в postgres то он ругается что "relation does not exist", работает только если их убрать. wtf это такое?
>>2034479 Кроме всего прочего, кавычки делают имя регистрозависимым. Имена в БД, как правило, называются капсом, и если в кавычках написать не капсом, имя просто не найдётся.
Тоже недавно обосрался, назвал вьюху в оракле маленькими буквами, думал он автоматом перехуярит в капс как с таблицей, в итоге если название этой вьюхи было в запросе без кавычек, запрос падал с ошибкой, пришлось дропать её и переделывать.
>>2034609 Сори, чел, никогда этой темой не интересовался и никогда даже на собесах не спрашивали про этот сертификат, хотя я именно по этому профилю и устраивался раньше. А нахуя тебе?
Аноны подскажите плз, кто то сталкивался с такой еботней как SharePoint? темка такая, на нем построена система бухгалтерии, и самому бухгалтеру не приходит уведомление что заказжик залил какой то документ на сервер( я честно сказать вообще не вдупляю что происходит, но устроился на работу с умным ебалом сказал что я технического типа человек и вот дали такое задание). Как альтернативу вообще может накидаете мне литературы для изучения этой файлообменной системы. Вообще с чего начинать что бы понять как устранить проблему.(Еще существует вариант что этот бухгалтер как то отключил уведомления банально сам этого не понял, но я пока что ебал туда идти и спрашивать у этих бдушных бабок). КАРОЧЕ АНОН СПАСАЙ
>>2036379 В БД нет хешировпния и авторизаций, она просто хранит данные, которые ты пришлёшь из приложения, прислать ты должен уже хешированный пароль. Читай про функцих bcrypt, в зависимости от языка реализации могут быть разные, но суть в том, что она вычимлит хеш пароля, пришежшего из формы, хеш ты сохраняешь в БД, а затем, когда пользователь вводит пароль при входе, получаешь хеш из БД и с помощью специальной функции для сравнения сравниваешь значение в БД и переданное пользователем.
Чет никак не пойму. Надо сохранить сущность, если в базе нет сущности с таким id, либо если сущность есть и выполняется какое-то условие. Как это все в один запрос впихнуть?
>>2040328 Сука, ты ебаный тупорылый даун, который не в состоянии читать простые предложения и извлекать из них смысл, во всех тредах что ли сидит? Пошел нахуй блядь, долбоеб.
>>2040948 In-memory там не самоцель, а для эмуляции в юнит-тестах обычной реляционной СУБД, чтобы подменить ораклы-постгресы >>2040846 Возможно, у тебя условия where тупо вычисляются в false.
>>1964573 (OP) Работаю с Elastic, закачал репозитарий с докером, который ставит Эластик, вроде все работает как надо, создаю индекс, данные сохраняются и находятся Но как только я останавливаю докер-контейнер и перезапускаю всё, данные обнуляются - созданного индекса больше нет и надо все делать по-новой. wtf?
>>2041968 у тебя данные все в контейнере, как только ты его останавливаешь все в пиздень схлопывается, и нихуя не остаётся, Тебе надо указать директорию для хранения файлов данных, т.е. всего того что должно остаться после закрытия контейнера. Покури доку, там опция котороя при запуске докера передаётся в контйенер, что-то типа храни данные бд в такой то папке за пределами контейнера.
Как понять, что нужно нормализовывать, а что нет? Или вообще всё нужно? Ну вот например мне нужно хранить не просто количество товаров в наличии, а количество товаров на каждую дату. Если это услуга какая-то мб. Я думал просто сделать таблицу, где будут дата, ид товара и количество. И складывать в неё все товары на все даты. Или нужно сделать ид даты, ид товара, количество? Просто как бы дата сама по себе уже как ид. Ну типа у меня не будет задачи изменить какую-то дату у всех товаров.
Сап, датабейсеры. Есть задача - с как можно меньшим количеством усилий написать интерфейс для субд на mysql. Нужно разделение прав доступа(администратор/клиент) и отчетность по типу количество продаж того или иного товара из базы данных за месяц. На чем это можно сделать эффективнее всего? Изначально думал на питоне написать, но быстро там не получится. Смотрел в сторону apex, но толковой инфы по нему в интернетах найти не смог.
Аноны, есть ли способ заполнить таблицу одним и тем же значением (единицей или нулем) без перечисления этого значения в values? У меня в таблице 70 столбцов, и это проблема
>>2042434 У меня 70 столбцов, которым надо присвоить значение 1. По умолчанию у меня они 0, и это мне тоже нужно. Выходит что-то типа: govno1 = 1, govno2 = 1, govno3 = 1 ... govno70 = 1 Еще могу сделать: INSERT INTO JEPA VALUES (1, 1, 1, 1 ... (64 раза) 1)
Другого варианта нет, получается? Нельзя как-то взять диапазон столбцов или что-то такое и заполнить его нулями без этой писанины?
>>2042618 Судя по тому что ты это согласовываешь с анонами, а не с маняархитектором, это твоя личная поделка, так что можешь идентификатор записи не ставить. Условие уникальности по товару и дате ебани и охуенно будет.
Аноны, помогите вэб-макаке кое что понять. Мне нужно помененять в базе данных даты со сдвигом по времени назад на 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 можно ткое реализовать? Нужно что то типа переменной меняющейся после обновления каждой строки.
Проходим в вузе «биг дату» вот уже два месяца. На позапрошлой неделе нам объясняли кафку, а на этой ELK stack, но я вот нихуя не понял, что мы делаем и зачем. Можете посоветовать что-нибудь по теме вводное, где объясняют общую методологию всего этого без привязки к какому-нибудь конкретному решению? А то гуглил книжки по биг дате, почти про каждую пишут, что там «вода».
>>2042659 Правильно ли я понимаю, что вместо 3 интервалов у тебя должно появиться 4? Если это просто таблица с интервалами времени, то дропни все нахуй и создай заново. А если у тебя есть какие-то данные, привязанные к этому интервалу времени, то откуда же ты высрешь данные для новых интервалов? И данные для старых интервалов станут некорректны.
>>2042776 А, не знал про такое, лел. Собственно я думал, что ид этой записи - это и есть как бы ссылка на уникальную комбинацию даты и количества. Я прост Джанго орм юзаю ещё.
>>2043086 п.с. не суть важна прикладная сторона, нужно именно передвинуть. Вообще диапазон всего этого движняка - месяц, а значит еще и каждый новый день должен начинаться с сдвига в 5. Чето мне думется без скрипта на ЯП это не решить.
>>2042414 Эффективней на веб приколхозить. Бахаешь веб приложение и всё. Говорят у лоровеля(пхп) очень удобный орм для sql.
>>2042427 SELECT INTO, сам селект можешь сгенерировать через какой-нибудь джоин на самого себя(cross apply\crossjoin)
>>2042659 Если уже существующие, тогда берешь таблицу календаря, с твоими временными промежутками и джоинишь к таблице фактов. Календарь генерируешь сам либо берешь готовый. >>2042666 Без привязки к решениям, это дым из пизды. Попробуй покурить книжку с кабанчиком из ОП поста. >>2042364 Нормализуются всякие справочники, в твоём случае ID товара. У тебя будет 2 таблицы, с фактами продаж и справочник товаров.
Ребята, хз где спрашивать, мож найдутся знатоки. База сцилла. почему при отключении нескольких нод 2 в локальном, 1 в удаленном, вначале все пашет как пахало по результаттам, но потом ноды не принимают на себя всю нагрузку и работают как будто в полсилы и сла не соблюдается, хотя ресурсы есть. Состав кластера 5+5 вм, два дц. После рестарта приложения и репейра нод сла по записи не достигается до того момента, когда все работало без укладывания нод.
Нужен совет, можно ли вообще нормально решить такую проблему.
Изначальные условия: Есть объявления. Пользователи могут добавлять объявления себе в закладки или в скрытые (отдельная табличка user_id, объявление_id, категория_id). Все хорошо.
Задача: На объявлениях у нас появляется некоторый признак, по которому мы можем сказать, что это дубли. А дубли мы хотим визуально (именно визуально) схлопывать, когда выводим список.
Проблема А: Мы не можем схлопывать на фронте, так как начинаются проблемы с пагинацией. И еще нам надо чтобы это работало очень быстро, поэтому нельзя делать трехэтажный запрос с группировкой. Тут мне кажется можно попытаться решить добавив специальную группирующую сущность или фейковую запись в саму таблицу объявлений, которая будет родительской. И соответственно в выборке будут участвовать родители ИЛИ объявления без родительской сущности. Звучит кривовато, но можно попробовать.
Проблема Б: Нужно при этом еще уметь отфильтровывать по пользовательской категории (закладка, скрыто). То есть получается, что когда мы видим группирующую запись, надо еще знать входит ли какое-то из объявлений под ней в категорию для конкретного пользователя. Опять же, если делать через гурппировку, то запрос становится тяжелым. И вот тут у меня уже нет идей, что можно сделать.
Короче, подскажите, может есть какой-то рецепт для таких задач? Или может быть можно выбрать другой интрумент (не реляционку), в котором это хорошо решается?
Аноны, помогите. Хочу сделать базу по витаминкам, нужно посчитать уровень веществ по разным препаратам. Получились такие таблицы:
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
Насколько это корректно, городить такой огород? База в принципе не важна, я планирую делать на sqlite, но из астрала мне подсказывают, что я насосусь хуйцов и пока не поздно, надо взять что-то модное и молодежное, куда можно срать сразу json / arrays.
Еще момент: по большому счету мне надо просто забить базу, а потом из своих скриптов это мучать. Похуй в каком виде. Для забивания хотел сделать морду, чтобы начинал писать "Biope", а оно выкидывало подсказку-автозаполнение "Vitamin B7 (Biopeiderm)", а то я наделаю сам кучу ошибок. Можно конечно всю логику самому завелосипедить, но: 1. Наверняка есть какой-то паттерн на этот случай 2. Может быть даже есть готовый тул, чтобы свой пхпадмин не писать 3. Если же писать все равно самому, то как логически подружить поле "вещество" с по сути отдельной структурой "синонимы"? Т.е. я должен ввести именно "вещество", но при этом осуществлять поиск в том числе по "синонимы вещества". У меня это в голове плохо укладывается
>>2050160 Спасибо, ты прав. Непонятно о чем я думал.
А с поиском, я так понимаю, надо делать отдельную сущность "индексатор", и при индексации таблички "вещества" надо как-то в нее включать и ссылающуюся на нее табличку "синонимы". Ну и уже рисовать виджет для поля "вещества", а индексатор должен будет искать везде. Есть что-то, что можно почитать на эту тему? А то я явно изобретаю что-то готовое.
Подскажите, можно ли как-то при группировке выбирать любое значение в постгресе? Типа SELECT some(title) -- похуй какой, любой существующий сойдет FROM projects GROUP BY department_id
Понятно, что можно взять min/max. Но зачем лишняя сортировка, если похуй.