Это копия, сохраненная 28 июля 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Здесь мы:
- Негодуем, почему шапка - говно, и предлагаем коллективному ОПу идеи, как её улучшить.
- Разбираемся, почему PostgreSQL - не Oracle
- Пытаемся понять, зачем нужен Тырпрайс, если есть бесплатный опенсурс
- Обсуждаем, какие новые тенденции хранения данных появляются в современном цифровом обеществе
- Решаем всем тредом лабы для заплутавших студентов и задачки с sql-ex для тех, у кого завтра ПЕРВОЕ собеседование
- Анализируем, как работает поиск вконтакте
- И просто хорошо проводим время, обсирая чужой код, не раскрывая, как писать правильно
Туториалы на русском для тех, кто не умеет гуглить, не может в английский и вообще готов жрать что угодно:
SQL:
- MySQL, Postgres, SQL Server: https://metanit.com/sql/
- Синтаксис SQL кратко: https://learnxinyminutes.com/docs/ru-ru/sql-ru/
- Плейлисты по разным СУБД: https://www.youtube.com/c/SQLDeveloperBI/playlists
- Тоже плейлист, сортировка хуёвая: https://www.youtube.com/watch?v=EHvzvwAv7RU&list=PLY7PmJJFH5nT-lbFKxfbp3rw5BBuq5Azo[РАСКРЫТЬ]
- https://www.youtube.com/c/SQLDeveloperBI
NoSQL:
- MongoDB: https://metanit.com/nosql/mongodb/
- Cassandra: https://proselyte.net/tutorials/cassandra/
На инглише:
SQL:
- https://www.w3schools.com/sql/
Литература:
- Прибыл Фейерштейн. Oracle PL/SQL. Для профессионалов - если уметь исказть, можно найти бесплатно без СМС и на русском.
- Алан Бьюли. Изучаем SQL. - про MySQL, тоже легко находится. Довольно старая, но базовые вещи не сильно меняются.
- К. Дж. Дейт. Введение в системы баз данных - талмуд на овер 1000 страниц.
- Томас Кайт. Oracle для профессионалов - тоже талмуд.
Задачки для оттачивания sql-скилов:
- https://www.sql-ex.ru
- http://sql-tutorial.ru/
- https://www.codewars.com/?language=sql
ETL, OLAP, DWH и другие умные слова:
- https://www.youtube.com/watch?v=WPZuzDJXs-Q&list=PLhhjwMYxzolhP29LSPPwORVQxJX5OjYix[РАСКРЫТЬ]
- OLAP DAX Power BI: https://www.youtube.com/playlist?list=PLhhjwMYxzolhXuySjLR2_n-xb6VvWnjju
Прочее:
- https://dbdb.io/
- https://db.cs.cmu.edu/
- https://www.youtube.com/channel/UCHnBsf2rH-K7pn09rb3qvkA/playlists
- Сравнение диалектов SQL: http://troels.arvin.dk/db/rdbms/
- Как БД работают изнутри: https://habr.com/ru/company/mailru/blog/266811/
FAQ:
Q: Нужно ли знать английский?
A: Да.
Q: Что лучше, SQL или NoSQL?
A: Как обычно, зависит от задач. Нужна любой ценой скорость - бери NoSQL, нужна согласованность данных - SQL. У всего свои плюсы и минусы, и в обозримом будущем ни один подход не заменит другой полностью.
Q: Вопросы с лабами и задачками
A: Смело спрашивай, с вероятностью больше 50% ответят, но могут и обоссать. на Дваче все твои друзья
Предыдущий тред тонет здесь: >>1869616 (OP) (OP)
Как файлы-то хранить, ммм?!
В hadoop
ВСЕ бекендеры должны знать базы данных. Иначе как эти самые данные хранить, в файлах с жсоном что ли?
Понял. Пару дней Кантора читаю, так что пока не в курсе дела.
А как вкатываться в базы данных? Допустим, я хочу научиться писать парсеры с помощью Ноды.
Посоветуйте что-нибудь по изучению PL/SQL, желательно от простого к сложному, начиная с уровня "полный даун". В любом виде - литература, видеоуроки, циклы статей. Попробовал начать с Прибыла, но там какой-то невнятный смазанный старт: то какая-то бесполезная хуита, то сразу такой уровень материала, что уже теряешься. Сложилось впечатление что он не совсем для новичков.
1. https://cstack.github.io/db_tutorial/ -- имхо маст рид (и маст код), челик объясняет с кодом как написать свой неполноценный клон sqllite, единственная проблема - серия статей слишком быстро заканчивается (собсна, дальше btree с фиксированной схемой автор не пошел)
2. DATABASE SYSTEMS The Complete Book -- охуенный справочник для теории любой глубины и на любую тему. Судя по тому, что пишут на реддите, так же является лучшим учебником по теме, но я не могу представить как это можно осилить блять.
3. Database Design and Implementation -- по сути очень схоже с первым линком, только пишется кастомная база и практически полноценная. Единственный минус (и критичный для меня) - используется жава и jdbc.
Если кто еще натыкался на схожий материал -- тоже поделитесь.
Так вот работаю на винде 10.
Прописываю команды
psql -f demo-small.sql -U postgres
psql -d demo -U postgres
База сама по себе работает, запросы обрабатывает. Но не могу менять некоторые таблицы, выдает ошибку, что Name не является таблицей. Хотя через команду \d Name можно глянуть поля и через селект инфу.
И после закрытия базы данных и перегрузки пк все изменения проделанные с базой не сохраняются.
Ну например
ALTER TABLE airports
ALTER COLUMN longitude SET DATA TYPE numeric( 5,2 ),
ALTER COLUMN latitude SET DATA TYPE numeric( 5,2 );
ОШИБКА: "airports" - не таблиця, складений тип или внешняя таблица
В самой базе есть 13 таблиц, добавлял новые и меняет некоторые. А некоторые не хочет менять. Ну и не сохранят прогресс после закрытия. Добавлял 14 таблицу. Если просто закрыть консоль проблем нет, если перегрузить комп и заново прописать команды, то прогресс пропадет. Я
Погуглил и понял в чем проблема у тебя.
Короче, я не знаю почему, но у Моргунова неправильно описано как пользоваться демонстрационной бд. Я хз почему. Пиши вот эти команды.
$ sudo su - postgres
$ wget https://edu.postgrespro.ru/demo-small.zip
$ zcat demo-small.zip | psql
Затем логинься через
$ sudo -u postgres psql
\d demo
Это я так понял команды линукса. 1 для установки? 2 качает базу данных? 3 розархивовывает ее?
У него команды для винды в книги, они работают. В саму базу данных загружает и можно юзать ее. Но хз как будто она битая или хз.
Если я поставлю сигвин или баш на винду они будут работать? Хотя я и так скачал ее и запускаю подобными командами.
На винде
psql -f demo-small.sql -U postgres
этой загружает базу
psql -d demo -U postgres
этой логиниться в базу.
Проверь права или попробуй название таблицы со схемой указывать. Вобще кончай дрочить консоль, поставь IDEdata grip мозга жида например
Или я что-то не так делаю?
t-sql, если что
>этой загружает базу
Судя по всему оно не загружает базу, а просто использует то что находит внутри sql-скрипта, и может загружает базу во внутренний кэш или сорт оф, потому ты и не можешь ничего изменять в ней.
Ладно, понял, что нужно заюзать GO перед созданием функции. Хоть и не понятно, а почему тогда 2 таблицы создать можно разом.
Пизжу, оно действительно представление, кек.
Начал неспешно вкатываться в бд, но не до конца понимаю что и как. Задача примерно следующая - создать нечто, куда можно будет вводить ассортимент пришедших ноутов, просматривать весь ассортимент и возможность распечатать гарантию. Что мне нужно для достижения этого?
То есть тебе нужен интерфейс пользователя. Можешь сделать в виде простенького сайта, для этого нужно знать html/css (можно обойтись без JS) и какой-нибудь язык для бекенда с веб-фреймворком для него. Ну или в зависимости от требований в виде десктопной программы, там либо C++/Qt, либо C#, либо JS/Electron. И уже оттуда вызывай SQL-запросы.
Решил угореть по хардкору и вкатится в суперБД Access. Посоветуйте годной литературы, чтобы я стал офисным Б-гом данных? Уже приобрел и поставил на полку "Системы баз данных. Полный курс", но чот приуныл от толщины мануала и поставил его пока на полку.
Спасибо.
Подскажи, за пару недель изучения можно написать программу, чтобы она работала и что стоит выбрать из предложенного тобой? Или же тут дело вкуса?
В том-то и дело, что я сейчас буквально пальцем в небо тыкаю.
С html/css немного знаком, а с остальным - нет. Хотел бы попробовать десктопную программу оформить, но во времени я ограничен немного. Если есть шанс начать учить язык и на нем уже написать программу, то я бы выбрал язык.
Ну просто ты с нестандартной позиции танцуешь. Есть абстрактная цель - тебе надо ее решить. Обычно либо конкретная цель, либо конкретный инструмент. Просто в базу потыкать можно и без ЯП. Если тебе надо десктоп - копай в сторону плюсов. Если веб без задротства - жс или пых. Если прям сервер написать хочешь - шарп и джава. В общем choose you fighter. Нужно сначала понять чем заниматься хочешь.
он хочет курсовую\дипломную написать
я поставил другую версию
alter user postgres set password '123'
Шапка пизже предыдущей, можешь не переделывать
Записывать куда-нить ID на котором остановился, потом натравливаешь процедуру которая апдейтит кусками и обновляет ID по завершению.
Ты тралишь? Подними докер, а в нем постгре
спасибо, почитаю подробнее про них. На первый взгляд Cassandra понравилась
> нужна масштабируемость как в nosql
> пугает что в nosql не сэкономили байты
> якобы в sql байты сэкономили
В файловой системе.
А зачем? Если у тебя нет идей что можно сделать принципиально лучше, зачем делать клоны того что уже есть?
Все, у кого такие идеи были, сначала писали свои недоклоны, чтобы хотя бы разобраться в разработке СУБД на практике, инфа сотка.
Как по мне, достаточно просто почитать про то как оно устроено в существующих СУБД. Писать своё очень долго. Ну разве что какое-нибудь keyvalue можно асилить. Там просто нет серебряной пули для всего, джойны будут тормозить, дедлоки будут случаться, транзакции будут не до конца честными, репликация будет упираться в CAP/PACELC-теоремы.
Ну попробуй, я ж не против.
>>1970398
Я писал в предыдущем треде, что у меня скоро будет очень базоориентированный проект (мб придется что-то существующее патчить для лучшего перфоманса), а про бд я знаю примерно нихуя. Ну и соответственно, если ты хочешь в чем-то разобраться -- лучше всего это написать. Оно офк не будет каким-то продакшн реди, но как альтернатива какому-нибудь BusTub от CMU -- самое то. Ну и плюс мне сейчас нехуй делать, а базы данных - одно из самых слабых моих сторон, будет полезно подкачать
Для начала нужно понять какие задачи твоя БД решает. Хранятся ли данные на диске или только в памяти? Если на диске, то можно ли рассчитывать что COMMIT спасает не просто от креша/остановки приложения, а от выключения света? Есть ли мультиклиентность? По какому принципу хранятся данные: реляционные кортежи, вертикальные столбцы, таймсериес, документы как в монге, графы, простой keyvalue? Под какие паттерны использования будешь затачивать? Что важнее, консистентность или скорость?
Ты как настоящий дегенерт мыслишь - не читал ни одной книги, но зато всем рассказывает что хочет написать свою.
Загуглил "sqlite gui", куча тулз, но сам не юзал. Да и небось можно dbeaver/datagrip/etc настроить.
sqlite это просто либа. Также официально поставляеться соснольный клиент.
А так никто не мешает кому угодно написать сторонний клиент, хоть веб, хоть невеб. Но он там и нахуй не нужон.
Есть пикрил структура таблиц. Мне нужно получить все email'ы пользователей и номера из таблицы "значения полей", чтобы эти данные выводились в одну строку, типа [почта | номер]. Каждое значение поля хранится отдельной записью.
Например, есть элемент, его значения полей выглядят так: element_id, field_id, value. В значениях полей есть номер и ид пользователя.
Мне нужно как-то найти элементы, понять к какому пользователю они относятся, взять email этого пользователя и номер из полей элемента.
Наверное, делается это через джоины, но я в этом не силён.
Пролог-программу можно рассматривать как реляционную базу данных, т.е. описание некоторого множества отношений. Описание отношений присутствует либо в явном виде (факты), либо в неявном виде (правила).
Встроенные предикаты дают возможность корректировать эту базу данных (БД) в процессе выполнения программы. Это делается:
1)добавлением к программе (в процессе вычислений) новых фактов;
2) вычеркиванием из нее уже существующих фактов.
> Почему не юзают СУБД на основе Prolog?
Потому что никаких реальных преимуществ по сравнению с реляционными БД в этом нет, а если и есть, то только для решения узких задач. Учёт в виде таблиц появился задолго до появления реляционных БД, и на практике его достаточно почти всегда.
> Пролог-программу можно рассматривать как реляционную базу данных, т.е. описание некоторого множества отношений
В реляционных БД под реляционностью понимают именно таблицы, а не какие-то абстрактные взаимосвязи. Так-то "отношения" описывает любые произвольные структуры данных, но есть устоявшаяся терминология.
> либо в неявном виде (правила)
Мир уже пришёл к тому, что хранить бизнес-логику в БД - плохая идея. Есть "базы знаний", где хранятся факты и правила вывода, но это в конечном итоге надстройки над обычными БД.
Можно ли писать команды так, чтобы они одинаково подходили и к MySQL и к PostgreSQL? Или синтаксис совсем несовместим?
Вот живой пример:
MySQL
ROUND((price / $coefficient),2) AS price
PostgreSQL
ROUND((price::numeric / $coefficient),2) AS price
Если у постргеса не указать, что округляемое - нумерик, то будет ругаться и вернёт ошибку. А в майскул такую конструкцию не завезли, он просто округляет. Это можно подружить как-то?
Просто, везде говорят, мол, у нас тут круто всё, можно в конфиге фреймворка поменять используемую базу и всё будет норм. А когда меняешь - оказывается, что нихренашеньки.
Разные SQL-ы отличаются настолько, что никакими конфигами к одному виду не привести, и либо не пишешь запросы сам и генерируешь через ORM, либо никак.
Такое обычно через orm делают, и только в самых простых случаях обходятся без костылей.
Если использовать поменьше функций может и ничего не придется менять, зависит от сложности запроса. Вместо округления например можно кастить в интеджер или использовать свой костыль
>>1974416
>>1974442
У меня сейчас сайт на ларавеле. Есть таблица продуктов, для которых в отдельном поле указана цена в евро. Пользователь сайта устанавливает сам, в какой валюте ему нужно показывать. Сейчас в контроллере прописана команда запроса к модели с MySQL синтаксисом команды. Как это засунуть в саму модель, не знаю. А просто запрашивать модель и потом в контроллере пересчитывать нельзя, потому что по MVC логике нужно усраться, но передвинуть перевод цен в модель.
В принципе, можно, допустим, брать цифру, делить на коэффициент, тут же умножать на 100 и округля... опять приходим к тому, что округление и преобразование типов оформлено по-разному.
ХЗ гугль говорит что round() можно использовать и без второго аргумента, да и cast() должен быть одинаковым. Плюс ты можешь не использовать стандартные функции округление, а написать своё через if например.
> MVC
Пчел, если ты в контроллере ебашишь SQL запросы то твоему MVC уже пiзда. В построеном по MVC приложении слой моделей самый жирный (если конечно у тебя там нет какого-то кромешного пиздеца в разметке фронта). Если ты хочешь обойтись базой данных заместо модели, то тогда тебе нужно переносить бизнес логику в базу данных. Тоесть ебашить процедуры/сабрутины. Из контроллера ты вызываешь процедуру которая возвращает цену. А уже в каждой базе своя процедура.
>твоему MVC уже пiзда
В контроллере вызов метода из репозитория:
$paginator = $this->indexRepository->getWithPaginate(9, $selectedCategory, $currentExchangeRate, $cartId);
В репозитории indexRepository проверяем, выбрал пользователь категорию товаров или нет. Ну и обращаемся к модели, подставив в неё SQL-команду для перевода прайса в нужную валюту прямо при запросе. Я не знаю, это считается, что я работаю с базой из контроллера, или всё же нет?
public function getWithPaginate($perPage, $selected, $exchangeRate, $cartId)
{
#If a category is specified and it is NOT root, then the category is checked
if ($selected <= 1) {
$checkType = '<>';
$selected = 0;
} else {
$checkType = '=';
}
#Get data
$results = $this
->startConditions()
->select('id', 'title', 'slug', 'category_id', 'description', 'image_url',
\DB::raw("ROUND((price::numeric / $exchangeRate),2) AS price"))
->where('is_published', 1)
->where('category_id', $checkType, $selected)
->orderBy('id', 'ASC')
->with([
'category:id,title',//we will refer to the category relation
'cartItem' => function ($query) use ($cartId) {
$query->where('cart_id', $cartId)->select(['product_id', 'quantity']);
}
])
->paginate($perPage);
return $results;
}
Сама модель:
namespace App\Models;
use Illuminate\Database\Eloquent\SoftDeletes;
class Product extends BaseModel
{
use SoftDeletes;
protected $fillable = [
'title',
'slug',
'category_id',
'description',
'price',
'image_url',
'is_published'
];
public function category()
{
return $this->belongsTo(Category::class);
}
public function cartItem()
{
return $this->hasOne(CartItem::class);
}
}
>твоему MVC уже пiзда
В контроллере вызов метода из репозитория:
$paginator = $this->indexRepository->getWithPaginate(9, $selectedCategory, $currentExchangeRate, $cartId);
В репозитории indexRepository проверяем, выбрал пользователь категорию товаров или нет. Ну и обращаемся к модели, подставив в неё SQL-команду для перевода прайса в нужную валюту прямо при запросе. Я не знаю, это считается, что я работаю с базой из контроллера, или всё же нет?
public function getWithPaginate($perPage, $selected, $exchangeRate, $cartId)
{
#If a category is specified and it is NOT root, then the category is checked
if ($selected <= 1) {
$checkType = '<>';
$selected = 0;
} else {
$checkType = '=';
}
#Get data
$results = $this
->startConditions()
->select('id', 'title', 'slug', 'category_id', 'description', 'image_url',
\DB::raw("ROUND((price::numeric / $exchangeRate),2) AS price"))
->where('is_published', 1)
->where('category_id', $checkType, $selected)
->orderBy('id', 'ASC')
->with([
'category:id,title',//we will refer to the category relation
'cartItem' => function ($query) use ($cartId) {
$query->where('cart_id', $cartId)->select(['product_id', 'quantity']);
}
])
->paginate($perPage);
return $results;
}
Сама модель:
namespace App\Models;
use Illuminate\Database\Eloquent\SoftDeletes;
class Product extends BaseModel
{
use SoftDeletes;
protected $fillable = [
'title',
'slug',
'category_id',
'description',
'price',
'image_url',
'is_published'
];
public function category()
{
return $this->belongsTo(Category::class);
}
public function cartItem()
{
return $this->hasOne(CartItem::class);
}
}
Есть БД из 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 вроде не засунешь. Да и группировка по магазинам это не то.
Ну, вроде как частично сделал:
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
Неясно только, как реализовать
>(если таких несколько, то отсортировать по имени центра в алфавитном порядке)
БДач, подскажи.
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
>БДач, подскажи.
Понял, что спросил хуйню. Спрошу корректней:
Нужно объединить наименования центров имеющих одинаковый максимум mark.name в одну ячейку отсортированным перечислением.
Все сложно сказать потому что это же не какие-то стандарты, а так придумали хуйню. В твоем случае все еще и хуже, потому что у тебя очевидный конфликт апи двух субд, поэтому все выглядит донельзя тупо. Но задача форматировать данные под бизнес требования (что похоже на твои проблемы) бывает. К примеру у меня был шиз заказчик который хотел чтобы часть цен товаров выводилась с указанием центов, а часть просто целым числом. И при этом чтобы можно было менять вид отображения для каждого товара. В соответсвии с MVC это должна делать модель. Она вытаскивает из бд сырые данные. Преобразует их в соотвествии с требованиями контроллера или бизнес-логики. И отдает их контроллеру. У тебя в общем все ок. Контроллер вызывает метод репозитория, который уже является слоем модели. И там гдет-то у тебя должна формироваться цена. Возможно это действительно какая-то сабрутина под конкретную субд, возможно это метод екземпляра конкретного класса который возвращает нужным образом округленную цену (это ORM подход).
Что-то не я понимаю большой разницы. Допустим у меня есть два столбца: один 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%'
)
Оконные выражения
Регулярные выражения, есть во всех приличных БД, синтаксис зависит от конкретной.
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
>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, внутренности конкретных бд, администрирование?
>>1975332
Ну вроде допетрил, хотя, наверное, коряво вышло:
select Mark, string_agg(convert(nvarchar(max), Shop), ',') within group (order by Shop asc) as MaxShop from
(
select mark.name as Mark from
stock inner join mark on stock.markID = mark.id
group by mark.name having sum(stock.quantity) > 10
) as s1 inner join
(
select shop.name as Shop, mark.name, dense_rank() over (partition by stock.markID order by stock.quantity desc) as rnk from
stock inner join mark on stock.markID = mark.id inner join shop on stock.shopID = shop.id
) as s2 on s1.Mark = s2.name
where s2.rnk = 1
group by Mark
>>1976445
Так у тебя же два запроса или я чего-то совсем не понимаю что не мудренно?
Ну, ясное дело, что джоинить по name вместо id - тухлый план.
>два запроса
Это запрос к запросу, макаба звездочки спизила
select t.[зведочка],
fitst_value(shopID) over(partition by markID order by sm desc, shopID) -- на самом деле вместо shopID его наименование, которое нужно было приджойнить в запросе, но мне лень таким заниматься
from
(
>select s.[звездочка],
>sum(quantity) over(partition by shopID,markID) sm
>from stock s
) t
where sm > 10
Если в таблице ровно одна строка для каждой комбинации марки и магазина, то подзапрос выделенный гринтекстом не нужен и вместо этого можно взять сразу таблицу stock, тогда получается аккурат в один запрос с моим гениальным использованием функции first_value()
select t.[зведочка],
fitst_value(shopID) over(partition by markID order by quantity desc, shopID)
from stock s
where quantity> 10
Ты точно сделал какую-то хуйню, потому что тебе не нужно делать string_agg для наименования магазина, тебе явно сказано, что если у магазинов количество одинаковое, нужно вывести первый по алфавиту.
>Без опыта реально вкатиться каким-то скуль/бд девелопером
Ну если тебе меньше 25, то да, а дальше уже начнутся вопросы, а чем ты занимался все это время. Ну и будешь тупым как вот этот персонаж >>1976912
С бекенда туда не перекатываются, разработчики бд это отдельная каста.
>В резюме только на опыт смотрят, портфолио с работами же не сделаешь
Да, портфолио тут нет, дают задачи на sql, спрашиваю про устройство конкретной бд, если работа сложнее джуновской.
>Может лучше пытаться аналитиком?
Да, выучил sql и в путь. Сразу в разрабы сложнее, потому что это хоть и хуевенькая, но все-таки разработка.
>внутренности конкретных бд, администрирование?
А нахуй тебе оно надо вообще? Укатываются во всякие питоны и бигдаты, точно не в администрирование. Ну и у БД-разраба и БД-админа совсем разный функционал, админу можно и sql не знать дальше простых запросов, но при этом быть замечательным админом. Туда скорее всякие сисадмины/эникеи перекатываются.
>тебе явно сказано, что если у магазинов количество одинаковое, нужно вывести первый по алфавиту.
rly?
> (если таких несколько, то отсортировать по имени центра в алфавитном порядке)
Я так понял, что если есть несколько магазинов с максимумом одинаковой марки, то нужно вывести все. Вот и думал как их вывести в одной строке.
Да пока что 99.9% вакансий разраба бд это мидлы с 3 годами опыта и мне естественно не отвечают. Вот и рассматриваю разные варианты через которые потом можно будет перекатиться в разраба бд. Мб через аналитика, может через админа или бекенд. Правда туда тоже время нужно чтобы вкатиться. Всякие питоны и дата сайенс не рассматриваю там вообще год-два дрочиться придется.
Ага, а вот в БД селекты научился писать и сразу попрет?! Это не так работает, тут тоже нужно жизнь положить, чтобы стать профессионалом. Но профессионалом становишься не от дрочки курсов, а от реальных задач. Вообще, я не знаю откуда БД-девелоперы берутся, это вообще не хайповая тема сейчас, так что всякие стажировки и тд можно не рассматривать.
Ты отличай chad db developer от virgin sql analyst. На второго может пойти любая мартышка, прошедшая sqlex, а разработчик это разработчик, тут еще учиться надо.
Еще гугли по конкретным базенкам, там же так обычно пишут, "Oracle Developer, MS SQL Developer". По вакансии "DB Deveoper" нужны скорее всего специалисты по всем БД сразу как я и вакашки там с прицелом на проектирование, архитектуру, выбор решений, а не просто загрузить табличку из точки А в точку Б.
По-моему, ДБ-девелоперы это древний тренд вроде современных микросервисов, или что там ещё было. Все начали хуевертить всякую йобу прямо в базах, а потом расхуяривать обратно, как мода прошла.
Отчасти да, но на бек/фронт я хотя бы видел стажировки и вакансии джуна без опыта. Понятно что там по сотне откликов, но мб есть хоть какой-то шанс за счет портфолио вывезти.
>>1977162
Да понятно что я червь без реального опыта, и никакие курсы и книжки его не заменят. По конкретным бд смотрел, то же самое. Ну хз, буду наверно в бек вкатываться, там хоть скл пригодится.
Конечно, мое время проходит. Но с оракла крупные конторы еще долго не слезут, например, так что без работы не останусь.
Под клиентами ты имеешь ввиду клиентов, которые к БД обращаются? Если ты пишешь про веб-серверное приложение, то я что-то не могу понять, как timestamptz поможет возвращать на фронт время в разных часовых поясах.
Сколько опыта, сколько платят? Если не из ДС, можешь не отвечать, нерелевантно будет все равно.
Опыт 10 месяцев. Платят сейчас 60к, на старте было 35к. Но это меня уже повысили. Это в ДС.
А всякие матстатистика, теорвер, регрессионный анализ, сопутствующие приложения, python нинужны?
В postgres у таблицы employee есть 3 вида json-полей: fields, providedFields, optionalFields (хз зачем так сделали). В этих json-ах мне надо найти значение по ключу "preferences", оно может быть в каком-то одном поле, а может не быть ни в каком, как мне вытащить его оттуда чтобы не запускать 3 отдельных операции SELECT?
(вытаскивать его надо именно в таком приоритете: fields -> providedFields -> optionalFields; если значения нет то переходим к следующему полю)
В 2021 это мало даже для самого обоссанного джуна, я на такие деньги вкатывался в 2015
Ну вот, а сейчас джуны вкатываются на зп кассира пятерочки. То ли еще будет.
В чем проблема так сделать?
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
Python или любой другой язык полезен ("будет плюсом" как принято писать). Тервер и матстат лично мне на собесе нужны были на самом детском уровня. Эксель тоже.
>>1978289
А чего ты хочешь, зная только sql и не имея опыта? 100к с порога? Анон выше верно написал, что одно дело быть DBD, который знает хотя бы теорию БД, и совсем другое - sql-макакой, который вкатился после 50 задач на sql-ex (хотя я и теорию тоже вспоминал).
Я просто хочу за еду получать опыт.
Ну вот допустим прошел я материалы курсов от 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 лет опыта дбд и пытаться ему на хуй скакнуть?
По-моему, с таким набором можно искать работу полноценным DBD, если ты всё перечисленное освоил, конечно. Или аналитиком, или каким-нибудь ETL-разработчиком (но там своя специфика, насколько мне известно). А если у тебя ещё и диплом профильный есть, не важно шарага или нет, то это огромный буст тебе среди других вкатышей.
В общем, ясчитаю у тебя уже есть варианты, главное ищи и откликайся.
>допустим прошел
Так допустим или прошел? Я не верю, что нужно настолько хотеть вкатиться в БД, чтобы всё это изучать. На этом свет клином не сошелся. Почему именно это, если ты готов так много ресурсов потратить на вкат в айти? Обычно люди просто учат базовый SQL и ходят по собесам. Хотя мне кажется, что тебя по софт-скиллам отбракуют, ты какой-то ебанутый.
Ну тащемта помимо базового sql неплохо бы знать особенности конкретных диалектов/бд, обязательно транзакции мне кажется даже если не используют на собесе спросят. Если направления куда копать - BI\ETL\DWH либо Java\Python сплош9ь и рядом используют совместно с бд
или подскажите какой подход к организации данных можно применить. Вот условно прилетают данные по одному бизнес процессу из разных источников, надо их собрать вместе в новой модели. Если просто наваливать джоинами в одну сущность, в конечном итоге будет ли несогласованность данных, либо дупликаты, либо ещё какое-нибудь говно. Нужно сначала модель построить, что можно использовать помимо data vault подхода а у то у меня уж башка от этих всех сателитов взрывается?
А "чистый sql" это какой? Так-то вроде у Oracle есть регулярные выражения, может можно что-то через маску where phone like ... изобразить. Но я вот этот тупень >>1976912
поэтому ко мне доверия никакого.
>>1978436
Допустим, я захотел по-хардкору угореть по БД, с чего вообще имеет смысл начинать? Что читать? Просто быстрое гугление выдаёт совсем уж древнюю литературу (ясен пень, что реляционная и объектные модели придуманы миллион лет назад и едва ли что-то фундаментальное открылось после).
>А "чистый sql" это какой
Постгрес
Про "чистый sql" я говорил, подразумевая что можно написать скрипт на питоне, если просто на sql такое сделать нельзя / заебно
Тогда в чём проблема просто прогнать через регулярное выражение, убрав всё не нужное (ну и практически плохой совет, но на этапе разработки можно просто замутить маску, чтобы пропускало только нужный формат записи), не?
Мб замутить функцию, которая будет прогонять содержимое phone и вытаскивать, например, только цифры?
>Стандарт SQL требует, чтобы тип timestamp подразумевал timestamp without time zone
Нахуя? Сейчас же хранить без таймзоны антипаттерн.
Так там есть отдельный timestamp with timezone
Ну а так есть же всякие нюансы с переходом на летнее время или принятием полученного значения в общемировое. Ну то есть проще по-умолчанию считать что время указывает без часового пояса и потом его явно добавить, чем выяснить, что в конечном итоге время тебе показывает по Гринвичу (а ты на Аляске).
PGAdmin - глючное УГ, даже не показывает таблицы в базе.
Navicat - можно купить на торрентах, но только под винду
DataGrip - то же самое
Забил хер и написал скрипт на питоне...
https://hh.ru/vacancy/41469811?query=Vertica python
Кроме тебя тут никого нет?
Бамп вопросу. Зачем хранить дату в tz и при записи конвертировать её в UTC, если во время чтения она будет конвертирована обратно?
Кстати насчет локов:
>>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
И тд. есть для этого какая-то надстройка или костыль нужно изобретать?
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
И тд. есть для этого какая-то надстройка или костыль нужно изобретать?
А бля долблюсь, не то хотел ты, но вроде роу тоже это умеет. Или кросс аплай попробуй
Фантазию включи, чел.
ceil - функция для целочисленного деления, в других диалектах будет другая, на картинке оракл.
>ceil - функция для целочисленного деления
Извините, исправлюсь, это не совсем целочисленное деление, ceil возвращает для нецелого числа наибольшее целое.
Я бы написал сам костыль. Я просто спрашивал - есть ли над аналитическими функциями надстройка для таких случаев.
Варик есть - update from
postgres сам снимает все локи и тестовый запрос вместо 140 секунд выполнился за 1.2 секунды (!)
SELECT ID, iif(round(id/5,1)=0,1,round(id/5,1))*5
А в чём тут аналитика? В твоём выражение даже в соседнии строки заглядывать не нужно.
А разве можно удалять данные без лока?
Есть условная таблица:
Поле1 Поле2
1 4
2 5
3 1
4 1
Я хочу посчитать сколько например 1 было в каждом поле. Условно GROOUP BY NUM, COUNT(Поле1),COUNT(Поле2). Но у меня нет в исходной таблице этих 1-2-3, по которым надо группировать, они есть только в виде данных в ячейках, при том для групировки нужны учитывать данные из обоих ячеек, если в одной ячейки есть число 7, а в другой нет, то 7 должна присутствовать в итоговой агрегации.
Вообще тема здоровская, уже в головушки мыслишки роятся о том, как например сделать БД по результатам переписи 2002 и 2010 годов. Отдельно туда добавить сборники ОКТМО от Росстата. Потом задрочиться запросами через селект, вывести все муниципальные образования в которых проживают чеченцы за исключением муниципальных образований Чеченской республики. Вывести все муниципальные образования в которых русские в доле населения составляют менее 50%. А если к этой херне прикрепить какую-нибудь графическую оболочку, чтобы прямо на карте дублировались данные вообще была бы красота.
>костыль
Не костыль, а умное и изящное решение!
Нет никаких надстроек и быть не может, это слишком узкий кейс, заебешься каждый пердеж в параметры закладывать.
>А в чём тут аналитика
Аналитическая функция - это любая функция, результат которой зависит от других строк, а не только от строки, на которой она вызвана. В данном случае результат зависит от порядка по столбцу.
Умник ебучий.
Таблица огромная, от таких пассажей порвётся что-нибуь. Всегда стараюсь тзбегать юнионов без острой необходимости, тут не вроде как можно избежать
Union all - безобидная операция, она не делает сортировку.
Реальность такова, что ты не можешь сделать в одном запросе две независимых группировки по двум разным полям.
Можешь рассказать бизнес-смысл задачи? Есть шанс, что ее можно решить по-человечески.
>не можешь сделать в одном запросе две независимых группировки по двум разным полям
На самом деле можешь, используя конструкцию group by cube(), но это ёбка какая-то, сам гугли, как это работает.
Написал пикрил, но данные не обновляются в таблице до тех пор, пока я её не закрою. Можно как-то фиксить?
оказывается надо было опять делать селект и после через fetchall получать данные
Если бизнесово:
Мониторинг оборудования, нужно находить отрезки когда оборудование было недоступно\Была высокая задержка. Одна строчка что-то вроде Отправлен-Получен-Обработан. Условно оператор смотрит - у кофеварки разница во времени Отправлен-Получен больше 20 секунд, и таких случаев час было 20, значит коферка хуёвничает, её нужно чинить.
Практически:
Есть огромная таблица с несколькими временными отрезками(в одной строке несколько таймстэмпов), я хочу её схлопнуть, чтобы проще было хранить и делать запросы. Отрезки небольшие, от 1 секунды. Собирать планирую по Час-Ид-Количество-(каждого вида отрезков.). Но просто группировку сделать не могу, т.к. нет поля со всеми значениями. Distinct тоже не подходит, он сортирует. Думаю над тем чтобы просто генерировать своё поле, со значениями от 1 до 300 например, а всё что выше помечать как 300+.
Знаю, звучит как задача для NoSQL, но его нет под рукой.
Сложно, чел. Хранить несколько тамйштампов в одной строке - это нахуя а главное зачем?
Если бы у тебя просто была таблица ИД оборудования / Отправлен / Получен, то ты считаешь для каждой строчки разницу Получен - Отправлен, округляешь ее, например, до целых секунд в большую сторону, и делаешь group by по этому полю и по ИД оборудования, получаешь на выходе таблицу ИД оборудования, Длина интервала и количество таких интервалов.
Еслиб мишки были пчёлками...
У таблицы источника другой владелец. Могу предположить что так хранится потому-что строка - законченная операция, показывающая весь путь пакета, возможно для того чтобы сократить количество строк.
Первый раз делаю питон проект с базой данных.
веб страничка где ты получаешь инфу из базы и выводишь ее. и кнопка где ты заносишь инфу в базу.
Разве верно получать данные из бд напрямую при каждой загрузке страницы?
Как правильно это сделать?
Запилить кеширование. ОЗУ не резиновая, поэтому обычно его делают не для всего подряд, а для сравнительно небольших, но часто используемых данных. Как конкретно его запиливать, сильно зависит от языков и фреймворков, плюс юзают Redis и его аналоги.
Ну и не забывать создавать индексы в БД.
Обычно базы сами кешируют запросы
А если в одном столбце 7, а в другом 2, то и в подсчете 7 и и двоек плюс один?
Анон расскажи как вкатиться с ораклом в 200к, что надо уметь и учить.
И насколько реально юзая только pl sql получать 300к в секунду
Ага можно, я недавно такое же делал в оракле для тех. коментария через регулярку.
Если юзать pl sql, вообще красота, можно написать функцию, что будет тебе каждый номер править на удобоваримый
Как то так будет:
select
regexp_replace(regexp_replace(str,'[^[[:digit:]]]*'), '^(7|8)[\d]{10}')
from t
Где str название столбца в котором храниться "грязные" номера, и t соотвественно таблица с этим столбцом
Описание:
Regexp_replace маской из регулярки вытаскивает нужное из стринга.
Что бы получить номер я сначало оставляю в строке только цифры, а потом из полученного считываю 10 цифр после 8 или 7
Огроничения: сработает только для мобил в России
Ну и еще я эту хуйню не проверял, так что наверное где то накосячил
Ну агрегацию я планировал считать отдельно, по каждому столбцу.
>вкатиться с ораклом в 200к
Сразу на 200 не вкатываются, 200к-250к это зарплата оракловщика с 5 годами опыта разработки (именно разработки, а не SQL запросов)
>что надо уметь и учить
Можно почитать Тома Кайта, но он унылый как моя залупа, не осилил. Больше решает опыт, чем больше интересных ситуации в жизни встречал, тем проще. Это не та тема, где прошел курсы и поперло.
>И насколько реально юзая только pl sql получать 300к в секунду
Нереально. С голым ораклом 250к потолок, и только если ты действительно хорош. Поэтому я понимаю, что мое время проходит и нужно в экстренном порядке учить питон и перекатываться в дата-инженеры, если я не хочу через 5 лет оказаться под карьерной лестницей и дрочить легаси со старперами.
И в очередной раз спрашиваю: а нахуя вам вкатываться именно в бд?
>И в очередной раз спрашиваю: а нахуя вам вкатываться именно в бд?
Потому-что sql простой, как залупа
В свое время заебался собеседовать вкатывальщиков, которые думают так же.
Он очень сложный, особенно когда речь идет об оптимизации запросов, особенностях конкретной бд... Выучить базовый синтаксис SQL — дело не хитрое, но человеком от этого не станешь.
Спорное утверждение. Переформулирую, sql проще других языков программирования. Средняя вебмака должна быть умнее sql макаки.
Нет, не должна. Клепатель формочек — низшее существо. Вот туда и вкатывайтесь. А в такие благородные отрасли как разработка БД не надо лезть.
Веб-макака, угомонись. Ты рисуешь формочку, ты видишь, что она работает, и тебе поебать, что дальше. Разработка БД предполагает детальное понимание того, как работают процессы внутри БД, недостаточно перевести логику на язык SQL, нужно еще позаботиться о том, чтобы этот SQL был оптимален.
>По, теме, скажешь, что?
Нет, чел, я эксперт в одной области и очень поверхностно понимаю, как работает другая. Может быть, ты мне скажешь, почему считаешь клепание форм более интеллектуальной деятельностью, чем разработку БД?
Алё, я по твоей области и спрашиваю, пару кейсов экспертных которые делают дб-макакинг невьебенно сложным опиши.
В общих чертах уже ответил, приводить конкретные примеры я не буду, потому что без должной экспертизы их все равно невозможно понять. Поэтому я и спросил тебя, как должно выглядеть описание сложности конкретной профессии, чтобы непосвященный человек сказал "ух бля как сложно".
Короче, я устал с тобой разговаривать, пиздуй работать.
Этот эксперт порвался, несите следующего.
веб мака будет умней, потому-что конкуренция выше, стек технологий больше. Сейчас средней руки ньюфаг для вката в макакинг форточек должен уметь докеры,юникс, sql, и ещё кучу говен, в то время как бд-дауны до сих пор палкой по своему ораклу стучат
Если ты такой умный, то почему такой бедный?
А что плохого в легаси? Это типа как пару лет назад было несколько статеек, что есть много программ на забытом и древнем языке кобол, которые до сих пор надо поддерживать, а деды-колдуны начали умирать. Это же как слесарь на заводе. Сидишь в сласарке и по звуку закрытыми глазами определяешь, что сломалось и где надо подтянуть.
Мне кажется это прямо золотая жила. Легко в такую тему влезть? Буду платить в два раза больше чем по региону?
Оракл еще долго не умрет, так что не получится стать последним человеком на свете, который знает оракл, и грести миллионы.
Ну и в целом ничего хорошего в легаси нет. Это очень маловероятная ситуация, когда ты сидишь на легаси и изредка что-то правишь, скорее всего тебе придется активно дорабатывать чужой код, пытаться впихнуть свои доработки поверх чужих и стараться, чтобы ничего не поломалось... А даже если ничего не править, никто не даст кадру просто так сидеть без дела, будут запрягать всякой другой хуйней, которая имеет мало отношения к твоим непосредственным обязанностям.
Ну и психологически тяжело будет, никакие деньги не спасут, когда поймешь, что заебался.
Не, ну править-то можно по разному.
Одно дело когда ты ломаешь мозг придумывая архитектуру нового проекта.
Другое дело когда ты после недельной переписки добавляешь один if и потом еще неделю гоняешь тесты.
Нихуя тебя опустили, это ж каким надо быть тупым, что бы тебя веб-макака опустила...
Долго же ты обтекал, эксперт, и всё равно высрал какй-то бред.
Давай по пунктам:
1) Опять примеры максимально общие. Я неебу что ты этим хотел сказать. Или для тебя чтение, это задача требующая экспертного знания?
Ууу, эээ, ты компьютер видел? Знаешь как работает? Инструкцию по эксплуатации читал?
2) AS/400, судя по гуглу какое-то серверное говно мамонта. Я бы ещё сильно подумал относить это дб-макакингу или системному администрированию.
3) Инструкции по эксплуатации Оракл. Дед тебе сколько лет? Ты таблетки принял? Ни разу не слышал чтоб так называли мануалы люди моложе 40. Ну читал немного и что дальше? Опять же ты примеров никаких не приводишь, так что хуй тебя разберешь. Единственное что могу сказать, сракл не сложный, он неудобный. Как условный бейсик на фоне других языков , тот же sql и сам не самый новый язык, но даже на фоне других диалектов оракл со своей дрисней умудрился всех обскакать. Например - ебанутая работа с датами. Сложно? Нет. Неудобно? Пиздец как, хуже нельзя было придумать.
А самое главное твоя хуета не развивается. Как конвертили дату через сраку 30 лет назад, так и щас делают, а за это время уже все летают на мэп-редьюсах, и подрачивают кэш в редисах, а считают спарками. И условная вебмакака 2021 должна знать больше чем аналогичная макака из 2020, а ты ораклисты так и сидят в своей пещере.
>эксперт
Это не я, я тебе больше не отвечал, потому что с твоим манямиром бесполезно спорить.
лучше второй вариант
Анон, подскажи, кроме Кайта можно что-то ещё почитать по ораклу, чтобы кашу в голове разгрести и получить какое-то структурированное представление о синтаксисе, пакетах и прочих инструментах? А то взяли на работу разрабом, большую часть логики пишу в SQL или PL/SQL, но вижу, что базы не хватает. А Кайт ещё вроде не по уровню мне. Или только доки курить?
Кайт по уровню, там ничего сложного, просто нудно. Но Кайт это скорее про понимание того, как оракел внутри работает, процессы, файлы, вся хуйня. Тебе, как я понимаю, нужен именно PL/SQL - под это дело свой талмуд есть - Фейерштейн, который я тоже не читал.
Лучше нагугли какой-нибудь список вопросов на оракл сеньера и иди по нему, а то заебешься.
Ну и в треде спрашивай, не стесняйся.
Типы таблиц, типы индексов, виды соединения таблиц, виды доступа к данным, уровни изоляции транзакций, хинты, регулярные выражения.
Сеньера еще могут попросить пояснить за каждый ответ и сказать, что в какой ситуации лучше. SQL еще всякие надо писать, с аналитическими функциями и тп.
>виды доступа к данным.
Под этим что подразумевается?
>хинты
И вот под этим
>Типы таблиц
Временные/обычные?
>виды доступа к данным.
С точки зрения оптимизатора: full scan, несколько разных index scan
>хинты
Подсказки оптимизатору (соединять в определенном порядке, использовать определенне индексы и тд, тут конечно лучше погуглить)
>Типы таблиц
>Временные/обычные?
Виноват, имел в виду способы организации таблиц: heap, index-organized, cluster
10м не так чтобы сильно много, так что да можно. Или кэшыруц рещультат в редисе.
Недавно читал статью по денормализации. Там было что-то подобное. Так вот там предлагали фото вынести в другую таблицу. Для статистики они тебе не нужны, а запрос это ускорит.
Клиент Ид_Заказа В Клиент_1 Ид1,Ид2,Ид3?
Гугли group concatenation для своей базенки.
Задача вывести имена работников за которыми привязано больше 2 пк. К сожалению идей нет как делать это задачу. Понимаю, что надо как-то через джоины, но дальше хз. Помогите кому не впадлу)
Как писать модульные тесты для SQL?
Спасибо!
Все это в PostgreSQL 12.
В гугле не забанили, но на все мои запросы возвращается только информация о том как наложить LOCK, а мне такое не надо, это я и так делаю.
А. ну и лок - ACCESS SHARE
Лок не должен включаться, если ты принудительно его не включаешь. Где ты обосрался?
Хуй знает.
Запрос идет как: ORM -> PGBouncer(session mode) -> PostgreSQL.
На на выполнение в БД попадает все без криминала и подливы - https://pastebin.com/cBnVG6Hh
Пикрил происходит при большом кол-ве запросов.
Этот тип блокировки в постгре - не эксклюзивный. Они никому не мешает. Он вызывается селектом. Относись к этому как к инфе о том, что кто-то в данный момент читает эту таблицу.
То есть если сразу N селектов захотят забрать одни и те же данные, то эта блокировка никак никому не помешает?
Бля, если так, то хули тогда этот запрос такой медленный, по 25-35мс на РДСе выполняется. БД пустая считай.
Анончики, туплю.
Надо сделать регекс для LIKE (или NOT LIKE), чтобы выбрать все description, где есть кириллица
Подскажите решение
Макакба сожрала звездочки после точек
Нужно три таблицы:
1)Справочник номеров
2)Справочник арендаторов(опционально)
3)Таблица бронь (если решил п2, тут же ИД арендатора):
ИД_Номера - НачалоАренды - КонецАренды
Потом делаешь запрос в бронь и смотришь какие из номер сейчас заняты.
Можно это конечно сделать и всё в одной таблице, но за такое дед препод твоё щёку для своего хуйца арендует, потому-что денормализовано
Или с ехидной ёбой спросить про нормальные формы
Ну у меня типа такого сейчас в общем. Но что с номерами и ценами пока хз. Ты типа предлагаешь просто при каждом бронировании пробегаться по всем броням и считать, сколько попадают в этот диапазон и если их больше, чем количество номеров, то значит все занято? Но вдруг там нужно будет зачем-то заблокировать номер например? Ну или в общем поставить количество на определенные даты вручную?
По схеме:
У тебя букинг уже со всем говном, так не рисуют, рисуют просто с ключами иди переделывай.
Рисуй звезду:
В центре таблица фактов, что я описал, он по ключами соединена со справочниками. В центральной таблице НЕ ХРАНИМ всё гавнизе, только ключи на справочники.
Строчка центральной выглядит примерно так:
УниальныйИД-ИДКомнаты-ИдКлиента-ВремяНачалоАренды-ВремяКонцаАренды. (ёбаный рот никто же на 1 день не арендует)
Потом делаешь представление, в котором на текущую дату проверяешь свободные номера. Можно вобще просто заджоинить левым джоином к справочнику номеров, таблицу с фактами по диапазону дат. Где заджоинится - заняты, где нуль - свободны. Ну если две даты там сначла нужно будет посчитать попадает ли текущая дата в диапазон, но думаю там можно придумать хитрый хинт с datediff, мол если отрицательное, пошiв нахуй.
А-я же, строчные буквы после заглавных идут в кодировке.
И вообще есть хуиллион веб-сайтов для тестирования регулярок.
Drawsql сайт нашел в гугле.
>>1995793
Ну я понимаю, у меня там и есть внешние ключи в ней. Просто есть клиент в бд, а есть информация, которая приходит с сайта или из какого-то другого источника и там может быть какая-то рандомная инфа, типа написано латиницей или с ошибкой или не полностью. А в таблице клиенты уже точная информация, которая при заезде администратором из документа берется. Поэтому когда бронь делается сначала там данные, которые ввел пользователь при бронировании, а если он приедет и его информацию внесут в архив, то тогда она будет браться из таблицы клиентов.
Тред, про базы данных и не слово про Google BigQuery.
Не работает.
Возвращает одну строчку, которая не особо релевантна запросу
(пик1)
А на пике 2 другой запрос, это чтобы просто показать, что строчки с кириллицей есть
Нет, дело в том, что в MS SQL нет отдельной функции под regexp like, условия с регулярками пишутся в обычном лайке и работают.
Ну значит с этого и надо было начать, а не с синтаксиса регулярок.
Попробуй like N'%месяц%' или convert(varchar(max), Description).
Нет этой хуйни под рукой, чтобы наверняка сказать, сам ебись и гугли.
Ну пиздец. (
полнотекстовый поиск же
>>1996014
Нет ты не понимаешь. В центральной таблице это говна быть не должно. Тебе нужна отдельная таблица с бронями. Что значит он там не то что-то набронировал? Это предоплата и вьезд по паспортам, если он заполнил неправильно форму, он едет нахуй, а не в отель.
ФИО должно быть точно, иначе это хуйня. При проектировании надо опираться на бизнес-логику. Если ты неправильно заполнишь данные на сайте при покупки авиабилета, тебя не пустят в самолёт, так же и тут.
Соотвественно, когда мы будет искать занятые номера, уже бахаем три таблицы=СправочникНомеров+Брони+ЗанятыеНомера. Второй вариант добавить сущность СОБЫТИЕ и сыпать все в одно место, и брони и заезды: Ид+ИдНомера+КодСобытия(бронь-заезд-выезд)+Дата. Тогда можно будет построить полностью таймлайн, и напрмиер выбрать все номера, у которых есть выезд, но нет брони. Тут опять же вопрос в нормализации.
Ну я сам в отеле работаю и там типа так. Вообще насрать, чего там человек заполнил на сайте, букинге или ещё где. Никто там паспортные данные не высылает, почти никогда заранее не платят. Иногда по телефону чего-то промямлют, ты запишешь кое-как и всё. Или другому человеку. Главное чтобы найти эту бронь при заезде и чтоб она квоту занимала. А уже когда заезжает человек, то берется у него паспорт, заносится в систему и он добавляется в архив уже с однозначными данными.
Думаю все-таки да, попробовать просто пробегаться по броням. А для технических блокировок мб создать какого-то клиента с именем "блокировка" и он будет создаваться когда надо на какие-то даты закрыть номера. Хотя в реальности можно обычно вручную задать количество номеров на каждый день, а значит эта информация хранится где-то.
>>1996495
>>1996495
Тогда придерживайся второго подхода - все сыпешь в одну таблицу с событиями:
Событие - 1 бронь. В нём Ид пользоватоля вобще не заполнен, вместо этого заполнен коментарий, или вобще можно json класть в стобец с коментарием.
Событие 2 - заезд. Ид пользователя заполнено.
Событие 3 - выезд.
Кстати с таким подходом, не нужно делать две даты, достаточно одной.
Абу заебал со своими плохими воротами
Не пойму, почему считается, что кассандра это availability + partition tollerance, а big table это consistency + partition tollerance
У них у обоих consistency level конфигурируется. У big table по умолчанию всего лишь eventual consistency. Такой же и у кассандры
>почему PostgreSQL - не Oracle
почему?
Делаю листалку-пагинацию (на бэке постгрес если вдруг кому интересно), если простой способ затребовать определенную страницу под номером page_num (начинаются с 0):
LIMIT page_size OFFSET page_size x page_num
Но как заранее узнать максимальное количество страниц? Так чтобы это не отнимало много времени
Не по инфраструктуре, а именно по запросикам.
Есть проверенные варианты с онлайн-курсами? Только с рашкискими школами, чтобы не ебаться с оплатой забугорному контрагенту
>dba
SLQ Analyst, скорее. DBA вообще не про то, можешь совсем ненужными вещами голову засрать.
Конкретных курсов не знаю, меня всему научила улица.
https://www.specialist.ru/trainer/сфа
Вот этот хорошо рассказывает. Ну и список курсов можешь там же посмотреть. Это его видео в шапке, можешь послушать для примера.
у меня 4 из 10, жидко пукнув, обтекаю
Что ты несешь, долбаеб? Сформулируй вопрос еще раз.
Какую, нахуй страницу админа, каких нахуй аккаунтов юзеров? Сука, охуеть нахуй.
Если очень много, но есть primary key, все равно должно быть заебись.
'SELECT COUNT(*) as num FROM users'
Все нормальные люди перегоняют время в utc, а потом навешивают сверху таймзоны, если надо. В постгресе это сделали искаропки, вот и всё.
Если я не умею программировать, но немного знаю скуль с питоном и хочу со временем развить скиллы по анализу данных, стоит ли сейчас вкатываться в Logica, параллельно уча скуль с питоном?
>Clickhouse
>Пиздатая колоночная БД, дает прекрасные показатели по butch вставке и множественному чтению
>join-ы между таблицами сразу же херят всю производительность
Что это ха хрень??
Если ты дворовые реляционные БД осилил с трудом и анальными болями на уровне CRUD, то лучше не лезь.
Что это за говно и как его отключить?
Небось ровно в полночь? Мда, за 5 лет так ничего и не изменилось.
https://dba.stackexchange.com/questions/138589/how-to-disable-annoying-mysql-update-console
Спасибо, похоже оно. Не знаю почему сам не смог нагуглить, так и думал что избитая какая то проблема.
Я как-то успел сделать скрин и прочитать сообщение, его и загуглил.
Есть колонка, в котором такой текст:
"To:
1.Нужно удалить первый емейл-адрес
Т.е. получится "To:
2.Нужно вставить в конец строки "<br />BCC:
Т.е. получится "To:
REPLACE(PropertyValue,'','chto-to') не работает
Очевидно потому, что там нечего заменять
Единственное, что я тут изменил бы, это указал вместо where StateID in where <table1>.StateID in.
Есть еще варианты?
бамп
Не, ну это на 300к наносек вопросы, бесплатно не готов обсуждать.
Из жизненного опыта:
Когда ты пишешь where stateid in (select stateid from ...), то без алиасов sql считает, что stateid из внутреннего запроса относится к stateid внешней таблицы, то есть условие трактуется как stateid = stateid, всегда верное, возвращает все строки из таблицы. А в твоём случае ещё и переменная так же называется, что именно интерпретатор тут поймет вообще хуй его знает... Мерзкий говнокод.
С точки зрения логики, в максимальном приоритете интерпретатор должен брать именно тот stateid, который переменная, потому что ему невозможно прописать алиас... Ну опять же получаем условие вида 1=1 и все строки из таблицы. Ой, ну нахуй ты это принес, только расстроил меня.
У меня, как и большинства анонов, есть проблема - я забываю то, чем долго не пользуюсь. Вот и с sql сталкиваться приходится редко - чаще всего все мои задачи решает orm. Но забывать ни теорию баз данных, ни сам язык запросов не хочется. Что посоветуете, чтобы держаться на плаву?
в текстовых редакторах
>Что посоветуете
Сидеть в треде.
Можешь задачки решать на sql-ex или codewars, если тебе делать нехуй.
Пытаюсь тут обновить одну таблицу в postgres (а точнее поле json), но при попытках обновиться эта падла мне часто ругается на знак "%" - это, якобы это "unsopported format character" - втф? С хера ли % не может быть внутри полей бля?
до кучи добавлю, что я вытаскиваю уже готовое поле где присутствует % (!) но когда обновляю его то postgres усирается
Нужно ле делить поля на два (время операции и дата операции), либо же делать одно поле?
Храни в одном. Если потом потребуется отдельно дата или время, ты всегда можешь юзануть соответствующие функции.
Спасибо, не знал, что можно их будет селектнуть отдельно друг от друга. Буду вкуривать.
Вообще-то дату нужно хранить в integer, равном числу секунд от рождества христова.
Бамп вопросу
Бамп
Так а в чём плюс то? Если я получаю ровно то, что записал?
Я понимаю, что если изменить таймзхону сервера (или соединения), то получу я другое время. Но я не могу придумать случай, когда такое может произойти
>когда такое может произойти
Когда сервер мигрирует из одной tz в другую. Ну офис у тебя переезжает, понимаешь?
мимо проходил
Да я сам расстроенный сижу. Меня спрашивают, как оптимизировать этот запрос? Мой вариант - просто выкинуть его нахуй на помойку, хуйня какая - то.
Полигоны и градусы такой себе бэк, уровня школы, вот когда вызовом 2 таблиц формируешь матрицу, и с ней надо работать, вот тогда мозги кипят добротно
Да бля, ну без тралленка, я смотрел вакансию типа qa трейни/джун, там столько говна в требованиях, типа sql, xml, bash, vbs, JS и еще сотни всякого говна, сейчас я на 29 упражнении, по сути ничего кроме вложенных запросов и джоинов нормально не освоил.
Конечно если от меня будет требоватся только Select * from выдать, у меня жопа полыхнет.
> если от меня будет требоватся только Select * from выдать
Именно так и будет. Зачем ты вообще задрачиваешь это всё, если идёшь не на разраба? Даже меня, бэкендера, спрашивали только про джойны и нормальные формы, всерьёз с SQL ебутся только всякие ДБА. Тестеру от SQL нужно только уметь делать селекты, подставлять тестовые данные и подобное, причём не обязательно руками, можно мышкой через гуй. Даже уметь создавать таблицы не надо.
> xml
Понимать, что это такое, уметь читать и редактировать
> bash
На уровне ls/mkdir/find/cat/grep.
> vbs, JS
Ага, а ещё git, фреймворки, вёрстка и CI/CD, ведь там будут обязанности фуллстека за зарплату тестера.
Спасибо, укачусь в QA тред
Ну да, но ничего не мешает выучить матрицы прям сейчас
анончик посоветуй годноты по администированию оракле, именно по администированию, настройке бекапов , примери и слееров , стендбаев и всего такого
"To:
Вместо
1.Нужно удалить первый емейл-адрес
Т.е. получится "To:
2.Нужно вставить в конец строки "<br />BCC:
Т.е. получится "To:
Да! Только я заюзал array_agg. Спасибо!
В одной БД несколько схем, схема - это что-то вроде неймспейса/пакета/модуля из обычных языков. В одной схеме может быть несколько таблиц, индексов, процедур и прочего.
Ещё на будущее: под схемой в постгресе, мускле и оракле понимают три совершенно разные вещи.
>под схемой в постгресе, мускле и оракле понимают три совершенно разные вещи.
Забавно, что при этом ты дал определение схемы (ну описание) и не сказал, про какую схему ты именно говоришь - прогрессклную, мускульную или оракловую
Вопрос был про постгрес, я ответил про постгрес. Логично?
Слыш да, а нахуя вообще первый подзопрос?
Там же селект стейтАйди из т2, у которого условие на стейтАйди = константа.
Проще же сразу
...
Where stateid = stateid(переменная)
and (второй говнозапрос)
Если набор StateID в table1 и table2 разный, то это значит, что на запросе с картинки вернутся записи из table1 только в том случае, если они есть в table2, а если заменить подзапрос на константу, то вернутся записи из table1 с этим значением вне зависимости от того, есть они в table2 или нет. Понятно, что в здоровой ситуации набор значений там одинаковый, но в общем случае логика запроса меняется, поэтому нельзя так делать.
Senior SQL Developer
Ты просто нюфаня и еще не знаешь, что SQL во многих реализациях (например постгре) является тьюринг-полным языком программирования.
Тогда предлагаю заменить первый подзапрос на
Условие на константу + exists.
Тогда твой кейс обработаем и может быть быстрее, чем если в table2 хуиллион записей равных нашей константе тянуть
не Senior SQL Developer
Главпетух
БАМП.
Согласен, коллега, не доебаться.
Реквестирую кроссплатформенную реляционную СУБД с открытым кодом и свободной лицензией.
Анон, можно ли как-то из базы данных SQLite, сделать клиент-серверную СУБД?
Пока нашёл, вот здесь: https://qastack.ru/dba/21/is-it-possible-to-use-sqlite-as-a-client-server-database
некий SQLitening : https://sqlitening.planetsquires.com/index.php
но это для Windows. А для прыщей чёт не могу нихуя нарыть.
Хочу сделать говносайт, с базой данных SQLite, потому что она кроссфлатфоренная и код её открыт.
FirebirdSQL?
POSTGRESQL
https://ru.wikipedia.org/wiki/Oracle_Database
Ааа, там мокрописечная копирастия обфусцированная, проприетарная.
Лицензия: коммерческая, для разработчиков
Ну так а нафиг она тогда нужна, если сорца нету? Для понтов, мол смотри у нас тут есть скомпилированная РСУБД, она даже работает, а что там за вирусы, черви и бекдоры в коде - ебать не должно, код скрыт. Да?
Опенсорс ничего не гарантирует. В миллионах строк открытого кода тоже можно спрятать много интересного, и никто не заметит, потому что нет ни у кого времени полностью читать весь код. В линукс уже несколько раз коммитили бэкдоры, пруфы можешь поискать сам.
Да и оракл стал популярен в те времена, когда тупо не было полноценных альтернатив по возможностям, это как с линуксом, который но недавнего времени был неюзабелен на десктопе (и до сих пор вызывает вопросы). Сейчас же с использованием оракла написано слишком много кода, их нельзя быстро переписать на постгрес.
Оракл вряд ли на это пойдёт, он слишком жадный, и эта жадность может его погубить. У него и так кроме СУБД куча других проприетарных продуктов, и он не спешит их опенсорсить.
Да нет, ты не понял. Тупо взять деобфусцировать, декомпилировать, дизасеблировать, и/или воссоздать, дописать и портировать модули подпрограммные, которые выполняли бы всё то, что делает оракл, и назвать это оракл-опен-сорц-реверс-инженеред-портабле-еxe
>>2013539
Может ALTIBASE HDB? Тут пишут что код открыт https://datewiki.ru/wiki/Altibase
> их нельзя быстро переписать на постгрес.
А сможет ли постгрес справиться со всем тем, с чем справляется оракл?
SELECT DISTINCT Склад.Размер
FROM Склад INNER JOIN Корзина ON Склад.КодТовара = Корзина.КодТовара
ORDER BY Склад.Размер;
Дошел только до этого, но оно не работает. Для курсача надо
За это на бутылку посадят, ни одна организация не будет это использовать. Больше толку будет от портирования оракловых фич в другие БД.
На этот код
SELECT DISTINCT Склад.Размер
FROM Склад INNER JOIN Корзина ON Склад.КодТовара = Корзина.КодТовара
WHERE Склад.Количество > 1
ORDER BY Склад.Размер;
аксес выводит пикрил, а после тупо выводит все размеры со всех позиций на складе
Да, использовать case в where или having, но скорее всего тебе это не нужно.
Сложно сказать, сколько ни читал сравнения оракла и постгреса, везде одна субъективщина типа "а у нас есть merge и пакеты, а у вас?". С основными задачами они справляются примерно одинаково, и реальная разница в некоторых продвинутых фичах (наподобие репликации), которые нужны не всем.
>WHERE Склад.Количество > 1
У тебя нет поля Склад.Количество .
Может так:
>WHERE Склад.КоличествоНаСкладе >= 1
?
Нужно больше информации, алсо, попробуй реализовать через вложенный запрос, иногра обсалютно одинаковые логические запросы, через вложенный, выдают разные результаты
Та я сам только ботаю на sql-ex и откуда у тебя форма лезет не ебу
Я конечно не представляю как это должно быть, но для каждой новой клиентской корзины я бы создавал отдельно таблицу ьипа <клиентАЙДИ>корзина (продуктайди, кодичествовкорзине)
>я сам только ботаю на sql-ex
А зачем тогда людям что-то советуешь?
Ладно этот чел, он свою лабу сдаст и забудет, но вдруг кто-то прочитает бред по типу этого и будет думать, что это правда
>иногра обсалютно одинаковые логические запросы, через вложенный, выдают разные результаты
Ну по тем задачам, не помню какая именно, так и было, где-то в начале, до 20 точно
>зачем
Потому что профи годны только говниться а не подсказывать
Кстати, если принесешь задачу с примерами, я скажу, где ты обосрался.
Как оказалось мой интервьюер такого ответа и ожидал.
Думаю да, у меня образование 9 классов (гдя я проебывал уроки, особенно математику). Недавно пошел на собеседование в контору, где чисто на t-sql все делают. Мне дали тестовое, которое очень просто представить на системе координат. В итоге я его так нихуя сделать и не смог... Теперь собираюсь наверстывать упущенное через Khan Academy.
Я б таких собеседователей ногами пиздил. Второй год работаю, ниразу не одной задачи с матаном\геометрией не попалось. Если нужно что-нибудь более сложное посчитать, всегда приносят формулу.
Как подключиться к файлу базы данных SQLite из браузера client-side, чтобы читать-писать данные там, используя SQL-запросы?
Вижу здесь: https://github.com/sql-js/sql.js
есть DEMO: https://sql.js.org/examples/GUI/
и оно вроде работает в браузере,
но оно где-то хостится на каком-то сервере,
а я не хочу вгружать и передавать свою базу данных, и сами данные,
на чей-то сервер, чтобы там кто-то колупался. Я хочу client-side.
Есть нечто подобное, чтобы работало, мм?
Всё, нашёл это: https://github.com/cyrilbois/Web-GUI-for-SQLite
Демо - здесь: https://extendsclass.com/sqlite-browser.html
Просто скачал (пикрил), и открыл Web-GUI-for-SQLite.html во вкладке браузера. Всё работает заебись, вроде.
Терабайт данных в sqlite? Скорее всего, sqlite тебе не нужен.
Такой запрос вообще ошибку выдает
Error Code: 3029. Expression #1 of ORDER BY contains aggregate function and applies to the result of a non-aggregated query
... from moving_b group by "Месяц" order by count(*) desc fetch first 1 row only;
select mounth from ... group by mounth order by count (mounth) desc limit 1;
>select mounth from ... group by mounth order by count (mounth) desc limit 1;
На это выдает почему то 6 месяц, а не 5
Хотя ладно, хуй с этим запросом, пропущу его. Если уж всем тредом не смогли сделать, то проще забить
Что не так?
Я знаю, что любая реляционная база данных, состоит из таблиц взаимосвязей между ними.
Но для того, чтобы работать с базой данных, нужна целая, пиздатая СУБД, которая не всегда может поставится - это раз, во вторых, там могут быть бекдоры всякие и хрен знает что, в третьих лицензии могут быть несвободные, и всякое такое.
Вопрос. А возможно ли работать с базой данных, БЕЗ СУБД?
Скажем, вот, можно ли создать базу данных, в блокноте, и просто глазами смотреть где какое значение в поле какой таблицы, и так вот читать-писать-искать значения, производя CRUD?
Если да, то можно ли пихнуть всё дело - пхнуть в один бинарный файл, а вместо индексов, просто сунуть смещения на всякие данные,
и обходить всё это, потом, алгоритмом, в том числе и кастомным, вроде SQL-запроса?
И ещё, я знаю, что любую реляционную БД, любой величины,
можно засунуть в одну таблицу,
и в полях которой - имена всех таблиц, и всех их столбцов, и всех возможных типов данных, в таблицу, где каждая запись представляет из себя конкретное значение - данные, но придётся указывать номер таблицы, номер столбца, номер типа данных, и по этим номерам уже извлекать данные конкретного типа из конкретного столбца, конкретной таблицы, это уже дублирование пиздецкое, и ещё куча нуллей будет в такой огромной таблице.
В общем, реквестирую, минимально-возможную реляционную СУБД, такую, чтобы возможно, её можно было с нуля написать.
> нужна целая, пиздатая СУБД, которая не всегда может поставится
Я бы не стал доверять данные серверу, на котором такие проблемы с окружением.
> там могут быть бекдоры всякие и хрен знает что
А ещё они могут быть в процессоре, в ОС, в компиляторах, в мозгу с рождения, в прививке от коронавируса. Подобные рассуждения ведут только к тому, что надо срочно запереться в комнате с мягкими стенами.
> лицензии могут быть несвободные, и всякое такое.
А могут быть свободные. Ты наугад выбираешь СУБД что ли, или всё-таки ищешь подходящую под задачи с подходящей лицензией?
> возможно ли работать с базой данных, БЕЗ СУБД?
Невозможно, ты так или иначе напишешь свою СУБД, пусть это и десяток функций, ломающихся при масштабировании.
> Скажем, вот, можно ли создать базу данных, в блокноте, и просто глазами смотреть где какое значение в поле какой таблицы, и так вот читать-писать-искать значения, производя CRUD?
Множество CSV-файлов. занимать будет дохуя места, запросы будут медленными, постоянная перезапись файлов быстро убьёт диск.
> Если да, то можно ли пихнуть всё дело - пхнуть в один бинарный файл, а вместо индексов, просто сунуть смещения на всякие данные, и обходить всё это, потом, алгоритмом, в том числе и кастомным, вроде SQL-запроса?
Примитивная СУБД так и будет работать.
> И ещё, я знаю, что любую реляционную БД, любой величины, можно засунуть в одну таблицу, и в полях которой - имена всех таблиц, и всех их столбцов, и всех возможных типов данных, в таблицу, где каждая запись представляет из себя конкретное значение - данные, но придётся указывать номер таблицы, номер столбца, номер типа данных, и по этим номерам уже извлекать данные конкретного типа из конкретного столбца, конкретной таблицы, это уже дублирование пиздецкое, и ещё куча нуллей будет в такой огромной таблице.
Именно так, поэтому этого не делают.
> В общем, реквестирую, минимально-возможную реляционную СУБД, такую, чтобы возможно, её можно было с нуля написать.
Гугли 12 правил Кодда, это минимальные требования к релцяционной СУБД. Написать с нуля, конечно, возможно всё, но легко сдаться на первых сложностях наподобие реализации ACID-транзакций.
Короче, бери sqlite.
> нужна целая, пиздатая СУБД, которая не всегда может поставится
Я бы не стал доверять данные серверу, на котором такие проблемы с окружением.
> там могут быть бекдоры всякие и хрен знает что
А ещё они могут быть в процессоре, в ОС, в компиляторах, в мозгу с рождения, в прививке от коронавируса. Подобные рассуждения ведут только к тому, что надо срочно запереться в комнате с мягкими стенами.
> лицензии могут быть несвободные, и всякое такое.
А могут быть свободные. Ты наугад выбираешь СУБД что ли, или всё-таки ищешь подходящую под задачи с подходящей лицензией?
> возможно ли работать с базой данных, БЕЗ СУБД?
Невозможно, ты так или иначе напишешь свою СУБД, пусть это и десяток функций, ломающихся при масштабировании.
> Скажем, вот, можно ли создать базу данных, в блокноте, и просто глазами смотреть где какое значение в поле какой таблицы, и так вот читать-писать-искать значения, производя CRUD?
Множество CSV-файлов. занимать будет дохуя места, запросы будут медленными, постоянная перезапись файлов быстро убьёт диск.
> Если да, то можно ли пихнуть всё дело - пхнуть в один бинарный файл, а вместо индексов, просто сунуть смещения на всякие данные, и обходить всё это, потом, алгоритмом, в том числе и кастомным, вроде SQL-запроса?
Примитивная СУБД так и будет работать.
> И ещё, я знаю, что любую реляционную БД, любой величины, можно засунуть в одну таблицу, и в полях которой - имена всех таблиц, и всех их столбцов, и всех возможных типов данных, в таблицу, где каждая запись представляет из себя конкретное значение - данные, но придётся указывать номер таблицы, номер столбца, номер типа данных, и по этим номерам уже извлекать данные конкретного типа из конкретного столбца, конкретной таблицы, это уже дублирование пиздецкое, и ещё куча нуллей будет в такой огромной таблице.
Именно так, поэтому этого не делают.
> В общем, реквестирую, минимально-возможную реляционную СУБД, такую, чтобы возможно, её можно было с нуля написать.
Гугли 12 правил Кодда, это минимальные требования к релцяционной СУБД. Написать с нуля, конечно, возможно всё, но легко сдаться на первых сложностях наподобие реализации ACID-транзакций.
Короче, бери sqlite.
Так просто поролить надо!
1 oracle
2 maridb
3 MSSQL
4 PostgresSQL
5 REDIS
6 CASSANDRA
7 CLICKHOUSE
8 SCILLA
9 VERTICA
0 SQL LITE
На дабл берёшь любую релиционню, 00 колоночную.
66 пишешь свою говнобазу на оркале
77 хранишь все в фс
Ролл
Да я уже заебался с ней, просто, пиздец как.
Нихуя документации, годной, в этом ебучем тырнете, найти не могу, блядь.
Там всё копирастическим и корпоратокративным языком написано, чтобы запутать анона, и чтобы он забил на это хуй поскорей.
У меня, здесь, короче, 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, и делать целый сайт и ещё и хостить его, блядь?
Да я уже заебался с ней, просто, пиздец как.
Нихуя документации, годной, в этом ебучем тырнете, найти не могу, блядь.
Там всё копирастическим и корпоратокративным языком написано, чтобы запутать анона, и чтобы он забил на это хуй поскорей.
У меня, здесь, короче, 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? Какаой нахуй хелп локальный? Тебя что там разморозили: Как там в нулевых?
Ну там перенос тсроки проебался, на простой дабл берёшь что хочешь, на особые дабл берешь согласно списку. А то что она колоночная..НУ хули, ролл есть ролл
> Там всё копирастическим и корпоратокративным языком написано, чтобы запутать анона, и чтобы он забил на это хуй поскорей.
Нет, это чтобы не было разночтений, и дока была исчерпывающей. Невозможно описать сложную систему простым языков без опускания подробностей.
> Единственную норм приложуху для тыканья 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 и друие подобные БД, где всё в одном файле, хреново масштабируются.
> Там всё копирастическим и корпоратокративным языком написано, чтобы запутать анона, и чтобы он забил на это хуй поскорей.
Нет, это чтобы не было разночтений, и дока была исчерпывающей. Невозможно описать сложную систему простым языков без опускания подробностей.
> Единственную норм приложуху для тыканья 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 и друие подобные БД, где всё в одном файле, хреново масштабируются.
>Что ты несёшь? Что ты блядь несёшь?
Жопоболь свою несу, от пердолинга, заебало гуглить уже.
>Идёшь на 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 ячеек, получается.
>Что ты несёшь? Что ты блядь несёшь?
Жопоболь свою несу, от пердолинга, заебало гуглить уже.
>Идёшь на 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 ячеек, получается.
>С расчётом на 10-20 не очень активных пользователей, может, и существует. Sqlite и друие подобные БД, где всё в одном файле, хреново масштабируются.
Тут https://stackoverflow.com/a/3867722
пишут что 100к посетителей должен держать сайт с базой данных сиквелайт.
>А нахуя ты в степень возвёл? Там примерно 10x10x100 ячеек будет, разве не?
>То есть, около 10000 ячеек, получается на все данные, где-то,
>и в одной пиздатой таблице это 10000 строк,
>где одна ячейка - значение в каком-то поле каждой строки таблицы.
>В таблице, с числом полей 1(ID) + 3(имя таблицы, имя столбца, тип данных) +
>5 (если брать все типы всевозможных данных, у sqlite 5 типов данных);
>и вот в такой таблице - 10000 строк, как-бы:
>код, имя таблицы, имя столбца, тип данных, и сами данные в соответствующем столбце из 5-ти возможных типов.
>Всего, столбцов 9, и 10000 строк - 90000 ячеек, получается.
Это вариация god-table одного анона из предыдущих тредов, если чо, я тебя помню.
В первые строки подобной таблицы, можно вместить текстом,
имена таблиц, и имена столбцов внутри них, а также типы данных,
а чтобы не дублировать имена и типы в каждой строке этой таблицы - вставить ссылки на них, в виде кодов,
числами - так меньше текста должно быть продублировано.
Но вот поля для разных типов, должны быть отдельные,
потому что данные в них могут иметь разный размер,
например, какой-либо многовесный blob может быть размером в гигабайт.
Всё это - засунуть в пиздатую таблицу, как на наноборде, и выстроить индекс для неё, отдельным файлом,
при этом, первые строки с названиями таблиц, их столбцов и типы - вгрузить в память,
а дальше шастать по всей хуйне уже через логику работы софтины.
Чем уже не самописная и главное - реляционная СУБД?
Быть может, можно заебенить всё это ещё более оптимально,
с минимальным числом строчек кода, чтобы не писать 1005000 строк, хз - это просто набросок.
>Но вот поля для разных типов, должны быть отдельные,
>потому что данные в них могут иметь разный размер,
>например, какой-либо многовесный blob может быть размером в гигабайт.
Можно сделать в 5 столбцов, походу:
Код данных, код таблицы, код столбца, код типа, сами данные.
При этом, как-бы, похуй какие данные, вообще, и какого они размера - писать их сырыми, да и всё.
>>Но тут много других проблем возникает,
>>например, что если при обновлении данные увеличились и не влезают в то место, где хранились раньше,
>Тогда, добавляется новая запись в двоичный файл, и обновляются оффсеты в индексном файле, по хэшу-ключу,
>а старые данные - затираются нуллями.
>>или как удалять данные, но так, чтобы не было много неиспользованного пространства и не росла фрагментация.
>Вот эта трабла там >>2022426 не решена. Когда нанопост удаляется навсегда одминчегом этой читалки постов,
>в двоичном файле, данные, просто филлятся нуллями, и индекс обновляется, но хэш сохраняется,
>а оффсеты в индексе обнуляются, и нанопост помечается что он удалён нах.
>Всё в коде есть, и расписано, но это не реляционная СУБД, и даже не БД,
>а просто одна таблица с постами и индекс для быстрой загрузки.
Если в блоб-е гигабайт, и он перезаписывается двух-гигабайтным блобом,
то индекс предыдущего блоба - обнуляется,
и пишется новая запись в большой таблице, уже с двух-гигабайтным блобом, и новым оффсетом в индексе.
Когда пишутся новые данные, они пишутся уже на место старого блоба,
и таким образом, база не растёт.
Но если не филлить нулями старый блоб, в базе будет мусор из байт старого блоба,
а если филлить нулями при каждом обновлении - вся хуйня будет медленно работать, и может убить диск.
Оффсеты мусора, можно отдельно помечать в индексе, чтобы на его место писать новые данные.
Но такая база будет фрагментированной, а как её дефрагментировать - хз.
>Но вот поля для разных типов, должны быть отдельные,
>потому что данные в них могут иметь разный размер,
>например, какой-либо многовесный blob может быть размером в гигабайт.
Можно сделать в 5 столбцов, походу:
Код данных, код таблицы, код столбца, код типа, сами данные.
При этом, как-бы, похуй какие данные, вообще, и какого они размера - писать их сырыми, да и всё.
>>Но тут много других проблем возникает,
>>например, что если при обновлении данные увеличились и не влезают в то место, где хранились раньше,
>Тогда, добавляется новая запись в двоичный файл, и обновляются оффсеты в индексном файле, по хэшу-ключу,
>а старые данные - затираются нуллями.
>>или как удалять данные, но так, чтобы не было много неиспользованного пространства и не росла фрагментация.
>Вот эта трабла там >>2022426 не решена. Когда нанопост удаляется навсегда одминчегом этой читалки постов,
>в двоичном файле, данные, просто филлятся нуллями, и индекс обновляется, но хэш сохраняется,
>а оффсеты в индексе обнуляются, и нанопост помечается что он удалён нах.
>Всё в коде есть, и расписано, но это не реляционная СУБД, и даже не БД,
>а просто одна таблица с постами и индекс для быстрой загрузки.
Если в блоб-е гигабайт, и он перезаписывается двух-гигабайтным блобом,
то индекс предыдущего блоба - обнуляется,
и пишется новая запись в большой таблице, уже с двух-гигабайтным блобом, и новым оффсетом в индексе.
Когда пишутся новые данные, они пишутся уже на место старого блоба,
и таким образом, база не растёт.
Но если не филлить нулями старый блоб, в базе будет мусор из байт старого блоба,
а если филлить нулями при каждом обновлении - вся хуйня будет медленно работать, и может убить диск.
Оффсеты мусора, можно отдельно помечать в индексе, чтобы на его место писать новые данные.
Но такая база будет фрагментированной, а как её дефрагментировать - хз.
>Колоночная (00) - отпадает, пушо она не реляционная и там нельзя взаимосвязывать таблицы, блядь.
Значит либо пердолить свою СУБД (дабл), либо sqlite (0).
Пожалуй начну костылить и пердолить свою личную СУБД, по даблу.
Не знаю, на сколько хватит энтузиазма, блядь. Вот черновой вариант, описания, пока-что: https://pastebin.com/HjWmbk5Z
Кода, разумеется, пока нет, но теория какая-никакая, уже есть, как-бэ, можете поправить, если чо.
Если из колоночной базы данных можно сделать релюцивонную, наверное и колоночная сошла бы, хз.
Тоньше уже некуда.
Как в SQLite вставить строчку данных с произвольным числом столбцов, всех возможных типов,
данных, типы которые неизвестны,
ведь они могут быть в разном порядке и дублироваться?
Никак, это тебе не mongodb. Храни в text или blob, обрабатывай на уровне положения.
Всё, я понял уже. Надо просто вопросиков напихать, а параметры - уже потом приклеить. https://www.devart.com/dotconnect/sqlite/docs/parameters.html
>Надо просто вопросиков напихать
Хуёво выразился. Проясню:
>VALUES (?, ?, ?)
И число этих вопросиков - число столбцов, со значениями.
Анон, какие ты знаешь ДЕЦЕНТРАЛИЗИРОВАННЫЕ базы данных,
такие, чтобы они не имели центра, который можно разбобить ракетами?
Быть может, есть какие-то зашифрованные базы данных на блокчейнах, или что-то наподобие этого?
Первое что приходит в голову, это тупо сделать ноды для раздачи таблиц, сконвертированных в CSV или JSON, чтобы можно было синхронить данные между нодами, и скачать с любой ноды, просто подключившись к ней.
Но гонять в открытом виде данные и шарить их кому не попадя - так себе затея, ведь данные могут быть и секретными, ну или приватными, конфиденциальными, скажем.
И хотя, ничто и не мешает зашифровать их, но при длительном хранении в общем доступе, даже в зашифрованном виде - растёт риск брутфорса ключа шифрования.
Скачал отсюда: 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?
Запустил, короче, это:
\sqlite-netFx-source-1.0.113.0\Setup\compile-interop-assembly-release.sh
получил SQLite.Interop.dll.
Переименовал его в System.Data.SQLite.dll и попытался запустить на шинде - не робит.
Открыл его потом блокнотом, и вижу ELF в начале файла,
а внутри System.Data.SQLite.dll, где SQLite.Interop.dll содержится, там MZђ
Как получить MZђ?
На шинде, с этим батником, также работает минимальная сборка кода,
это папки "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'ом именно эту вот, хуйню получить - хз.
>там есть справка в формате CHM, как его открыть - вообще не ебу, у меня открывается окно, а там такое говно.
Сравнил тот файл с этим:
https://github.com/moneymanagerex/System.Data.SQLite/blob/master/Doc/SQLite.NET.chm
И вижу отличия. В чём - не пойму, просто разные размеры.
Этот файл, вроде открывается, и там куча инфы по ангельски.
Пиздос объебос, буду терь грызть маны эти ебучие.
Ну всё, теперь вы все будете числиться, у меня - в моей в базе данных.
Аноны, нужно материалов, чтобы быстро заучить особенности sql и в частности постгреса. Синтаксис и как юзается знаю, а вот конкретные определения, например, форейн ключей, констрэйнтов итд нет. Надо чтоб особо не ебаться с длинными статьями или тем более книгами, подготовиться к собеседованию
>Судя по сайту https://system.data.sqlite.org/index.html/doc/trunk/www/index.wiki
>там есть справка в формате CHM, как его открыть - вообще не ебу, у меня открывается окно, а там такое говно.
Закинул этот CHM-файл прямо на диск, в корень - открылось.
Он не открывался, потому что я его забросил в такие ебеня...
>Диск:\папка1\папка2\папка2\...\папка100500\SQLite.NET.CHM
что пути к html-файлам в архиве, уже просто - в память не лезли.
Сравнил с помощью WinMerge
Этот файл: https://system.data.sqlite.org/index.html/doc/trunk/Doc/SQLite.NET.chm?mimetype=application/x-chm
с этим:
https://github.com/moneymanagerex/System.Data.SQLite/blob/master/Doc/SQLite.NET.chm
И такие длинные названия у файлов увидел там, что охуеть просто.
Гугл же, не?
Главное ведь - это понять саму суть, и просто запомнить её.
Что там у тебя?
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 первых свиданий") - может иметь много жанров,
но и один жанр ("боевик"), может быть для множества фильмов.
Гугл же, не?
Главное ведь - это понять саму суть, и просто запомнить её.
Что там у тебя?
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 первых свиданий") - может иметь много жанров,
но и один жанр ("боевик"), может быть для множества фильмов.
Понятие constraint немного шире, это любое условие на данные в таблице, не только уникальность. Foreign key, внезапно, тоже constraint. Вот так вот научитесь по своему гуглу.
Бампую вопрос.
SELECT DISTINCT maker
FROM product
WHERE type = 'pc'
EXCEPT
SELECT DISTINCT maker
FROM product
Where type = 'laptop'
2.
SELECT DISTINCT maker
FROM product
WHERE model IN(
SELECT model FROM PC
EXCEPT
SELECT model FROM laptop)
https://sql-ex.ru/learn_exercises.php?LN=8
Подскажите, почему второй вариант не верен? Разве что в таблице PC есть некоторые maker, которых нет в таблице product?
*/ Но это кажется невозможно по схеме бд
Вы заебали со своими ссылками, там регу просит, нужно что-то делайте скриншоты.
Так что неебу что там в задача, но никто не делает EXCEPT ва таких селекатах\подзопросов.
Решаей через джоин с условием, либо через inner.
Если любую реляционную базу данных,
со всеми её таблицами и взаимосвязями их,
можно представить в виде одной единственной таблицы,
то возможно ли эту таблицу,
хранить обычом одномерном массиве объектов с разными типами,
а пробегать, массив, как-то так:
>for(var cell=0; cell<arr.length; cell+= NumberOfCellsPerLine ){
> //arr[cell]; arr[cell+1]; ...; arr[cell+(NumberOfCellsPerLine-1)]; //ячейки этой универсальной таблицы.
>}
И чтобы ебались они конём эти проприетарные субд копирастические?
Господи, опять ты. Если тебе нужна некрофилия с Windows XP, лучше возьми C++ и компилируй sqlite под него вместо ебли с Mono.
Сделать-то можно, это как N-мерные массивы преобразуются в одномерные. Правда, твоя БД будет ощутимо тормозить уже на 1000 записях, занимаемое место будет быстро увеличиваться, малейший сбой при вводе-выводе приведёт БД в несогласованное состояние, схему придётся контроллировать программно, эффективное удаление и обновление записей будет невозможным, работа с БД будет однопоточной.
опять выходишь на связь мудило?
Или все тупо пишут самописные скрипты?
Смотря какой орм. Питухновский и пхпшный умеют кучу бд. Скорее всего ты не туда смотришь.
Блин, нихрена не понимаю, в чем смысл кавычек в sql query? Вот например запрос в mysql:
SELECT "id" FROM "chattbale"
Кавычки есть. Но если такой же запрос сделать у меня в postgres то он ругается что "relation does not exist", работает только если их убрать. wtf это такое?
Кроме всего прочего, кавычки делают имя регистрозависимым. Имена в БД, как правило, называются капсом, и если в кавычках написать не капсом, имя просто не найдётся.
Кавычки делают имена регистрозависимыми.
Сори, чел, никогда этой темой не интересовался и никогда даже на собесах не спрашивали про этот сертификат, хотя я именно по этому профилю и устраивался раньше. А нахуя тебе?
Хуй сосешь?
Так и сказали на работе, получишь сертификат - компенсируем стоимость и добавим зп.
А почему в этом треде, чел? Спроси в треде по C# или в общих.
Даблую
И потом как-то замутить авторизацию и сравнивать введенные в форму данные с тем, что есть в самой бд?
В БД нет хешировпния и авторизаций, она просто хранит данные, которые ты пришлёшь из приложения, прислать ты должен уже хешированный пароль. Читай про функцих bcrypt, в зависимости от языка реализации могут быть разные, но суть в том, что она вычимлит хеш пароля, пришежшего из формы, хеш ты сохраняешь в БД, а затем, когда пользователь вводит пароль при входе, получаешь хеш из БД и с помощью специальной функции для сравнения сравниваешь значение в БД и переданное пользователем.
Вобще-то есть. У меня в MSSQL хранится хэш, делал не я, но я уверен что делалось на стороне бд.
Там вроде все делается через бейсик
merge
Upsert обычно делается если просто под условие ничего не подходит, это не то.
Сука, ты ебаный тупорылый даун, который не в состоянии читать простые предложения и извлекать из них смысл, во всех тредах что ли сидит? Пошел нахуй блядь, долбоеб.
Куда перебазировать базу данных наших базовых предприятий, составляющих производственную базу на военно-морской базе?
Смешно.
на базовую станицию на базовой полярной базе
Как я буду тестить скл-запросы редисом?
Может помимо подключения к базе (connection) , надо её ещё и открыть (connection open)?
Работаю с Elastic, закачал репозитарий с докером, который ставит Эластик, вроде все работает как надо, создаю индекс, данные сохраняются и находятся
Но как только я останавливаю докер-контейнер и перезапускаю всё, данные обнуляются - созданного индекса больше нет и надо все делать по-новой. wtf?
у тебя данные все в контейнере, как только ты его останавливаешь все в пиздень схлопывается, и нихуя не остаётся, Тебе надо указать директорию для хранения файлов данных, т.е. всего того что должно остаться после закрытия контейнера. Покури доку, там опция котороя при запуске докера передаётся в контйенер, что-то типа храни данные бд в такой то папке за пределами контейнера.
Синтаксис лайта слегка отличается от T-SQL тогоже, RTFM
volume?
Ну вот например мне нужно хранить не просто количество товаров в наличии, а количество товаров на каждую дату. Если это услуга какая-то мб. Я думал просто сделать таблицу, где будут дата, ид товара и количество. И складывать в неё все товары на все даты. Или нужно сделать ид даты, ид товара, количество? Просто как бы дата сама по себе уже как ид. Ну типа у меня не будет задачи изменить какую-то дату у всех товаров.
id количества еще можешь сделать, вдруг каких-то товаров будет одинаковое количество
Есть задача - с как можно меньшим количеством усилий написать интерфейс для субд на mysql. Нужно разделение прав доступа(администратор/клиент) и отчетность по типу количество продаж того или иного товара из базы данных за месяц.
На чем это можно сделать эффективнее всего?
Изначально думал на питоне написать, но быстро там не получится.
Смотрел в сторону apex, но толковой инфы по нему в интернетах найти не смог.
очевидно я новичок, нагуглить не смог
У тебя столбцы уже есть и ты хочешь одно поле проставить определённым значением во всех строках?
update jepa set govno=100
чем не подходит?
Прописать default value.
У меня 70 столбцов, которым надо присвоить значение 1. По умолчанию у меня они 0, и это мне тоже нужно. Выходит что-то типа:
govno1 = 1, govno2 = 1, govno3 = 1 ... govno70 = 1
Еще могу сделать:
INSERT INTO JEPA
VALUES
(1, 1, 1, 1 ... (64 раза) 1)
Другого варианта нет, получается? Нельзя как-то взять диапазон столбцов или что-то такое и заполнить его нулями без этой писанины?
*заполнить единицами
Нет, нельзя.
Судя по тому что ты это согласовываешь с анонами, а не с маняархитектором, это твоя личная поделка, так что можешь идентификатор записи не ставить. Условие уникальности по товару и дате ебани и охуенно будет.
Мне нужно помененять в базе данных даты со сдвигом по времени назад на 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 можно ткое реализовать? Нужно что то типа переменной меняющейся после обновления каждой строки.
Правильно ли я понимаю, что вместо 3 интервалов у тебя должно появиться 4?
Если это просто таблица с интервалами времени, то дропни все нахуй и создай заново. А если у тебя есть какие-то данные, привязанные к этому интервалу времени, то откуда же ты высрешь данные для новых интервалов? И данные для старых интервалов станут некорректны.
А, не знал про такое, лел. Собственно я думал, что ид этой записи - это и есть как бы ссылка на уникальную комбинацию даты и количества. Я прост Джанго орм юзаю ещё.
сам разобрался дауничи
Вроде как обычный text, но что дает вот эта приписка с fields?
Да, правильно, но это не страшно, так как конечное общее время сдвигается с 12 до 11 часов.
п.с.
не суть важна прикладная сторона, нужно именно передвинуть.
Вообще диапазон всего этого движняка - месяц, а значит еще и каждый новый день должен начинаться с сдвига в 5.
Чето мне думется без скрипта на ЯП это не решить.
Эффективней на веб приколхозить. Бахаешь веб приложение и всё. Говорят у лоровеля(пхп) очень удобный орм для sql.
>>2042427
SELECT INTO, сам селект можешь сгенерировать через какой-нибудь джоин на самого себя(cross apply\crossjoin)
>>2042659
Если уже существующие, тогда берешь таблицу календаря, с твоими временными промежутками и джоинишь к таблице фактов. Календарь генерируешь сам либо берешь готовый.
>>2042666
Без привязки к решениям, это дым из пизды. Попробуй покурить книжку с кабанчиком из ОП поста.
>>2042364
Нормализуются всякие справочники, в твоём случае ID товара. У тебя будет 2 таблицы, с фактами продаж и справочник товаров.
почему при отключении нескольких нод 2 в локальном, 1 в удаленном, вначале все пашет как пахало по результаттам, но потом ноды не принимают на себя всю нагрузку и работают как будто в полсилы и сла не соблюдается, хотя ресурсы есть.
Состав кластера 5+5 вм, два дц.
После рестарта приложения и репейра нод сла по записи не достигается до того момента, когда все работало без укладывания нод.
Да, приложение, которое в базу пишет - черный ящик, так что рассматриваем только общие моменты.
Например есть поле типо этого:
'rates': {
type': 'nested',
'properties': {
'rateid': {
'type': 'long'
},
'txt': {
'type': 'text'
}
}
Надо найти фразу внутри rates.txt, как это намутить?
Самой query должно быть nested
Изначальные условия:
Есть объявления. Пользователи могут добавлять объявления себе в закладки или в скрытые (отдельная табличка user_id, объявление_id, категория_id). Все хорошо.
Задача:
На объявлениях у нас появляется некоторый признак, по которому мы можем сказать, что это дубли.
А дубли мы хотим визуально (именно визуально) схлопывать, когда выводим список.
Проблема А:
Мы не можем схлопывать на фронте, так как начинаются проблемы с пагинацией.
И еще нам надо чтобы это работало очень быстро, поэтому нельзя делать трехэтажный запрос с группировкой.
Тут мне кажется можно попытаться решить добавив специальную группирующую сущность или фейковую запись в саму таблицу объявлений, которая будет родительской. И соответственно в выборке будут участвовать родители ИЛИ объявления без родительской сущности. Звучит кривовато, но можно попробовать.
Проблема Б:
Нужно при этом еще уметь отфильтровывать по пользовательской категории (закладка, скрыто).
То есть получается, что когда мы видим группирующую запись, надо еще знать входит ли какое-то из объявлений под ней в категорию для конкретного пользователя.
Опять же, если делать через гурппировку, то запрос становится тяжелым.
И вот тут у меня уже нет идей, что можно сделать.
Короче, подскажите, может есть какой-то рецепт для таких задач? Или может быть можно выбрать другой интрумент (не реляционку), в котором это хорошо решается?
Делаешь ров намбер убывающий, потом фильтруешь всё что больше 1. А ещё есть всякие Drill на фронте.
Блин, ты настолько не понимаешь проблему, что мне даже обидно, как-будто нахамили сейчас. Как-будто я это в пустоту писал.
Причем здесь оконные функции вообще? Нам нужен список
- A
- B
- [C, D, E]
- F
<[1][2]...[10] >
Где С подпадает под закладки пользователя, а D и E просто связаны.
Да, я не понимаю. в чём проблема.
У тебя список
а
а
b
c
d
Ты хочешь чтобы у тебя ВИЗУАЛЬНО схлоповались дубли, признак схлорывание в роу намбер. Схлопываешь через Drill up\Drill down. Я не вижу тут проблемы.
Внезапно, есть.
http://libgen.is/book/index.php?md5=B2077DD9120182DCE1B26A91E592416A
Но некоторые аноны не советуют, хотя сам не читал.
Ого! Спасибо
pills: (таблетки)
id INT
name TEXT
agents: (вещества)
id INT
name TEXT
description TEXT
pros TEXT
contras TEXT
pills_agents: (связываем множество таблеток со множеством веществ)
pill_id INT
agent_id INT
Проблема в том, что у действующего вещества есть куча синонимов, к примеру: Биотин, Biotin, B7, Vitamin B7, Vitamin H, Coenzyme R, Biopeiderm - это все одно вещество. Ну и еще пачка на русском, латыни и в сокращениях, чтобы я мог корректно распарсить базу таблеток
Напрашиваются таблички:
agents_synonyms:
id INT
alternate_name TEXT
agents_synonyms_join:
agent_id (int)
synonym_id (int)
Насколько это корректно, городить такой огород? База в принципе не важна, я планирую делать на sqlite, но из астрала мне подсказывают, что я насосусь хуйцов и пока не поздно, надо взять что-то модное и молодежное, куда можно срать сразу json / arrays.
Еще момент: по большому счету мне надо просто забить базу, а потом из своих скриптов это мучать. Похуй в каком виде. Для забивания хотел сделать морду, чтобы начинал писать "Biope", а оно выкидывало подсказку-автозаполнение "Vitamin B7 (Biopeiderm)", а то я наделаю сам кучу ошибок. Можно конечно всю логику самому завелосипедить, но:
1. Наверняка есть какой-то паттерн на этот случай
2. Может быть даже есть готовый тул, чтобы свой пхпадмин не писать
3. Если же писать все равно самому, то как логически подружить поле "вещество" с по сути отдельной структурой "синонимы"? Т.е. я должен ввести именно "вещество", но при этом осуществлять поиск в том числе по "синонимы вещества". У меня это в голове плохо укладывается
pills: (таблетки)
id INT
name TEXT
agents: (вещества)
id INT
name TEXT
description TEXT
pros TEXT
contras TEXT
pills_agents: (связываем множество таблеток со множеством веществ)
pill_id INT
agent_id INT
Проблема в том, что у действующего вещества есть куча синонимов, к примеру: Биотин, Biotin, B7, Vitamin B7, Vitamin H, Coenzyme R, Biopeiderm - это все одно вещество. Ну и еще пачка на русском, латыни и в сокращениях, чтобы я мог корректно распарсить базу таблеток
Напрашиваются таблички:
agents_synonyms:
id INT
alternate_name TEXT
agents_synonyms_join:
agent_id (int)
synonym_id (int)
Насколько это корректно, городить такой огород? База в принципе не важна, я планирую делать на sqlite, но из астрала мне подсказывают, что я насосусь хуйцов и пока не поздно, надо взять что-то модное и молодежное, куда можно срать сразу json / arrays.
Еще момент: по большому счету мне надо просто забить базу, а потом из своих скриптов это мучать. Похуй в каком виде. Для забивания хотел сделать морду, чтобы начинал писать "Biope", а оно выкидывало подсказку-автозаполнение "Vitamin B7 (Biopeiderm)", а то я наделаю сам кучу ошибок. Можно конечно всю логику самому завелосипедить, но:
1. Наверняка есть какой-то паттерн на этот случай
2. Может быть даже есть готовый тул, чтобы свой пхпадмин не писать
3. Если же писать все равно самому, то как логически подружить поле "вещество" с по сути отдельной структурой "синонимы"? Т.е. я должен ввести именно "вещество", но при этом осуществлять поиск в том числе по "синонимы вещества". У меня это в голове плохо укладывается
Спасибо, ты прав. Непонятно о чем я думал.
А с поиском, я так понимаю, надо делать отдельную сущность "индексатор", и при индексации таблички "вещества" надо как-то в нее включать и ссылающуюся на нее табличку "синонимы". Ну и уже рисовать виджет для поля "вещества", а индексатор должен будет искать везде. Есть что-то, что можно почитать на эту тему? А то я явно изобретаю что-то готовое.
Совсем никто готовые тулзы для наполнения баз не юзает? Смотрю на всякие https://www.adminer.org/ и не пойму, подойдет оно или нет
ORM - это самому говно говнокодить нада, а мне лень. Мне надо тупо забить базу, а потом уже скриптами ебсти.
Но похоже, даже если оно и существует (как мс аксес?), то пока разберешься, проще набыдлокодить своё.
Типа
SELECT some(title) -- похуй какой, любой существующий сойдет
FROM projects
GROUP BY department_id
Понятно, что можно взять min/max. Но зачем лишняя сортировка, если похуй.
ПЕРЕКАТ >>2052408 (OP)
ПЕРЕКАТ >>2052408 (OP)
ПЕРЕКАТ >>2052408 (OP)
ПЕРЕКАТ >>2052408 (OP)
Это копия, сохраненная 28 июля 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.