И снова это неиндексированный баз данных тред! Тут мы решаем ультраважные вопросы о том, как правильно хранить динамические атрибуты сущностей: в полях или в строках, Рассказываем, как работаем аналитиками и мечтаем стать разработчиками, Строим АНАЛИТИЧЕСКИЕ отчеты в экселе, выгружая по миллиону строк, а потом фильтруя, Дружно не понимаем, ЗОЧЕМ ЖИ НУЖИН ОЛАП, ЕСЛИ И ТАК ВСЕ РАБОТАЕТ ЗАЕБИСЯ, Ищем ошибки в аббривиатурах MDX DMX XMLA, Доебываемся до эс - ку - элей наших же потенциальных конкурентов >Select id from tbl_table_with_id where id = (select max(id) from tbl_table_with_id) >ЧТО НЕ ТАК-ТО У МЕНЯ? Удивляемся, как за знания, приобретаемые за 4 месяца на sql-ex, могут платить по 100к, и бугуртим, что ниасилили и 100к не получаем. А так же: Постгре или постгрес? Май эс ку эль или мускуль? Эс ку эль или сиквел?
В общем, это очередной баз данных тред, поехали!
Награда светит не посмертною медалью, отнюдь Это храм старого формата, так предали огню И скоптили небо старики, что слышны с Невской реки Мы видим дым от костра - "Да здравствуют базовики!"
Также по постгресу вопрос, версии 9.3. Нужно что-то вроде отказоустойчивого кластера. Есть два сервера В идеале один из их будет мастером, данные автоматически будут сливаться на слейв. В случае недоступности мастера (как и где вообще эту недоступность проверять?), слейв берет на себя все его обязанности и, когда мастер становится доступен, сливает свежеполученные данные на него (и передает управление?). Короче, второй день читаю информацию на эту тему, сравниваю варианты репликации и уже реально запутался. Кто-ндь наставит на путь истинный?
>>1167809 Это называется StandBy. Гугли книги администратора postgres на рутрекере. Настрой сначала архивлоги, а потом с этого пляши. Научись эти логи синмать раз в полчаса, например, а после дополни конфиг на стэндбай.
Чтобы безболезненно перейти на новую веосию читай ман про апгрейд, или делай бэкап и разворачивай потом на десятку
Есть одна группа и в ней много студентов. Как мне сделать таблицу эту по нормальному? Но если я сделаю как на пике, мне придется каждый раз писать insert into Группа - и вводить каждый раз имя группы, каждый раз количество и менять только айдишник студента. Это нормальный подход?
запощу и сюда заодно Продолжаю вкатываться, хочу устроиться для начала джуном в бекенд на Питоне. Дошел в своем обучении до баз данных. Что прочитать по ним? Database systems Сиджея и Learning sql ? Или это не то совсем? Что тогда надо?
>>1168008 Связь студент-группа должна быть в отдельной таблице, в этой таблице также должны храниться дата начала членства студента в группе и дата окончания оной (null - если дата окончания неизвестна)
Поясните за PostgreSQL. Чтобы добавить ограничение на колонку нужно выполнить такой запрос: ALTER TABLE products ADD CONSTRAINT some_name UNIQUE (product_no);
student_group_id number student_id number group_id number student_group_date_start date student_group_date_end date
Это самый простой вариант. Можно добавить ссылки на документы, на основании которых осуществлялось включение/исключение в группу, добавить комментарий.
Кстати, количество человек в группе хранить в таблице не надо. Оно рассчитывается в зависимости от даты. Например, на первом курсе было 20 человек, к пятому осталось 8. Тебе нужно узнать, сколько человек отчислилось на третьем курсе, или сколько пришло из академки на четвертом. С такой промежуточной таблицей-связью это легко сделать.
>>1168648 Ну, если впадлу делать что, можешь мою взять с триггерами.
Нужно разработать и реализовать триггеры для операций INSERT, UPDATE, DELETE для проверки сложных ограничений, накладываемых на схему предметной области (не менее двух триггеров для каждого типа операции).
Не менее трех триггеров (любого типа) должны выполнять действия компенсирующего типа в связанных таблицах.
По одному триггеру для каждой операции должны быть триггерами instead of (триггеры должны содержать логику обработки данных - например, выполнение компенсирующих операций, расчетные данные, обработку сложного удаления или обновления данных).
>>1168520 В этом случае имя генерится субд и оно не очень удобное. Не знаю как в постгресе, а в Оракле это что-то вроде sys_12343123.
По ссылке, которую ты выше приводил:
Чтобы удалить ограничение, вам необходимо знать его имя. Если вы сами давали ему имя, то все просто. В противном случае, СУБД назначило автоматически сгенерированное имя, которое нужно найти. В этом может помочь команда \d tablename в psql; другие интерфейсы также могут предоставлять способ инспектирования подробностей таблиц. Затем выполняется команда:
ALTER TABLE products DROP CONSTRAINT some_name; (Если вы выполняете команду с указанием такого имени ограничения как $2, не забудьте, что вам понадобится заключить имя в двойные кавычки, чтобы имя было воспринято как правильный идентификатор.)
Что думаете об этом? Стоит ли пробовать (учитывая, что серваки надо было запустить уже на этой неделе, а я - простая вебмакака без опыта администрирования чего либо)?
>>1169044 Ты серьёзно? Твои друзья вот эти три дядьки:Bartolini G., Ciolli G., Riggs S. Есть же годные доки на сайте postgresql. Первым делом читай про Wall-Ahead Logs ( они же archvie logs) параграф 29.2. Если ты не разберёшься с технологией Standby то можешь налепить скрипт, который на второй машине будет применять эти логи. Да и приятно, когда у тебя бэкап каждый день, а архивлоги делаются каждые 15 минут. Это позволит восстановить сервер если упадёт стэндбай и кто-то повредит базу например на 18:06(а бэкап у тебя в 00:00)
Сама технология Standby основана на передачи redo-журналов по сети другой машине, и там уже применение. Standy это 25.5.
но по сути настроив wal ты вполне легко настроишь standby. Чтобы понять как всё работает и посмотреть все настройки тебе нужно postgresql.conf , и забэкапь этот файл, чтобы если сломаешь его, то сможешь восстановить. По сути если у тебя есть виртуалка, то просто копируешь машину, а потом делаешь из одной main сервер, другой standby. И выпроси хранилище для бэкапов, даже если кто-то заебашит raid-5 тебе будет это нужно.
>>1169450 Работаю ETL-разрабом в развитии DWH полтора года. Oracle + Informatica. Мне норм, как тебе будет хуй знает. Лично мне платят хуево, собираюсь в ближайшее время перекатываться в другое место.
>>1168065 >>1168073 Есть такая профессия, даже не обязательно Data science. Если ты делаешь хуйню для который нужна база, то это типичная задача бэкэнд-разработчика на язык-нейм. Если ты делаешь с нуля или развиваешь ебическую, нетривиальную по объему и нагрузке базу на основе которой будут работать разные хуйни, то это отдельная профессия.
>>1169943 у меня вторая есть как отдельная задача, лол. Проектировка БД. Причём приходится всасывать дохуя документации и иногда недокументируемые возможности, но я вообще программист-архитектор по профессии.
>>1169622 Спасибо, анон, за подробное разъяснение! Вообще с английским не очень дружу, то есть читаю, понимаю, но это занимает раза в 3 больше времени и сил, чем та же инфа на русском. Но книга реально крутая, буду разбираться.
Была мысль поднять по виртуалке на каждом сервере, основа - Дебиан, гостевая - Windows Server 2012 R2, но идея мне кажется дико костыльной, причем хз, можно ли ОЕМ-ключи к винде использовать на виртуалке.
Аноны, поясните мне за оптимизацию SQL запросов в MS SQL. Чо это такое, как это работает? Во допустим у меня есть обычный select * from hui.dbo.vruke where DateTime = "" ну вот мне надо таких запросов послать 12 штук за один раз, при этом разница в них будет только в DateTime - по два часа, то есть первый запрос с DateTime равным 00:00:00, второй 2:00:00 и так далее. И вот чего, как это можно оптимизировать?
>>1170707 Ну эта, сморя чо те надо сделать. Запросы-то не ради самих запросов отправляются, верно? Если ты хочешь получить какую-то информацию за сутки, тебе и надо отправлять один запрос на сутки плюс группировка по 2 часа.
>>1167018 (OP) Планирую начать использовать MongoDB, чтобы объединить в одном месте несколько больших наборов данных со множеством столбцов, где в случае SQL пришлось бы делать много таблиц.
Если это так, то что, кроме упоминаемого Asterix, можно взять в качестве No SQL базы, чтобы можно было использовать команды, схожие с SQL ? Желателен модуль для Python.
Надо вкатиться в базы данных, с чего начать? Я не про учебник, а про само написание кода. Скачал с официального сайта MySQL, он требует .Net framework 4, скачал его с официального сайта, а он уже установлен, но на самом деле нет, и MySQL не хочет ставиться и .Net Framework не хочет ставиться, а я хочу ставиться по вене, анон помоги.
>>1170750 >Если ты хочешь получить какую-то информацию за сутки, тебе и надо отправлять один запрос на сутки плюс группировка по 2 часа. Да неужели получить результат за сутки, а потом выколупывание данных за каждые два часа будет быстрее? >>1170869 >Используй динамический sql Это что такое? Как мне поможет?
когда ты делаешь это динамично, то план составление и исполнения запроса выполняется 1 раз на дохуя данных. То есть ты берёшь и меняешь yoba на что-то другое, например yoba:=mamka. Время на данный select тратится в разы меньше, ведь ты уже делал такую же выборку, анон, да ведь?
Дальше каждая норм СУБД имеет расширенный sql, можешь написать функцию или materialezed view.
Вообще если ты регулярно делаешь такие вопросы, то почему ты не подумал ещё о partition table?
>>Да неужели получить результат за сутки, а потом выколупывание данных за каждые два часа будет быстрее?
Ты не поверишь, но да. Можешь сделать вьюху с этими данными, а потом из перебирать. Вьюха это не только удобство, но и скорость.
>>1171081 блин, это интересно, но мне не ясно, сработает ли в моем случае, я просто задачу упростил, дабы анонов не грузить. Я на шарпе пишу отчеты и тащу данные вот таким запросом SELECT * FROM OPENQUERY(INSQL, 'SELECT aL1_1_2\value, aL1_6_2\value, aL6_1_2\value, aL6_2_2\value, aL7_4_1\value, aP1_1_1\value, aP1_2_2\value, aP1_6_1\value, aP11_1\value, aP2_1_1\value, aP2_1_13\value, aP2_1_3\value, aP2_1_5\value, aP2_2_1\value, aP2_2_13\value, aP2_2_3\value, aP2_2_5\value, aP3_1\value, aP7_8_7\value, aP7_8_8\value, aT1_2_1\value, aT2_1_12\value, aT2_2_12\value, aT24_4\value, aT3_2\value, aT7_8_6\value, aV2_1_7_1\value, aV2_1_7_2\value, aV2_2_7_1\value, aV2_2_7_2\value FROM WideHistory WHERE DateTime = ""FinishTime""'); где в цикле заменяю FinishTime на нужное мне время 12 раз. Вот такое говно как то можно оптимизировать?
>>1171074 >Да неужели получить результат за сутки, а потом выколупывание данных за каждые два часа будет быстрее?
Зависит от структуры базы(особенно индексов) и природы данных. В общем случае так лучше и правильнее. Если же мелкие запросы предпочтительнее, так тоже может оказаться, то их надо делать с bind переменными.
>>1171214 >bind переменные а чо, а как? я просто в ms sql не очень (только на уровне простых запросов и Entity Framework). В двух словах с небольшим примером можно? А то в гугле только про mysql нашел биндинг.
>>1171220 Если ты используешь bind-переменные для запроса , который вызвается несколько раз, то СУБД гораздо, гораздо быстрее разберет и выполнит второй и следующие запросы, используя данные из кэша. Если ты формируешь запрос простой строкой, то с точки зрения субд каждый запрос - уникальный и возникают дополнительные расходы на парсинг и построение плана, кэш не используется. Если таких уникальных запросов много, то ДБА тебе руки не пожмут. Если ты используешь openquery, то там нельзя просто так использовать bind-переменные, вот же говно, не ожидал.
На твоем месте я бы попробовал сделать хранимую процедуру и вызывал бы ее с подставленным в цикле значением (но сначала попробовал бы все-таки группировки. Опять же, зависит насколько часто твой отчетник дергает базу)
>>1167018 (OP) Задание: 1 ($erges: 2008-06-21) Дима и Миша пользуются продуктами от одного и того же производителя. Тип Таниного принтера не такой, как у Вити, но признак "цветной или нет" - совпадает. Размер экрана Диминого ноутбука на 3 дюйма больше Олиного. Мишин ПК в 4 раза дороже Таниного принтера. Номера моделей Витиного принтера и Олиного ноутбука отличаются только третьим символом. У Костиного ПК скорость процессора, как у Мишиного ПК; объем жесткого диска, как у Диминого ноутбука; объем памяти, как у Олиного ноутбука, а цена - как у Витиного принтера. Вывести все возможные номера моделей Костиного ПК.
Анон, поясни за базы данных на графах, например neo4j. Правда, что с ними быстрее селектить джоины? Вообще какие у них практические преимущества перед реляционной классикой?
>>1171584 Джойнов нет, селектов нет. Там используются RDF, RDFS, SPARQL, OWL, SWRL, ну и CYPHER. Что это такое - смотри в интернете. Логика совершенно другая. Возьми OrientDB и попробуй, првда там sql даже очень далек от 92. Но есть возможность запилить граф. Если хочешь область применения - социальные сети. Там это оптимально в отличии от реляционной, и вот подумай почему.
Сап. Посмотрел полторы лекции про индексирование и на вики просмотрел статью. Ничего не понимаю. Можете в двух словах, простым языком объяснить, что это?
Индекс (англ. index) — объект базы данных, создаваемый с целью повышения производительности поиска данных. Что это за объект? В каком формате хранится? Как связан с таблицей?
>>1171884 >Что это за объект СУБД содержит разные объекты - таблицы, индексы, хранимые процедуры, триггеры, вьюшки. Т.е. индекс - это объект, отличающийся от таблицы.
Самая простая аналогия - предметный указатель терминов в конце учебника. По этому указателю ты можешь быстро найти нужную страницу. Например, мануале по автомобилю написано: Топливный фильтр, стр. 30, 55, 100. Если такого указателя нет, то тебе бы пришлось просмотреть все страницы, а с индексом-указателем ты сразу получаешь конкретные номера.
В СУБД одна таблица может иметь много индексов - для разных колонок, содержать внутри функции от содержимого колонок. таким образом есть возможность быстро выгребать записи по самым главным атрибутам. Быстрее всего работают уникальные индексы - для одного значения индекса существует ровно одна запись и СУБД находит такую запись очень быстро. Индексы, для значения которых существуют много записей, работают медленнее (очевидно). При создании индексов нужно учитывать природу данных, примерное количество записей и характер джойнов, чтобы создать ровно столько индексов, сколько нужно, т.к. индексирование полей по которым никогда не будет поиска или джойна - пустая трата места на диске и времени на обновление этого индекса при операциях вставки, удаления, редактирования.
>В каком формате хранится На данном этапе (да и на следующих) тебе это без разницы. Напрямую с индексами при написании запросов не работают, максимум, ты можешь указать индекс в хинте, чтобы СУБД его точно подхватила (может и не подхватить, если он по ее мнению не нужен)
>Как связан с таблицей? Индекс создается на одну или несколько колонок определенной таблицы.
>>1169622 Короче, сделал Hot Standby, слейв льет данные с мастера и доступен на чтение. Но как, и, главное, когда делать слейв мастером и наоборот! Читал про варианты с pgpool, достаточно удобно, но третий сервер для него мне никто не даст. Остается вариант постоянной проверки на слейве доступности мастера и, в случае его недоступности, продвижения слейва до мастера. И наоборот. Пока думаю решить это с помощью наколеночных батников, но вообще не уверен, будет ли это решение приемлимо работать. Очень большое желание вообще забить на все и уволиться, ибо знаний катастрофически не хватает, а процесс настройки затянулся уже более чем на две недели. Есть ли выход из тупика?
>>1172076 Есть система мониторинга в фирме? Просто пилишь в нее тесты, и когда сервер 100% падает, тл перекатываешься на другой. Напиши батники для переключения серверов и кинь на каждую машину. На всякий случай научись быстро отключать слейвы и мастеры, если один из них накроется. И настрой бэкапы на слейве, но не юзай их без необходимости.
>>1172096 >Есть система мониторинга в фирме? "А что это?" Серьезно, только 2 сервака с Windows Server 2012 r2 на борту. Ну там pgAdmin, но не думаю, что он чем-то поможет.
Основная проблема: ок, слейв переключился в мастер. Но когда мастер вновь поднимется, неизвестно же. То есть на момент запуска сдохшего мастера у нас параллельно два мастера. Как его вовремя задемоутить, чтобы не похерить базу? Запускать при загрузке службу только после проверки роли второго сервера? Это за гранью моего понимания.
Бекапы есть на мастере. Настроить на слейве точно так же, вроде, не проблема, это пока даже не горит.
Вообще это моя первая сколько-нибудь серьезная работа в IT, до этого только писал сайтики на вордпрессе и админил локалхосты в гос. учреждении. К понедельнику надо уже предоставить готовый отказоустойчивый кластер, и у меня все сильнее поджимает. Это вообще нормально тупить по 2 недели на таких задачах?
>>1172118 Выпроси сервер на который ты поставишь Zabbix тебе нужно сделать пару вещей, поставить модули забикса на эти серваки, и заставить их общаться. Если понимаешь, что один сервер ебанулся и не отвечает минут 5: то лезешь на машину и включаешь батник, чтобы слейв стал мастером. В это время, если у тебя есть доступ к мастеру, то гасишь деятельность сервера и переводишь его уже в слейв( обычно такое не работает, так как у тебя сеть/отказ системы/подыхание хардов) .
Далее план таков: система мастера воскрешается, если разницы в redo мало, и какой-то уебан не переключился на него во время его отключки и не внес изменения - догоняешь его со слейва, если внес - ищешь scn переключения, откатываешься на него и дожираешь redo со слейва.)
Если все очень плохо - ты же делаешь бэкапы? ) Тебе надо будет восстановить до слейва( поэтому я и написал про включение wal+backup на слейве), а потом поменять их с мастером.
При выгрузке дампа и попытке его импортировать та же самая ошибка.
Посему несколько вопросов: 1) Как non-utf8 текст вообще попал в базу? Postgres при вставке не проверяет кодировку или не конвертирует в server_encoding? 2) Как это можно исправить на текущей бд? 3) Как это можно воспроизвести? Как вставить non-utf8 байты в базу? Я нихуя не понимаю. Это нужно будет чтобы протестировать исправление. 4) Как сделать так, чтобы это больше не повторилось?
>>1172178 Спасибо. А без внешнего сервера - никак? (сервер не выделят, потому что их просто нет, будет мифическая "циска", о которой никакой информации пока нет). Слейв сам может мониторить доступность мастера? Я вижу это так: тот же батник с автоматическим пингованием сервера (или проверкой доступности бд на нем, но это сложнее). Если пинг не проходит некоторое время, то все - становимся мастером. На клиенте (или на "циске", если такое возможно) можно тупо обращаться ко второму серверу, если первый не отвечает. Конечно, он может быть пока еще слейвом и не принять запрос, но это лучшее, что я пока придумал. В общем, мозгов у меня решительно не хватает, походу так и передам начальству.
>>1172194 Ну, клиенту надо как-то проверять доступность. У тебя нет брокера, поэтому есть системы мониторинга, которым можно прописывать сценарий. Вот клиент ебашит на бд, а потос как он узнает, что бд упала и перешла на слейв? Поэтому ставят либо брокера, либо систему мониторинга.
В оракл к примеру на клиенте есть tnsnames в который можно писать куда конектится, если мастер упал. И то у тебя должна быть недоступность мастера, чтобы кто-то не нашкодил. Если есть такой механизм, то все гуд и тебе лишь надо ловить момент когда падает мастер.
>>1172205 Как клиент проверяет доступность: пишет запрос, если он не выполняется, пингует сервак (или что-то там еще), если тот не отвечает, пишет запрос на другой сервак (сервака два, айпишники захардкожены). Это я сам только что придумал, но, думаю, реализовать будет несложно.
Насчет недоступности мастера не понял. Механизма такого, скорее всего, нет, если это не описанный мой выше бред.
Огромное спасибо, что тратишь время на меня. Но, походу, проебу я все-таки эту работу. Не помещается все это у меня в голове.
>>1172273 Инженер-программист официально ) Месяц назад пришел, ну и скинули на новичка то, что сами не знают, как делать. В любом случае, поговорил с начальством, если вообще не будет получаться, наймем какого-ндь крутого ДБА для настройки.
Вот, кстати, на такую интересную штуку наткнулся: https://habrahabr.ru/post/308950/ Там даже исходник есть. Надеюсь, завтра это решит все мои проблемы )
>>1172184 Set client_encoding to unicode По умолчанию стоит. Просто не копируй селекты из интернета в консоль. Он просит у тебя юник, а ты, блядь, кидаешь ему поганный 1251
>>1172308 Если и не так, то никакая база не декодирует в свою кодировку. Смотря какой язык юзаешь, чтобы не мучаться в винде есть ATL конвертеры. У тебя просто какой-то чувау может вводит данные в вин1251 В базе есть функции ascii, decode , encode. Последние для битовых данных.
initdb -E encodename
Автоматическая конверсация из пскл \encode win1251
>>1172042 а можешь привести пример? есть таблица - id, имя, фамилия, отчество, год рождения и т.д. и она привязана через id к таблице техника сотрудника, где поля такие: id техники, тип, модель, марка, серийный номер, номер ЦСО. Как индексация здесь может, что либо оптимизировать?
>>1172335 Сотрудников у тебя, положим, будет десять тысяч человек. У каждого будет по десятку девайсов - итого в таблице девайсов 100 тыс. записей.
Допустим, у тебя есть условный сотрудник Сычев. Ты хочешь найти для него всю технику. Без индекса тебе придется перебрать все 100 тыс. записей в поисках техники именно Сычева. 100 тыс. ради 10 записей. А если базу постоянно теребят даже несколько десятков человек, то все будет очень медленно. А если нужно получить список сотрудников с девайсами, то будет еще медленнее. А если таблица не помещается в память, то добавятся издержки дисковых операций. Теперь создаем индекс для техники по ид сотрудника. В общем случае строки в таблицах хранятся неупорядоченно, а индекс отсортирован (обновление происходит при каждом изменении автоматически). На отсортированном наборе данных поиск происходит очень быстро. Например, чтобы найти двоичным поиском на отсортированном наборе из 1000 записей одну, нужно просмотреть не более 10 значений, а на 100000 - не более 17.
Т.е. вместо просмотра n записей ты просматриваешь log (n) записей.
В СУБД используются более сложные алгоритмы, чем двоичный поиск, но они тоже работают за логарифмическое время.
Итак, мы нашли кусок в индексе, который отвечает за технику Сычева. Теперь СУБД перебирает найденные значения индекса и вытаскивает оттуда указатели на физическое расположение строк в таблице девайсов. Т.е. не нужно перебирать 100 тыс. записей, а берем конкретный блок данных и берем конкретные записи в нем. Доступ к данным проходит на низком уровне, очень быстро.
Так же индекс помогает при удалении Сычева из таблицы сотрудников - нам ведь надо удалить или пометить null все его девайсы и других операциях с изменениями данных.
Воте еще очень простой пример, есть дом на 250 квартир и тебе нужно найти квартиры, в которых есть белая собака. Ты можешь обойти все квартиры, спрашивая, есть ли у вас собака. А с индексом у тебя изначально есть список квартир, в которых есть собака допустим их 20 (это если у нас индекс только по виду животного, кошка-собака-крыса-хомячок-попугайчик, а еще можно добавить в него цвет). Среди 20 квартир ты довольно быстро найдешь белых собак.
>>1172335 Мех. Немножко не так. Будет у тебя 100 сотрудников - будет 100 таблиц? В таблицу техники добавляется айди того, кому она принадлежит. Это проще апдейтить.
Чтобы запилить индекс тебе нужны уникальные айди, которые часто вызываются, но не равны 70% таблицы.
Давай такой пример. У тебя есть таблица с документами и есть битовый признак обработки документа(1). Допустим у тебя 70% обработано и 30% нет. Как ускорить таблицу? Инвертируешь признак обработки, то есть 0 - обработан, а индекс делаешь по оставшимся 30% .
То что ты описываешь скорее всего предпологает индекс-таблицу. Т.е. ты сортируешь данные по ключам. В твоем случае лучше делать ключи связанные с айди техники. Это лучший вариант, да и по айди техники тоже. Но то что ты описал похоже на вложенную таблицу. То ест столбцы , а потом связанный по айди список техники, аля ообд. Либо просто сделать первичный ключ по айди сотрудника, во второй бд первичныц по айди техникт, вторичный айди сотрудника
>>1172419 извините, что туплю. Белая собака в моем примере - это как определенный вид техники, да? То есть будет разумно создать индекс, например, для принтеров LaserJet p9313, чтобы узнать у кого такие принтеры?
>>1172308 >Просто не копируй селекты из интернета в консоль. Ват. >Он просит у тебя юник, а ты, блядь, кидаешь ему поганный 1251 Я нихуя не понел почему ты подумал, что я что-то откуда-то копирую. Просто делаю выборку на рабочей базе. Сама база на серваке под CentOS 7. Подключаюсь по ssh. >>1172316
>>1172584 Да, это как определенный вид техники. Если говорить о второй части вопроса, то индекс создается для колонки, а не для ее конкретных значений. Т.е. если у нас в колонке есть принтеры, сканеры, ксероксы и ноутбуки, то индекс будет содержать все эти типы. Можно, конечно, сделать функциональный индекс вида case when device_name = 'LaserJet1488' then 1 else 0 end но это довольно редкий прием - на каждый вид девайса индексов не напасешься.
Может помочь индекс по виду (принтер, ноутбук, сканер), по фирме-производителю, а можно сделать индекс по модели девайса (точнее, по upper(device_name)) или составной по нескольким полям, поставив более селективные поля вперед. Тут уже нужно смотреть по месту, как и что у тебя хранится и какие запросы наиболее характерны.
Допустим, сделали индекс по upper(device_name), тогда в запрос будем передавать введенную строку поиска в верхнем регистре и получаем набор записей для владельцев девайсов. А чтобы быстро расшифровать ид владельцев в их фио, поможет индекс по ид сотрудников - он будет уникальным и поэтому очень быстрый.
>>1173183 Я не батя, но: >построчное резервирование Нахуя, в чем задача? Нихуя не понятно. Скорее всего ты имеешь ввиду триггер. >хранимая поцiдура с проверкой значений Тоже непонятно в чем подводный камень и зачем. >журнал «кто что и когда делал с данными в таблице» Через триггер. На практике, если такое нужно сделать, то заказчик наглухо ебанутый. Нужно сделать не журнал, а отдельные поля и все это должно заполнятся фронтом. В остальных случаях это бессмысленно. Если тебе нужен аудит юзеров с правами на DML, то ты лох, пидор и нахуй из профессии.
>>1173376 Эй еба-ораклист, ты бд то свою знаешь? 1) локи же есть. Ты просто избалован, так как у оракла это в ядре. 2) через триггер всегда делается 3) аудит средствами оракла, тебе про такое никогда не говорили?
>>1173376 То, что вы на заводилова, дрочите — ПИШИТЕ БЛЯДЬ, ЗУБАРЮ!!! И запрашивайте, данные.
>Скорее всего ты имеешь ввиду триггер. Вот и пиши триггер.
>Тоже непонятно в чем подводный камень и зачем. Игорь, если я ещё раз такую хуйню, услышу — я запишу все расходы на комплексе — на вашу группу. Вы у меня штаны последние продадите.
>Нужно сделать не журнал, а отдельные поля и все это должно заполнятся фронтом. Чо блядь у вас, дерьмократия?! Забудьте нахуй о дерьмократии. Пока у вас каждый кладовщик знает SQL, тут везде тоталитаризм, будет!
>>1173428 Нет потенции — сваливай нахуй, с рынка!!!
>>1173501 ПРОСРАЛИ ВСЕ ПОЛИМЕРЫ!!! ВЫ ПРОСРАЛИ БЛЯДЬ!!!1111ы
>>1173430 >Что плохого в том, чтобы знать историю изменений записи? >Поясни идею с полями, причем тут фронт-енд и тезис о бессмысленности, почему так? Само по себе ничего, ее и хранить в ней можно, но звучит как: "Есть важный ручной справочник и мне нужно знать какая именно макака его заполняющая накосячит, чтоб лишить ее премии". Заполнение пользователем справочника через dml говорит о незрелости процесса. В самой таблице должны быть заполняемые автоматически, скрытые для пользователя поля(кто добавил запись, время добавления итд.), за этим и нужен фронт, АРЕХ, например. >>1173485 >аудит средствами оракла, тебе про такое никогда не говорили? Говорили, но >Если тебе нужен аудит юзеров с правами на DML, то ты лох, пидор и нахуй из профессии. К тому же эта штука медленная и базу нагружает. >локи же есть. Ты просто избалован, так как у оракла это в ядре. Я вообще задачи не понял. Зачем нужно построчное резервирование(репликация что ли?) и причем тут локи?
>>1173533 Apex это фронт? Что же тогда бэк? Штатное редактирование справочников dml? Это где такое есть? Все только через бизнес логику, и неважно где она- в хранимках или на сервере приложений. Да и коннект пользователей в бд под уникальными логинами имхо анахронизм.
>>1173533 >В самой таблице должны быть заполняемые автоматически, скрытые для пользователя поля Не в той же таблице. А в отдельной схеме (schema), с другими правами доступа, создаётся точная копия каждой таблицы.
>>1173538 >Да и коннект пользователей в бд под уникальными логинами имхо анахронизм. Андрей Орлов, «Записки автоматизатора». Читать до окончательного просветления.
>>1173543 Книга хорошая, читал, хотя и не самую последнюю версию. Если что я говорю про то, что коннект в бд происходит под одним логином, но имя пользователя (например, доменная УЗ) при этом передается и обрабатывается.
>>1173533 >>построчное резревирование Том Кайт, штудируй. >>аудит DML Фейербах, Прибыл. Есть безопасность на уровне строк. Плюс кто тебе не позволяет анализировать undo/redo? Аудит можно хранить не на этой же бд, обычно так и делают. Если есть проблема что какое-то говно срет в систему организуешь сбор доказательств включая выборочно аудит скриптов. Если конечно этот ебушка не срет анонимными блоками. То что ты не можешь оптимизировать аудит, это пиздец твои проблемы. Ты можешь сохранять все инсерты/апдейты из системных схем, и переносить их на спец.серверы или во внешний файл, а потом анализировать.
>>1173671 >построчное резревирование >Том Кайт, штудируй. Ты объясни что это или напиши как называется на английском. >Фейербах, Прибыл. Есть безопасность на уровне строк. Хуербах, блять! Если ты не можешь выстроить ролевую модель и процессы так, чтоб тебе не понадобился аудит, то иди нахуй. Придумай хотя бы один кейс где это действительно нужно. >>1173540 Зачем? >>1173538 Есть такая штука как контекст. >Да и коннект пользователей в бд под уникальными логинами имхо анахронизм. Хуясе, поясни.
Почему когда я запускаю MySQL из командной строки: "..MySQL Server\bin\mysql пароль" он вываливается с ошибкой, а MySQL Command line Client работает нормально с тем же паролем?
>>1172906 Что это за прикольная картинка? Мне сказали учить MySQL и там кроме командной строки нихуя нет.
>>1174461 >Да и коннект пользователей в бд под уникальными логинами имхо анахронизм. >Хуясе, поясни.
Провокационное высказывание получилось, выше писал: >>1173642
Речь идет о конечных пользователях, например Светлана Ивановна из бухгалтерии или Аня из кадров. Удобно, если для всех задач они используют единую УЗ. Особенно это удобно если приходится работать с несколькими разнородными БД.
>>1174461 Блед. Я тебе говорю, у тебя построчное резервирование уже в бд есть. Допустим у тебя постят две пидорашки в одну таблицу, и у тебя ебучий айди генерится сам без задвоений. Кайт приводит, что этот пиздец не в каждой бд был и есть, и он охуел, когда узнал что в оракле это есть, а он сам это пилил.
По вторлму пункту. Это нужно, когда у тебя система может быть скомпрометирована, или какой-то мудень решил пошатать целостность. Буквально если ты работаешь в банках, то там в 90% случаях есть бд, которая копит аудит по абс, чтобы ты оптимизировал затраты и смотрел, чтобы пидорашко-программист правильно инсертил или апдейтил справочники. То на что я тебя сослал это RLS. Допустим у тебя есть база клиентов общая, и каждое структурное отделение должно видеть только своих клиентов. Что сделать неуч? Создаст пол каждое подразделение вьюху, а ораклист ебанет RLS. Это простейшие политики безопасности. Позволяет так же следит за аудитом избранных юзеров, а не всех. Просто добавив им еще одну политику. Чтобы не быть голословным пакет dbms_rls.
>>1171047 Как ты обобщил джойны и дистинкт? джойны объединяют таблицы. Дистинкт в результатах выборки отсекает повторяющиеся значения в пределах стоблца, в котором он указан.
>>1174817 >Допустим у тебя постят две пидорашки в одну таблицу, и у тебя ебучий айди генерится сам без задвоений. ПОСТРОЧНОЕ РЕЗЕРВИРОВАНИЕ, БЛЯТЬ! Это называется изоляция транзакций. И как минимум REPEATABLE READ есть в любой современной СУБД. Хотя иногда даже READ UNCOMMITTED включают ради производительности. Б
>>1174817 >Буквально если ты работаешь в банках, то там в 90% случаях есть бд, которая копит аудит по абс, чтобы ты оптимизировал затраты и смотрел, чтобы пидорашко-программист правильно инсертил или апдейтил справочники. Такое у всяких диасовтовских абс на сайбейсе, у оракла ни разу не видел отдельной базы под аудит(и можно ли такое вообще сделать?). В абс макаки инсертят через фронт. У разработчика вообще максимум права на селект должны быть проде и препроде. Такой способ защиты может помочь только от дба. >Что сделать неуч? Создаст пол каждое подразделение вьюху, а ораклист ебанет RLS. Лучше вообще никого в базу не пускать и ебануть отчет в BI, чтоб тетя срака не джойнила таблицу саму с собой десять раз и не вешала базу.
>>1176567 Причем тут питон? Что тебя смущает? Если у тебя разовая загрузка, и все работает за устраивающее тебя время, то все норм. То что не каждую запись коммитишь - правильно. И что у тебя за БД? Например, в Орагле есть специальная утилита для загрузки данных, которая на низком уровне хуячит гораздо быстрее, чем DML. В твоей БД есть такое? Если да, до парси XML до csv например и его скармливай загрузчику.
>>1174668 В какой СУБ это реализовано? В MS SQL можно разве что разрешить группе пользователей ОС входить в SQL, и каждый из них может подключаться под логином винды как trust connection.
>>1176804 >Причем тут питон? Что тебя смущает? Наверное проблема в том что я не до конца понимаю session'ы и вообще "архетектуру" SQLAlchemy. >То что не каждую запись коммитишь - правильно. Окай. >И что у тебя за БД? PostgreSQL, только пару дней назад не без труда впервые накатил на винду. >В твоей БД есть такое?
Я создал генератор. Ебнул 1500 записей, я хочу вставить это в таблицу. У меня же все одинаково, так почему эта ебанутая SQL ругается? Что за криворукие ублюдки ее делали?
>>1176804 >Причем тут питон? Что тебя смущает? Наверное проблема в том что я не до конца понимаю session'ы и вообще "архитектуру" SQLAlchemy. >То что не каждую запись коммитишь - правильно. Окай. >И что у тебя за БД? PostgreSQL, только пару дней назад не без труда впервые накатил на винду. >В твоей БД есть такое? Я не хочу пока лезть во всякие тулзы, мне бы базово разобраться с реляционными СУБД и SQLAlchemy. Хотя похоже SQLAlchemy не очень подходит для такого переноса базы, но я продолжу пердолиться.
>>1167018 (OP) Аноны, такая задача: мне нужно собирать показания с прибора, ~200 цифровых значений каждые несколько минут. Я уже начал гуглить и сравнивать БД для хранения временных рядов, но наткнулся на один пост в инете и задумался: "А так ли нужна мне БД для этой задачи? Могу ли я обойтись файловой системой?". Вот смотрите: 1) Изменять данные не требуется, только записывать и (надеюсь когда-нибудь) читать. 2) Как именно, какими кусками и в какой последовательности данные будут читать я хз, на данный момент сказать сложно. 3) Я могу раскидать файлы по папкам, разделив, например, по месяцам и дням, т.е поиск не станет большой проблемой.
Внимание вопрос: какие подводные?
С многопоточностью проблем вроде быть не должно. Если идея с ФС звучит норм, то какой формат данных подойдёт для моей задачи? csv + gzip (bzip2?), hdf5? Ещё, возможно не по теме, но хочется хранить данные минимум в 2 местах, какую распределённую ФС можно выбрать под эту задачу? Какие вообще используются? Гуглёж показал что существует несколько вариков, да и я сталкивался поверхностно с HDFS, но не хотелось бы лезть в хадуп инфрастракчер.
Как версионировать структуры? Объекты понятно. Хез_мэни вержнс и создаем копию. А что делать со структурами, когда, например, есть конкурс, который состоит из этапов, которые состоят из испытаний. У всего есть свои свойства, последовательность и т.п. Короче структура. И вот она со временем эволюционирует, меняется состав, порядок и сами сущности. При этом есть прошлое, в котором проходили соревнования по старым версиям и есть уже запланированное настоящее, которое хочется при выпуске новой версии тоже проапдейтить. Вот как это блять изящно версионировать? Я понимаю, что ответ достаточно очевидный - копировать и поддерживать целостность. Но может существуют какие-то практики и я просто не знаю.
>>1176987 Спасибо, Анон, буду копать глубже эту тему. А есть опыт работы с этой связкой, или это теоретическая рекомендация? Никогда просто о таком не слыхивал ранее! (тем ценнее рекомендация)
>>1176986 Можешь развернуть свою мысль? У меня была похожая как только сея идея посетила мою голову, но потом она перестала казаться мне такой уж тупой, ведь из всех ништяков настоящих БД мне нужна по сути только репликация.
>>1176941 >Что за криворукие ублюдки ее делали? Вот этот ублюдок накосячил : >>1176941
На самом деле тебе нужно задать явный формат даты для загрузки в твоем скрипте, а не думать, что СУБД сама догадается. Это из разряда good practice. СУБД может разные настройки, а скрипт должен работать всегда. Поэтому распиши преобразование из строки в дату с явным форматом.
>>1177019 Я генерирую данные в другой ИДЕ и просто вставляю. Ну ок, но скорее всего погуглю как правильно формат делать, и просто попытаюсь в кавычки вставить
>>1177532 >все что угодно а чо там выбирать? NoSQL вместо выбора ФС и key+value вместо выбора формата данных, ведь для снятия статистики творческого мигания светодиода на ардуинке постгрес в его случае нинужен
>>117755 Ты Ванга? откуда ты знаешь что нужно в его случае? >~200 цифровых значений каждые несколько минут Ардуина будет генерировать ~овер 6*10^8 значений в год. Если нужен какой-нибудь Ad hoc-анализ "что за хуйня произошла позвачера", то лучше всего запилить выгрузку csv-лога с ротацией. Если нужен анализ с машинлернигом и всей хуйней за 100 лет, то Hadoop. Если за год, то Python + csv-лог в фс. Если нужен отчет в котором будет динамика скорости мигания светодиода в разбивке по датам, то RDBMS-name. Если на основе основе данных ардуины нужна какая-нибудь операционная хуйня с огромным количеством чтений, то key-value(самый невероятный вариант).
>>1177011 > А есть опыт работы с этой связкой, или это теоретическая рекомендация? Есть опыт в разных ситуациях и конфигурациях.
> перестала казаться мне такой уж тупой Сама по себе перестала, видимо, потому что ты её не обдумывал.
Смотри:
> Как именно, какими кусками и в какой последовательности данные будут читать я хз, на данный момент сказать сложно
То есть тебе еще сложно сказать, как у тебя все на базовом уровне будет организовано, но ты уже с каких-то хуёв решил, что с ФС тебе будет лучше работать. Далее ты несешь про какое-то разбивание по папкам, и эту хуйню просто лень комментировать.
Мой тебе совет: бери хоть реляционку, хоть нереляционку, и делай свою хуйню, стараясь не выебываться.
Вопрос по постгресу. Уменя есть колонка в таблице с варчар данными, которые есть обычный json. Типа: {"Lat":"123","Lon":"231"} Суть в том, что мне нужно сделать из неё jsonb, но так, чтобы значения были нумерик, а не текст. Обычный alter, который set type jsonb using col::jsonb переводит в обычный текст (значения в кавычках), а мне нужно от этих кавычек избавиться. Как быть?
>>1167018 (OP) >сиквел Сиквел (англ. «sequel» [siːkwəl], от лат. «sequella» — «продолжение», «приложение») — книга, фильм или любое другое творческое повествование, по сюжету являющееся продолжением какого-либо произведения.
Поясните зачем вообще нужна эта ваша релятивность/реляционность? Вот пришел я такой на первую работу, там был мускуль. Ну я смотрю там все таблицы разбросаны ПРОСТА ТАК, БЕЗ СВЯЗЕЙ, ну я и давай их связывать как дебил. Ну связал и что дальше? Не нельзя удалить юзера какого-нибудь, если не удалил его высеры на форуме например - ок, ну или наоборот можно все высеры разом удалить - удалив юзера? Кайф, ну да как бы, но на деле больше гемора с этим, потому что связи в базе не всегда древовидные, иногда блядь все вообще в цикл закручено и надо через боль и ад что-то менять. В общем как это нанесло мне в юности травму, так я и забил хуй на это всё. Работается нормально в вебе без этого всего в небольших проектах, а связи они главное в голове и в коде. Так собственно мб я что-то упускаю или не понимаю?
>>1179449 > ПРОСТА ТАК, БЕЗ СВЯЗЕЙ Главный вопрос тут такой: зачем вообще брали РСУБД? Господи, сколько я подобных быдлобаз переделал — не сосчитать.
> нельзя удалить юзера какого-нибудь, если не удалил его высеры на форуме например ON DELETE CASCADE. СУБД следит за целостностью данных, а разработчик при создании таблицы не указал политики удаления данных.
> связи они главное в голове и в коде Когда перестанешь делать гостевухи, поймешь, что был неправ. Ну или же если будешь работать не один.
> мб я что-то упускаю или не понимаю? Упускаешь и не понимаешь. Смысла вот только пояснять нет, ибо ты уже выразил скепсис, не разобравшись в теме абсолютно. Либо ты понимаешь, что делаешь, либо нет.
И никто тут особо не против нереляционщины, бородатых адептов Кодда в треде нет. Просто такие ребята и в Монге такую хуету городят, что глаза на лоб лезут.
Господа, посоветуйте что можно почитать по делфи что бы быстро привязать к нему базу данных из 12 таблиц, но так что бы было только одно окно интерфейса. Кнопочную форму я сделать как додумался, а вот сделать все на одной форме в одном окне что бы менять можно таблицу было и запросы туда поставить не могу.
Тебе не нужно искать ответы на свои вопросы, потому что ты веб-макака — пародия на разработчика. Оставь реляционную алгебру специалистам совершенно другого уровня квалификации и продолжай пилить говносайты за мелкий прайс.
>>1179674 Вот тут то и проблема, не могу найти годный пример для этого. Да и я не особо это все понимаю, мне бы вот литературы какой или туторчиков на ютубе что бы с нуля все делать.
>>1179861 Гугли ADO компоненты в Delphi (не ADO.NET, это другое). Сейчас уже не помню подробности, но все необходимое имеется. Можно, например, сделать комбо-бокс с выбором таблицы и отображением результатов в гриде. Можно вывести в грид результаты запроса или хранимой процедуры. И не нужно ничего дополнительно устанавливать (как в BDE), все уже встроено в винду.
Ньюфаг просит помощи. Есть одна таблица sql server и с ней что-то не то. После того, как я создал для неё проект Entity Framework и инсертнул туда строку(нет, хуйни не творил, просто скопировал код из учебника), проебалась индексация по первичным ключам. Теперь это выглядит вот так и не хочет фикситься удалением строк. Что я сделал не так и как это говно пофиксить?
>>1179449 Во всяких dwh вообще нет связей. Такие базы очень больше, со связями кучу задач просто не решить. Связи - это инструмент, использовать его или нет решать тебе.
>>1167018 (OP) Ньюфаг с платиной и ms-sql на связи. Как вы работаете с дохуя количеством данных в интерфейсе? Вот например есть абстрактное овердохуя количество записей (с байтмасивами) и если я попытаюсь сделать просто >select * from zhopa ляжет прога. Так вот, следовательно, максимум пока что я придумал - поставить юзверю 2 поля - с какого поля и до какого поля вывести записи с таблицы, а там он уже сам разбереться. Как вообще это на практике выглядит и как делают местные олдфаги? Есть какой-то сайт с платиновых процедур? Нужна процедура которая выдает таблицу с н-ного начала и до н-ного конца. Есть ли в таблице конкретно № записи, не поле-айдишник, а именно № записи (чтобы циклом в процедуре выше пройти)? Или я слишком заморочился?
>>1182282 > я ее вообще не упоминал Это не значит, что я не имел возможности понять, какой пиздец у тебя там творится.
> не за это спрашивал Тебе нужно решить проблему, я тебе говорю, куда нужно смотреть. Костылями и изолентой можно сделать то, что ты хочешь, но это один из самых тупорылых вариантов. Переделывай, тебе нужно твои дохуя столбцов вынести в отдельную таблицу. Совета конкретнее дать при таких данных нельзя.
>>1182346 >>1182341 Сём, блять, нормально же блять вроде вопросы сформулировал. Какие нахуй блять столбцы ты себе нафантазировал, какая блять впизду вьюшка? Я не за выборку спрашиваю, я спрашиваю за отображение записей в конечном графическом интерфейсе для околоадмина/заказчика и как лучше/правильнее с этим совладать, кроме как выгрузить сразу всю базу, а то на что ты отвечаешь это уже совсем другой вопрос. Или это такой местный тролинг тут?
САП ДВАЧ, Я НЬЮФАГ, КАК НАПИСАТЬ ХЕЛОУ ВОРЛД @ -СХОДИ В КАЧАЛКУ И ПСИХОЛОГУ, ПОБРЕЙСЯ, ПОЧИСТИ ЗУБЫ И КЛЕЙ ТЯНОЧЕК НА УЛИЦЕ @ НО Я ВЕДЬ Я ЭТО НЕ УПОМИНАЛ @ -ЭТО НЕ ЗНАЧИТ ЧТО Я НЕ ИМЕЛ ВОЗМОЖНОСТИ ПОНЯТЬ ЧТО У ТЕБЯ ПРОБЛЕМЫ С ТЯНКАМИ @ НЕ ЗА ЭТО Я СПРАШИВАЛ @ -ТЕБЕ НУЖНО РЕШИТЬ ПРОБЛЕМУ, Я ТЕБЕ ГОВОРЮ КУДА СМОТРЕТЬ
Тащемта я вообще не ожидал что мне тут даже отпишут, лучше чем ничего.
>>1182356 Ты хуйню несешь и никакой конкретики не даешь.
САП ДВАЧ, Я НЬЮФАГ, НО У МЕНЯ ЕСТЬ ЕБАНУТЫЙ ВОПРОС И ЕБАНУТОЕ ПОНИМАНИЕ СУТИ ПРОБЛЕМЫ @ НЕ ДЕЛАЙ ХУЙНЮ, СДЕЛАЙ НОРМАЛЬНО И ПРОБЛЕМЫ НИКАКОЙ НЕ БУДЕТ @ ТЫ ХУЙНЮ НЕСЕШЬ, ЖДУ ДРУГИХ СОВЕТОВ @ НЕ ДЕЛАЙ ХУЙНЮ, ПОДУМАЙ @ ТУПЫЕ АНОНЫ ОПЯТЬ ПЫТАЮТСЯ МЕНЯ ЗАТРОЛЛЕТЬ
Скинешь схему БД — поясним конкретно.
> Вот например есть абстрактное овердохуя количество записей (с байтмасивами) и если я попытаюсь сделать просто > select * from zhopa Почитай описание селекта в документации. Там есть ключевые слова LIMIT и OFFSET. Никто никакую базу никуда не загружает, если не совсем долбоеб. Гугл на твой вопрос за секунду ответит.
>>1182358 Так ладно, попытаюсь по другому пояснить: Мне надо (все столбцы блжад) конкретную таблицу (из которых может выбрать пользователь) вывести для просмотра. Сейчас у меня затычкой в программе стоит > select * from zhopa но, так как записей в будущем может быть теоретически дохуя, я резоно подметил что мое конечное говноприложение может лагать при загрузке/просмотре. И поэтому все что я пока изобрел либо загружать в мою прогу допустим по 1к записей из таблицы либо дать возможность пользователю выбрать по какому-то фильтру (например загрузить с 40 по 1200 запись). И поэтому спрашиваю как выводят таблицу для просмотра местные гуру-аноны.
>>1182362 Либо пагинация используется, либо запрашивается для листинга минимум данных, а при необходимости запрашивается уже и остальное. Никто всё в памяти не держит, это типичная ошибка мудаков, которым лень статьи для самого начального уровня почитать.
>>1182367 > Отобразить же мне как-то нужно изначально Это не требует того, чтобы все в памяти держать. Насколько я понимаю, у тебя там сишарпопараша, наверняка ASP.NET, поэтому кури пагинацию, как у всех остальных. Если все же под десктоп пилишь что-то, то просто таблица нужна, держущая в памяти только определенное «окно» (видимая часть плюс еще по N строк выше-ниже; только не ручками говнокодь, а приложи усилия и изучи гугл на эту тему, чтобы нормальную обертку написать).
>>1182362 если ты хочешь заебаться, то можешь сделать подгрузку, как в крутых TOAD/Workbench. грузишь первые 500, когда пользователь пролистал до 500, то подгружаешь ещё 500. Но если твой заказчик такой мудак, что хочет за раз 10к записей без фильтров, то тебе пиздец.
Читаю статью Ицика, где он правит джойны и объясняет, как всё работает. Может кто объяснить тупому, что вообще происходит после Figure1? Вижу, что он сначала сравнивает иннер жойны, потом сравнивает результат с аутер жойнами и у него что-то там появляются две лишних строки, почему-то ему это не нравится и он чего-то правит. Что вообще происходит? Хуйцов соснул, из пистолета убился, не помогло.
>>1182203 Пользователю дохуя записей в интерфейсе не нужно. Для того, чтобы получить вменяемое количество записей нужны фильтры. Если же все-таки ты думаешь, что тебе нужно таскать из базули тысячи записей для отображения в интерфейсе (на самом деле нет), то посмотри что такое пейджинация.
>овердохуя количество записей >с какого поля и до какого поля вывести записи с таблицы Ты не путаешь поля со строками? Полагаю, что путаешь, потому что динамически выбирать поля для большого списка - крайне сомнительная и странная затея.
Как я понял тебе нужно вытаскивать данные большого объема. Поскольку ты сразу выбираешь сотни записей, то и байтмассивы твои не нужно вытаскивать, пока на то не будет явной необходимости. Т.е процедура для списка должна показать тебе только те поля, которые дают общее представление о записи, а уж потом, когда пользователь выберет конкретную запись - подгрузить объемные данные. Если у тебя можно бегать по записям стрелками вверх и вниз, то есть смысл сделать загрузку дополнительных данных после того, как пользователь постоял на записи 0.2 - 0.5 секунд. Ну или явно по нажатию кнопки подгружать.
Тут не сайт платиновых процедур нужен, а элементарный здравый смысл. Если ты тащишь тысячи записей, то пользователю все сразу, в один момент их никак не обработать.
https://ru.wikipedia.org/wiki/Join_(SQL)#LEFT_OUTER_JOIN >Оператор левого внешнего соединения LEFT OUTER JOIN соединяет две таблицы. Порядок таблиц для оператора важен, поскольку оператор не является симметричным. >Порядок таблиц для оператора важен, поскольку оператор не является симметричным. Серьёзно, блять?
Решил, что пора научиться делать эти ваши БД сам учу Пистон уже 3 месяц, скачал MySQL, получил этот красивый черно-белый терминал. Как получить красивое GUI как на оп-пиках? >>1168478 Верно говорит, и надо эту штуку качать? Или есть ещё что-то более классное.
Так же вдруг оказалось, что я как еблан поставил MySQL 5.Х вместо последней восьмой версии. Скачал ее, а она предлагает обновить shell и connector, но не сервер. Это нормально? Сервер с 5 до 8 версий не менялся вообще что ли?
>>1183232 Так, оказалось что я >>1183150 просто ёбнулся. Вот это >Порядок таблиц для оператора важен, поскольку оператор не является симметричным. Я упорно читал как >Порядок таблиц для оператора не важен, поскольку оператор является симметричным.
>>1183239 консолька оказалась лучше всех gui Окей, начал вкатываться. Почему я могу использовать alias balance в order clause, но не могу в where clause? Так и должно быть или я чего-то не понимаю?
>>1183837 Так и должно быть. order by в последнюю очередь выполняется, ему уже доступны алиасы. Чтобы в where можно было использовать нужен селект из селекта:
select balance from (select avail_balance as balance from account whre status = 'ACTIVE' and avail_balance > 2500) where balance > 300000
Посоветуйте книги/курсы SQL. Когда учился в университете были у нас пары по этой хуйне. У меня что-то даже получалось. Щас хочу пойти работать в процессинговый центр в банк. Там одно из требований знание SQL.
>>1184149 Алан Бьюли, Том Кайт... и практика, практика, практика. И готовься к тому, что на собеседованиях там спрашивают хитрый джойн таблицы с ней же самой, да ещё и с группировкой :-(
>>1184149 Книги хорошо читать как дополнение к практике. Задачки по SQL можно решать на sql-ex.ru если совсем с нуля, то раздел Arcade->SQL на codefighting.
Привет, допустим мне в одно поле нужно положить json, который потом вырастет до 1Мб и больше. Я могу это сделать в рамках sql (хотелось бы mariadb) или нужно переходить на noSQL?
>>1184920 Для этого лучше постгрес взять, там полная поддержка JSON со всеми индексами без костылей. Ну или же документоориентированное что-то, конечно.
сап, программач! помогите нубу - не могу сообразить, мне нужно вычесть последнее значение выборки из первого значения той же выборки? Как это правильно сделать? Мне в голову приходит лишь мысль сделать два запроса с limit 1, а потом уже считать, но наверняка есть более изящное решение(субд mysql)
>>1185473 Так оно и делается. Если есть возможность на стороне приложения кэшировать в какой-нибудь redis крайние значения, то это будет самый лучший вариант. Если нет, то делай вьюху. Еще лучше — материализованную, но для неё нужно будет с триггерами и процедурками поебаться, так как искаропки нет их, кажется. Будешь просто при необходимости обновлять значения в ней. Впрочем, с индексами первое и последнее значение все равно не дорого получать.
>>1184949 Охуеть, все дело оказалось в distinct. Интересно, что у них за проверочная база такая, у которой есть зачем-то одинаковые записи в Laptop таблице. Спасибо за ответ.
Базаны, есть вопрос: Как правильно хранить вектора большой длины (несколько сотен минимум) в БД при условии, что по этим векторам нужно будет осуществлять поиск?
Делаю лабораторную по базам данных oracl c# мне нужно подключить базу данных к вижуал студио когда я пытаюсь это сделать, вылезает ошибка что делать? как исправить? вообще говоря, нужно ли над базой данных производить еще какие-нибудь действия, кроме ее наполнения и написания всяких запросов и триггеров? импортировать каким нибудь образом? я полный профан очень нужен ваш совет
>>1185770 Уточни, что ты под векторами подразумеваешь.
>>1185772 У тебя 64-битное приложение пытается 32-битные либы загрузить. Это невозможно. Либо оракловский SDK нормальной битности ставь, либо сишарпохуйню свою собирай под 32 бита.
>>1185783 SQLite наверное?, потому как будет несколько независимых друг от друга наборов таких векторов и к ним должен быть доступ из мобильного приложения без интернета.предполагается, что пользователь скачивает сразу весь набор и пользуется ими
>>1185800 Мне кажется мы друг друга не поняли. Сущность, хранимая в базе, имеет следующий вид: x,y,z, feature_vector(500) В ходе работы с базой мне нужно будет выполнять запросы типа select * from entities where x = x_value+- error, y = y_value+=error... Так для всех трёх координат и для каждого элемента вектора. У меня стоит несколько вопросов: 1. Хули делать с вектором? Делать 500+3 столбцов кажется странной затеей, как обычно такую проблему решают? 2. Подойдёт ли для этого SQLite в плане производительности? Есть ли альтернативы?
>>1185810 Понял. Тебе тогда лучше две таблицы сделать, наверное, и unique повесить на (x, y, z). У тебя тут классический one to many будет. Если в feature_vector не предусмотрена перестановка мест элементов, то можешь при селекте сортировать по PK, в противном случае придется еще одну колонку для порядка городить. В принципе, если тебе так удобно, ты можешь свой список сериализовать и обрабатывать его в приложении, чтобы с реляционками не ебаться, если тебе не интересно это. Будет всего одна таблица, не нужно будет с джойнами разбираться и все такое.
> Подойдёт ли для этого SQLite в плане производительности? Еще не знает история случая, когда бы на Андроиде производительность в SQLite упиралась. Ты же не бэкенд для хайлоада делаешь, ну.
>>1185824 А что даст уникальность x, y, z? А с сериализацией неплохая идея, я правда хуй знаю, хорошая ли идея постоянно строки разбивать и конвертировать. Надо будет потестить, может лучше окажется в bytearray в блоб засунуть. Спасибо за помощь.
>>1185842 > А что даст уникальность x, y, z? Отсутствие подводных камней с дублированием объектов плюс индексы.
> хорошая ли идея постоянно строки разбивать и конвертировать Видно, что ты с реляционками почти не знаком и сделаешь хуйню. Так ты сделаешь меньше хуйни. Потом всегда будет возможность разобраться в технологии поглубже, но пока что ты будешь хуйней маяться вместо решения задачи. Добра.
>То чувство, когда, работая веб-макакой в довольно мелком проекте, половину рабочего времени тратишь на индексы и дрочь на снижение total cost запроса с 1000 до 950
>>1187446 >Чье рабочее время ты собираешься учитывать? Просто регистрировать время ухода и прихода работников.
>Какие задачи должны быть решены? Учёт рабочего времени: сколько часов в день, неделю месяц, год по отдельным сотрудникам и целым отделам, а так же опозданий и ранних уходов.
>>1187454 >>1187511 Создаётся таблица Сессия, в ней три обязательных пункта "ИД", "начало" и "конец" DataRecievied создаёт строку с ИД и временем в "начало". Если ИД повторяется, то просто добавляется время в "конец".
>>1187773 Какой ид повторяется? Очевидно, что ид сотрудников не должны быть уникальными. Потом по ним дергаешь все рабочие сессии и уже их обрабатываешь, как хочешь.
Читаю этого вашего Алана. Анон, объясни логику здесь. Почему серверу надо прочитать все 24 записи в этом случае? Взял таблицу аккаунты нашел по индексу записи, с соответствующими id и взял из этих записей avail_balance, и все. Почему надо создавать индекс для пар (id, avail_balance) ?
>>1187826 И почему в этом упражнении правильный ответ - создать индекс на пару (дата_транзакции, количество), а не на все 4 колонны вместе, как делается индекс на все используемые колонны в предыдущих картинках.
Анончики, выручайте. Завтра за щеку брать. Как гуглить проблему: У меня сначала в процедуре просто по входному параметру устанавливал поля с разным значением. Теперь я джойню две таблицы и хочу, чтобы в последней я смог поменять одно поле. Как это сделать?
Аноны, а в чём вы схемы рисуете? Мне вот подкинули ТЗ на йобо-фитнесс-приложение и там довольно интересная схема таблиц выходит и что бы не запутаться и контактировать с другими разрабами думаю перенести мысли по БД в графическую среду. Под руку попадаются лишь сомнительные онлайн сервисы, а есть ли что-то десктопное и мощное? P.s. планируем юзать postgresql+mongodb
>>1187773 Турникет понимает, в какую сторону прошел человек - вход или выход? Поля Начало, Конец обязательными делать нельзя - у тебя он даже просто войти не позволит, будет ругаться на то, что Конец пустой. Но это не все - допустим, у тебя выключили свет с утра , всех пустили в обход турникета, люди выходят вечером - никого выпустить не можем.
Я бы хранил так (навскидку, не претендую на абсолютную истину): Таблица pass --Факты входа - выхода
pass_id number --Уникальный идентификатор факта прохода через турникет device_id number --Идентификатор терминала card_id number --Идентификатор карточки пропуска pass_date date --Момент прохода через турникет pass_direction number --Направление прохода (0/1) pass_status number --Статус (ошибка, успешно)
Таблица рабочих сессий work_session:
work_session_id --Уникальный идентификатор сессии employee_id number --Сотрудник work_session_begin date --Момент начала сессии work_session_end date --Момент окончания сессии begin_pass_id number --Ссылка на факт прохода для начала сессии (может быть пустой) end_pass_id number -- Ссылка на факт прохода для окончания сессии (может быть пустой) work_session_begin_user varchar --Кто проставил начало - нужно продумать work_session_end_user number varchar--Кто проставил окончание - нужно продумать work_session_begin_reason_id --Причина начала работы nullable work_session_begin_reason_id --Причина окончания работы nullable
Тут нужно оставить возможность заполнять моменты начала и окончания работы вручную и автоматически (на основе базового режима работы сотрудника)- на случай отказа турникета. Разумеется, если время прописалось турникетом, то изменять его уже нельзя. Т.е. если система видит, что условный Алеша Сычев пришел на работу 5 июня, а до этого он пришел 3 июня в 7 утра и с тех пор не выходил, то она должна свериться с дефолтным режимом работы (допустим 8 часов) и автоматом проставить что Алеша 3 июня закончил работать в 15 часов. У определенной группы пользователей должна быть возможность редактировать эти данные, естественно, с ведением аудита - кто, что и когда менял. Можешь добавить причины начала и окончания сессий - если тебе нужно будет потом отличить отгулы на полдня от прогулов.
Как должна выглядеть БД - вопрос странный. У тебя должны быть таблички фактов прохода сотрудников через турникет, реестр турникетов, реестр карточек, табличка привязок карточек к сотрудникам (с учетом актуальности), реестр сотрудников, реестр отделов, реестр связи сотрудника и отдела. Плюс служебные таблички для статусов, причин и т.п.
>>1188064 Спасибо за развернутый ответ. >Поля Начало, Конец обязательными делать нельзя - у тебя он даже просто войти не позволит, будет ругаться на то, что Конец пустой. Но это не все - допустим, у тебя выключили свет с утра , всех пустили в обход турникета, люди выходят вечером - никого выпустить не можем. Там сетевой контроллер, который не видит разницу между входом и выходом, только факт срабатывания считывателя (очень древняя технология древних).
>Как должна выглядеть БД - вопрос странный. И если честно, мне нужен учёт времени и хранение полученных результатов (по дням, месяцам, годам) и отделам, с учётом того, что люди могут выходить из здания по делам и возвращаться обратно в течение смены. Не хранить же для каждого сотрудника таблицу в 365 дней и рабочими датами?
>>1188080 Если у тебя просто срабатывание датчика, то тогда колонка с направлением движения не нужна - ты ее не сможешь заполнить.
Учет времени и хранение у тебя будет по определению. СУБД для того и нужна - хранить. Если у тебя всего одно здание, то какой поток в день? 1000? 2000? Это все очень маленькие количества записей.
Для каждого сотрудника будет несколько записей на день, да, это нормально. СУБД справится, не переживай.
Что читать после Learning SQL? Что-нибудь по созданию самих баз, как правильно делать таблицы, чтобы все было нормально, как делать БЫСТРЫЕ sql запросы, чтобы выполнялись за 1нс и т.д.
>>1188109 >Учет времени и хранение у тебя будет по определению. СУБД для того и нужна - хранить. А вот как лучше всего это реализовать - я без понятия. Важно же не только хранить, но и получать доступ к хранимой информации. >Если у тебя всего одно здание, то какой поток в день? 1000? 2000? Это все очень маленькие количества записей. 500 примерно.
>>1189360 Ты еще даже со схемой не определился. Чтобы с тобой говорить, нужно её самому за тебя сделать, а потом примеры запросов показывать. Повторяю, никто этим заниматься не будет. Задача у тебя простейшая, за время, прошедшее с создания твоего вопроса здесь, ты бы её уже худо-бедно решил.
>>1189390 >Ты еще даже со схемой не определился. Так мне нужна идея, как это реализовать правильно, а не сами запросы (пока что). Пока что есть идея при создание нового пользователя создавать отдельную таблицу, где один столбец будет общим временем за день, второй - датой этого времени.
>>1189396 > при создание нового пользователя создавать отдельную таблицу Иди, блядь, читай, идеи свои охуительные отбрось и хоть немного разберись в теме. Потом поймешь, как мне тяжело сдерживаться и не покрывать тебя хуями. Ты свое время проебываешь и нихуя не делаешь. Пиздуй, блядь, читать. У тебя задача самого вводного уровня, соберись.
>>1189402 гугли opensource СКУД системы. если получится, то молодец. Вообще что тебе нужно. 1) сделать опозанание где вход, а где выход. 2) Если человек не вышел, то ставить время 00:00, например. 3) додумать закрытие для случая два, если он вышел в 00:00.
Если ты не можешь спроектировать бд, то пиздец, блядь, купи готовое решение.
>>1189396 Вот это круто, на каждую запись новую табличку. Дейтом теперь только подтереться можно, нормальные формы, отношения, кортежи, муть какая-то. Так и делай, анон, потом покажешь, что получилось. Думаю, получится отличное решение, тиражируемое и масштабируемое.
Похоже ты совсем нулевой. Почитай хотя бы как вообще БД используются, хотя бы простейшие примеры как делается список сотрудников. Если ты думаешь, что таблички - это типа как файлики, то спешу разочаровать, это не так. Я тебе даже примеры таблиц написал, но судя по всему ты это вообще не воспринял. Иди на sql-ex.ru, читай все с нуля, тред сохрани, потом (если) осилишь саму идею РСУБД перечитаешь. Пока что тебе особого смысла нет объяснять, у тебя нет элементарных знаний.
>>1189459 Вообще, мне нужен СКУД, мне нужно хранение данных о времени, что бы в любой момент можно было запросить то, сколько часов человек работал в мае 2018 года.
>>1189493 >Вот это круто, на каждую запись новую табличку. Ну так назови альтернативу, что бы можно было хранить данные по каждому дню у каждого сотрудника.
>>1189705 Колонки: id (сессии; автоинкремент, PK), id_сотрудника, время_начала, время конца. Мудак ты ленивый, ты бы уже после первого же тутора для детей понял, как это хранить можно. Но ты всё ждешь, когда за тебя все тебе в рот положат и разжуют.
>>1189718 Нет, у тебя идиотская идея. Никуда время не добавляется. Начинается новая сессия, запросом уже просуммируешь продолжительности сессий, но делать ты это будешь сам.
>>1189719 >Нет, у тебя идиотская идея. Никуда время не добавляется. Начинается новая сессия, запросом уже просуммируешь продолжительности сессий, но делать ты это будешь сам. Так ведь вопрос был и в этом: куда суммировать время так, что бы потом можно было его легко и просто достать.
>>1189704 Еще раз почитай. Там все ключевые моменты есть, но могу еще раз повторить - анализируй сырые данные с девайса и заполняй таблицу рабочих интервалов.
Единственная сложность - это то, что данные с девайса не дают тебе 100% данных для учета, в случае, если девайс на время выйдет из строя, тебе нужно предусмотреть возможность как автоматически, на основе каких-то правил или режимов работы, так вручную, с помощью клиентского приложения, разрулить входы без выходов, выходы без входов и ударную работу по 36 часов во время авралов.
Один из возможных вариантов дальнейших действий: выбираешь стек технологий - СУБД, платформу для бизнес-логики и для клиентских приложений с учетом желаемой архитектуры - простой клиент-сервер или трехзвенка Рисуешь схему данных, создаешь таблички. Пишешь бизнес-логику, она же бэк-энд, прикручиваешь к ней клиентские приложения.
Никаких вопросов про тонкости обработки дат в SQL быть не должно. Это все разжевано в документации к БД.
Котаны, я макакий умеющий в JS. Решил понемногу , для духовного роста, вкатиться в БД. Хочу начать с sql понятно что логичнее с noSql, но все же sql поголовно везде Подскажите какой нибудь sql учебник для самых маленьких.
Помогите с запросом. Есть одна таблица в которой требуется найти дубли по двум столбцам и сгрупировать их. Так вот есть один запрос, выделен на пикче, нужно его оптимизировать-перепилить. Дубли должны находится по колонке CommunicationType и SearchNumber, как и делает мой запрос. Однако, как на выходе не получать лишних "групп"? Например, на пикче есть две группы, но нужно что-бы была только одна т.к. первая полностью входит во вторую, но есть условие что в группе не может быть меньше 2х записей. сори за качество пикчи Очень нужна помощь HALP PLZ
>>1190836 Мартин Грубер Понимание SQL. Дейт - Введение в СУБД. В процессе чтения обязательно задрачивай тысячи запросиков - на sql-ex.ru или на codefight.com в разделе Arcade -> SQL
>>1191384 Нет, это ненормально, а очень и очень плохо.
Связи на картинках не будут нормально работать. Допустим, ты завел 2 типа упражнений с десятком подтипов в каждом, запустил систему, в табличке упражнений появились десятки тысяч записей. Затем ты меняешь в табличке типов название - и у тебя все перестает работать, т.к. записи в Exercise и ExerciseSubType будут ссылаться на несуществующее значение. Запросы вернут 0 записей.
Связи должны быть по первичному ключу - то есть по %table_name%_id. Кстати, рекомендую называть колонку с первичным ключом по такому шаблону, потом удобнее джойнить будет. Добавь primary_key по этим колонкам и сделай ссылки на ExerciseTypeId, ExerciseSubTypeId и т .д. Эти колонки должны заполняться из уникальной последовательности, т.е. если у тебя была запись с Id = 100, потом ты ее удалил и добавил новую, то новая запись должна иметь Id = 101, даже если предыдущая запись получится Id = 99 и эти Id у записей никогда и никем не должны изменяться. Также нужно проставить для колонок-ссылок внешние ключи на таблицы-источники, построить по ним индексы и определить политику при удалении.
Вот тогда с точки зрения связей все будет правильно.
Но есть еще один вопрос - в Exercise есть ссылка на подтип и на тип одновременно, причем подтип может иметь только один тип. То есть, хранить ссылку на тип - избыточно, ты ее всегда можешь вычислить из подтипа.
И еще один момент - предлагаю тебе объединить табличку типов и подтипов в одну. Во-первых, по сути это и есть одна сущность, во вторых - ты можешь строить иерархии с глубиной больше 1, в третьих меньше кода придется писать.
Будет это примерно так:
ExerciseTypeId number ExerciseTypeParentId number ExerciseTypeName ExerciseTypeDescription ExerciseTypeBegin date --дата начала действия записи ExerciseTypeEnd date --дата окончания действия записи
Последние две колонки дают тебе возможность легко вести историчность записи, например, Тип стал неактуальным и его теперь не используют. Однако удалять его нельзя - на него ссылаются множество упражнений. Устаревшей записи проставляют ExerciseTypeEnd, при показе данных из справочника проверяется дата и показываются только актуальные - либо с не наступившей датой окончания, либо с пустой.
Резюме - убираешь табличку Подтип, в упражнениях оставляешь ссылку только на тип, табличку Тип делаешь иерархическим, делаешь первичные ключи во всех таблицах, связи переделываешь на первичный ключ, добавляешь внешний ключи, индексы по ним.
Советую посмотреть книжки из поста выше - судя по твоей схеме тебе будет крайне полезно, узнаешь много нового.
>>1191407 1. Понял про ключи, спасибо(дело в том, что я ORM юзаю, и тут с этим проще, оно само привязывается к primarykey unique с автозаполнением). 2. Можешь чуть подробней пояснить про типы/подтипы в одной таблице? P.s. Спасибо за книги
Репощу тут. Есть около 50 миллионов записей по ~килобайту, нужно запилить удобный просмотр, сортировку и т.д. Вопрос по производительности. В идеале бы запилить в вебе чтоб не таскать везде БД, но я так понимаю с таким размером нужен оверпрайсный сервак если больше 3.5 человек будет пользоваться? На какие вообще скорости рассчитывать и сколько сожрет оперативки? В локальной БД же нормально будет шевелиться или на рядовой кофеварке 2ядра/4гига тоже будет больно?
ситуация: есть одна sqlite3 бд, в ней 130+ таблиц. В эти таблицы постоянно пишется дата, которая парсится с некого api. В тоже время, из этой базы берется эта же дата на обработку. То есть постоянные insert'ы и select'y.
>>1191636 > SQLite Заменить на что-нибудь более серьезное. Остальные оптимизации не подсказать без экстрасенса, да и бесплатно никто не будет этим заниматься.
>>1188501 >Тома Кайта Гугл выдал 6 учебников по ораклу, который вроде как не надо использовать потому, что он охуенно мощный и дорогой. В общем адская дрочильня для серьезных заданий, а не для вкатывальщика. Мне бы что-то по MySQL, Postgre или по SQL вообще. Именно как делать все не только select, join а ещё например создание юзеров, таблиц, процеры какие-то, о которых у Алана ни слова, зачем, и как делать это быстро.
>>1191646 поглядел кучи рецептов по ускорению, вплоть до эксплоитов на плюсах, кажется. Индиксация мне не подходит, потому что постоянный Insert. Думаю, остановится на многопоточности и реализации шаблона consumer. Еще говорят, есть кучи конфигов, которые не гонятся за производительностью. Может быть вместе и сработает. Ну а еще докучи буду писать в память и только читать. Раз в какое-то время дампить в базу на диске. какие подводные?
>>1191908 1) Какое отношение инсертов к селектам? 2) Каков процент фуллсканов больших таблиц в селектах?
3) Выбрасывай нахуй sqlite и меняй на оракл или postgre. Sqlite исключительно однопоточный и писать туда во много тредов что намеренно ссать себе на лицо.
>>1191917 >меняй на оракл или postgre - инсерты к селектам: 1 к 3 - 135 таблиц в бд. По 7M полей. Фулом не обхожу. Все вычисления из последних сотен тысяч. так и поступлю
>>1191937 Ты через жопу свои охуительные идеи описываешь. То, что ты озвучил, больше похоже на базу в tmpfs. С кэшированием данных иногда все просто, а иногда сложно и почти бесполезно, поэтому нужно смотреть по задаче. Вот я и спросил.
>>1191955 зацените на грани бреда: а что если, я сделаю каждую работу с таблицей как отдельную базу данных? И буду в 135 потоках ебашть в них асинхронно? Ну и запрашивать в этом же потоке. Может так быть? все на питоне
>>1191928 Я траллел, а ты не понял. >>1191930 > - 135 таблиц в бд. По 7M полей И как sqlite работает? Не лопается к хуям? >>1191954 Ты мог бы посмотреть в сторону игнайта, тебе и встроенный кэш, и SQL какой-никакой, и масштабирование до плюс бесконечности, и встроенные мап редьюс операции близко к данным, но у тебя объемы крошечные, поэтому бери постргре и успокойся. >>1191960 Ебаклак просто. Возьми любую базу данных, которая нормально поддерживает многопоточность, не обосрись с блокировками (вдруг), обеспечь, чтобы твоя приложуха срала и жрала говно с БД также многопоточно и все будет хорошо.
>>1191452 >2. Можешь чуть подробней пояснить про типы/подтипы в одной таблице?
Да вроде все сказал, куда уж понятнее. Когда у тебя рубрикатор в виде дерева, ты можешь поддерживать вложенность любой глубины, хоть 10 уровней. В твоем варианте ровно два уровня. Через две недели после запуска к тебе придет Машенька из отдела маркетинга и скажет - "а неплохо бы нам сделать три уровня для упражнений". И твоя схема поплывет - как в части рубрикатора, так и в части его использования - теперь у тебя для одного подтипа получается три уровня иерархии, а колонок только две. Нужно делать новую таблицу, новую колонку, новую форму, новые запросы и т.д.
А когда все в иерархической структуре лежит, то тебе все нужно написать один раз. Конечно, код получится немного сложнее, но его в итоге будет меньше. Максимально возможную глубину иерархии ты можешь вынести в конфигурационную табличку, если нужно жестко ограничить пользователей тремя уровнями, например.
В табличке Упражнения будет ровно одна колонка с ссылкой на запись в типах. Из нее ты всегда можешь развернуть полную иерархию.
Если что-то непонятно, то задавай более конкретный вопрос.
>>1192157 Мне надо хранить текст, созданный с помощью react-draft-wysiwyg. Функции для рендера и конвертации одно в другое там есть. Хочу хранить в JSON потому что в СУБД, которую я юзаю (PostgreSQL), есть полноценная поддержка работы с ним.
>>1192162 > Хочу хранить в JSON потому что в СУБД, которую я юзаю (PostgreSQL), есть полноценная поддержка работы с ним. Дядя, ты дурак? Ты будешь делать запросы к отрендеренным постам в бложике? Отвечу: не будешь. Хуйню думаешь, думай ещё.
>>1191303 вместо dense_rank() юзай row_num() over (partition by communicationtypeid order by number. потом обобщай запрос и отсекай те записи у которых row_number() будет > 1.
Есть одна БД. она прикручена к спрингу но не суть Смысл: есть юзеры. у юзера есть возможность создавать таблички(проекты?) в программе. Например табличка нравится / не нравится. Записей может быть разное количество. Нравиться 5, не нравиться 8 и т д. Количество записей в каждом проекты может варьироваться. То есть типизировать проекты и записать в 1 не получиться. Как сделать БД? Разбить каждую запись в отдельную таблицу? Объединить все к хуям в большую?
>>1192473 У тебя тут получается обход дерева, по сути это и есть сортировка, только по особым правилам. Если у тебя ровно два уровня, то можно и самоджойном обойтись, а если уровней несколько может быть, то нужно рекурсивно обходить.
Причем у тебя иерархия в обратном порядке задана, там еще аналитическую функцию нужно будет сделать для такой сортировки как тебе нужна.
Если у тебя всегда ровно два уровня может быть (т.е. в твоем примере 3 на втором уровне и у этой записи thing_id всегда пустой), то это проще сделать.
>>1193172 лучше разбить номер на все составные: регион int, оператор int, номер int. Дальше можно реляционные таблицы сделать к оператору, регионы и тд. Это в случае, если тебе нужно максимально быстро делать выборку
>>1193430 У меня нет такой выборки. Храним в базе просто номера клиентов. Для смс рассылок достаточно, у нас тем более клиентов всего 30к и все из РФ, поэтому не имеет смысла.
>>1193444 Мальчик, ну ебаный в рот, я конечно понимаю всё, но не учи отца ебаться. У тебя еще молоко, а может и не молоко, на губах не обсохло, когда я начинал с sql работать.
>>1193478 Разменял 4 десяток 2 года назад. По заданным тобою вопросам ответа не знаю. Извини меня пожалуйста. Мне нечем заняться в воскресенье вечером. Я одинок и мне грустно. Одна отрада траллить на харкаче.
>>1193481 Просто удивился такой реакции на безобидное предложение.
Я в твоем возрасте (сейчас 38) тоже один был, тоже грустно было, а сейчас вспоминаю те времена - свои плюсы тоже были. Сейчас у меня другая крайность - семья, дети мелкие, никуда толком не выбраться в одно лицо, заботы, хлопоты и рутина, только на дваче урывками и сидеть осталось.
>>1192450 Сам себе не ответишь никто не ответит Появилась идея сделать не каждую отдельную таблицу на каждый тип проетка юзера, а сводную по всем полям всех проектов. Насколько это хуевая идея? Почему то навикет импортирует эту хует в 10й постгресс с ошибками, Реквест на другой проектировщик БД с экспортом
>>1193521 Просто не совсем понятно, что ты хочешь сделать, анон. Да, можно все атрибуты описать в одной таблице, есть такой подход. Погугли Entity-Attribute-Value. Но нужно понимать, что это далеко не панацея и у этого подхода есть серьезные минусы.
>>1193531 >Entity-Attribute-Value Сейчас загуглю. Спасибо. Хоть будет откуда копать. Несколько видов сущностей, которые могут отличаться между собой количеством полей, и каждое поле не обязательно...и количество не регламентировано. Как список за / против составляется. 2 колонки - 1 за 1 против. И там и там есть какие то записи. Их может быть произвольное количество. А в другом варианте еще появляется произвольное количество колонок..
>>1193888 Не ругайся. Достаточно адекватный вопрос для треда. В начале не всё интуитивно понятно, и системный подход к обучению тут тоже не сразу начинает работать. Он же не просит схему на %курсовая_нейм% ему быстро накидать и объяснить всё.
>>1193880 Спасиб, решил вопрос так: SELECT table2.Value FROM table2 LEFT OUTER JOIN table1 ON table2.cID = table1.cID WHERE table2.cID = 1 GROUP BY table2.cID
Анон!!! Помоги, пожалуйста. Заставили срочно посчитать количество записей за один определенный месяц, причем количество по значению типа. Вообщем на сколько я смог додуматься это select type, count() from table where time >= to_date('01.01.2017') and time < to_date('01.02.2017') group by type; Но блин проблема в том, что уже 71 минуту считает, а результата нет. Там таблица по фрагментам разбита, например я знаю что можно сделать запрос по одному фрагменту select from table partition(p_01_01_2017) но как сделать запрос по диапазону фрагментов??? Или как иначе можно ускорить??
Анон, принеси мне эту книгу плз. Понял начала все эти, селекты, джойны, хочу более сложных вещей. Вот тут https://www.datapine.com/blog/best-sql-books/ Ее советуют. А ее нет нигде. Что гугл, что яндекс забиты одной рекламой лол. Остальные книги без труда нашел, а эту не могу. Ну или может что другое посоветуешь почитать, про серьезные дела, чтобы я не пошел на работу, умея только джойнить свой анус в селект ерохи.
>>1195893 >>1195548 Двачую, наверняка на time индексы не повесили и СУБД шагает по абсолютно всем строкам. Но индексы у тебя ещё дольше будут делаться, поэтому жди окончания запроса или делай как >>1195969 -кун говорит.
>>1195893 Там все нормально я думаю настроили. Это я просто не умею пользоваться >>1195969 А что такое range для partition? >>1195970 >>1196105 Я не знаю даже что это такое...
Вообщем ночью придумал запрос выполнять по каждому фрагменту таблицы по отдельности. Прикинул что в одном месяце 30 дней, то есть 30 фрагментов. И сидел запускал 30 раз ночью такой запрос:
select /+ parallel(32) /type, count(*) from table partition(p_01_01_2017) group by type;
Потом результат каждого вставлял в librecalc. В конце в librecalc просуммировал формулой всех 30 дней значения и получил результат за месяц. Для ускорения использовал parallel, хотя его запрещают использовать почему то. Надо все таки как то фундаментально этот sql выучить, а то так запаришься. Всем спасибо за помощь, пацаны!
Допустим есть таблица с постами: post_id, post_text таблица с тегами: tag_id, tag_name и таблица связей tag_id, post_id
У меня вопрос, как мне селектить все посты, что бы к каждому посту еще и массив тегов летел в каком-то виде? Желательно что бы каждый тег еще был отдельным элементом, а они не были склеены скажем в строку, спасиб.
>>1167018 (OP) У нас бэкэнд на MongoDB. Нужно хранить в БД оче большие файлы. Требуется собирать файлы по частям перед заливкой в бд. Оказалось, что это требование возникло из-за того, что GridFS не позволяет обновлять файлы в базе (дописывать к ним байты). Есть ли NoSQL СУБД, в которой реализован аппенд к файлам,уже хранящимся в бд? Как с этим дела в CouchDB?
>>1196568 Тип сделай описательный. Либо запрос с order by post_id Либо сделай анонимный блок, который будет тебе возвращать в loop селект от айди поста и все теги столбцом для этого поста.
>>1196694 Монго же большие файлы вообще хранить не умеет. Пробовал хранить не сами файлы, а ссылки на них? А для ссылком развернуть распределенную файловую систему?
>>1196703 >Пробовал хранить не сами файлы, а ссылки на них? А почему все бд не делаю так? В чем профит хранить сам файл в БД вместо какой-нибудь строки "c:/yoba/cp/peperoni_pizza.png" ? только вкатываюсь
>>1196703 >>1196704 Сказали, что недостатки монги мимо нашей задачи. Хранение файлов в распределенной ФС позволяет их редактировать. А нам нужно запретить редактирование. Но при этом надо позволить скачивать эти файлы.
Целый час думал об этом. Я правильно понимаю CAP утверждение? 1)Оно о distributed data storage. То есть каких-то баз данных, которые разделены между разными компьютерами. А то я сначала не понимал, как, выбрав Availability, кто-то сможет получить ответ от моей БД, если она только на 1 моем пк расположена и в данный момент лежит мертвая. 2)Consistency значит, что запрашивающий будет получать самую новую информацию, up-to-date то есть. Я пока пишу\учусь только на своем 1 пк, но я предполагаю, что в серьезных ебах видимо есть куча нод, которые принимают-отправляют транзакции, а есть какая-то группа главных еб, которая занимается сбором и учетом транзакций с остальных нод. И при выборе consistency мы или получаем от ответ от одной из главных нод, где учтены все изменения, либо идем нахуй, если нода лежит. А при выборе availability мы обращаемся сначала к главной ебе, если она не отвечает, то к ебе поменьше, и так, пока не получим ответ. Даже если он немного устарелый и в нем не учтены все транзакции. Это так работает? Я все понял? Если я вкатываюсь в джуна, мне достаточно пока иметь это представление , и не пытаться понять, как вся эта адова машина работает на практике в серьезных предприятиях?
Ещё, я правильно понял, что consistency в CAP означает то, что я сказал - up-to-date информация. А consistency в ACID означает, что в бд есть защита от умников, которые в поле "возраст" вместо целого числа попытаются забить "23.5" или строку "23 с половиной годика"?
>>1196880 select r2.role_id, r2.role_name from (select user_id from app_user where условия на одного юзера) u inner join user_role r1 on u.user_id = r1.role_id inner join app_role r2 on r1.role_id = r2.role_id;
>>1196951 Там сложные запросы все равно надо писать. Легкий да. Xui findByXui(String s) и все А сложные оборачиваешь в аннотацию и погнал писал на диалекте хибернейта. Но все равно весь бойлерплейт за тебя делается. Не гемора как в чистом JDBC.
Чет PostreSQL посложнее MySQL. Я правильно понимаю, что ситуация такая: 1) У MySQL есть удобный интерфейс для запуска сервера - Notifier - где можно просто жмякнуть 'start server' и все заработает, но приконнектиться к нему можно только через консольку mysql.exe. 2) А у PostgreSQL наоборот - надо сначала создать БД через initdb, потом запустить через pg_ctl, но зато есть охуенный графический интерфейс в виде Pgadmin хотя можно и консолькой через psql?
Вопрос: почему об этом нигде не написано? В MySQL в первой же книге на первых страницах: "вот так запустить, вот так подключиться, чтобы писал sql запросы". А в PostreSQL "есть psql, есть pgAdmin, иди нахуй". Нашел только в оф документации всю эту инфу про initdb и pg_ctl. Может я не там ищу и не то читаю, анон? Подскажешь что-нибудь другое? Я смогу запускать сервер через pg_ctl только? Просто офф документация описывает ситуацию на Линуксе с созданием другого юзера вместо рута, который будет запускать postgres.exe. А я на шинде, у меня тут такого нет.
Кстати, почему мой сервер уже делает по 5 транзакций в секунду? Я даже никаких команд ему не пишу. Что он там самостоятельно крутит?
>>1197157 >Кстати, почему мой сервер уже делает по 5 транзакций в секунду? Я даже никаких команд ему не пишу. Что он там самостоятельно крутит? Твой сервер майнит кому-то битки.
>>1197250 >Все бд через консоль включают Да я и не против. Просто у MySQL сразу сказали, что и как сделать. А у постргреса вообще никаких упоминаний об этом. Сиди и ищи в документации сам.
>а ты еще все это на винду накатил, долбаеб. Кстати, что с этим делать? Пикрил. Каким хуем вообще "кодовая страница консоли отличается от основной"? Кто это придумал? А почему не сделать вообще случайные кодовые страницы для каждой итерации запуска cmd? Ну и дальше, я меняю кодовую страницу на указанную, и что? Сообщение об ошибке psql не выдает, но я получаю нечитаемую хуйню. И как мне жить теперь?
Так получилось - я столкнулся с windows xp. Под неё нужен mysql (mariadb) или любая БД. Майсиквел версию не могу найти последнюю под ХР. Анончики, выручайте.
Допустим, у меня есть отчёт на БД Oracle, который я хочу продублировать из SSRS в Tableau. Это BI инструменты и вам их знать совершенно не обязательно, мой вопрос будет про оракел. Текущая реализация в SSRS: несколько процедур с выходным параметром типа sys_refcursor. При перекате на Tableau я столкнулся с проблемой: в неё нельзя передать курсор из процедуры, только обычный SQL запрос. Мне не хочется копировать эти запросы втупую. Во-первых, я не уверен, что мне удастся избавиться от PL/SQL полностью, во-вторых, я хочу, чтобы весь код был в одном месте. Напрашивается использование pipelined function. Оцените, пожалуйста, эту идею с точки зрения производительности и трудоемкости. sys_refcursor vs pipelined function
>>1167018 (OP) БД-бояри взываю Вас. Вообщем есть бд в фокспро, нужно ее перетащить в пхпмайадмин делаю экспорт бд4 кодировка 1252(или какая она там) вообщем пхп орет что >#1064 - У вас ошибка в запросе. Изучите документацию по используемой версии MariaDB на предмет корректного синтаксиса около '?v????' на строке 1 крч какая то залупа. Вопрос можно ли как-то открыть код бд и поглядеть его блокнот и нотепаде не помогает я хз у же че делать
>>1198242 хех, вот в этом и прикол мб слышал о такой штуки как ЕРПИ ГАЛАКТИКА так вот выгрузка идет с нее, но о коде и речи и не идет, она автоматически создает бд и туда вбивает все нужные данные, такие вот дела
Продолжаю изучать постгрес. Смотри анон, какая штука (я даже подчеркнул). Вопрос, почему если я сделаю reject для строки под IPv4, я все равно смогу подключаться к бд, а если под IPv6, то нет? Ведь если я сделаю IPv4 reject, то при проверке подключения к бд эта строка будет проверена первой, и должна тут же отключить меня. Там же адрес 127.0.0.1, это же и есть локалхост, когда я подключаюсь к бд с того же компа, где ее сервер крутится.
>>1198272 чет пхпмайадмин говорит что хуй, так как при создании она использует устаревший ситаксис, и на это админ ругается, и вот ебя труп пытаюсь ее затолкать в пхп
>>1198273 >Она проверяет все строки. Нет такого, что проверил одну и дропнул. Но ведь подчеркнутое говорит обратное: как только попадается подходящая строка, проверяет только по ней, и если что не так - дропает. Вот я думаю, что сервер и должен проверить по IPv4 просто потому что он выше в файле и сразу дропнуть. А он почему-то дропает только если указать reject в IPv6. Может я чего-то не понимаю, и почему-то подключение к самому-себе не подходит под 127.0.0.1/32 ?
>>1198273 >Поставь себе линукс уже В соседней доске посоветовали виртуальную коробку и на нее линукс сверху. Попробую в скором времени.
>>1198273 > книг насоветую Было бы неплохо. Взял Learning PosgreSQL by Juba, но кроме первых двух глав она никакая вообще. Читаю документацию.
Допустим есть посты. У постов есть всякие стандартные атрибуты как id, author_id, time, body и т д.
Далее у постов могут быть картинки, допустим как на дваче, до 8 картинок к посту. Картинки лежат соответственно в отдельной таблице и там id, post_id, file_name например.
Далее есть теги, теги тоже лежат в отдельной таблице: id, tag_name Ну и так как тегов у поста может быть много, и 1 тег может быть у нескольких постов, то есть еще таблица связей вида: id?, tag_id, post_id где свалка many_to_many организована.
Что бы еще такого приплести, допустим у постов есть комментарии - пусть просто нечто вроде урезанных постов без картинок и тегов, но у комментариев есть авторы, то есть в таблице с комментариями всё выглядит как-то так: id, post_id, author_id, body.
Теперь собственно вопрос, желательно для опытных ребят, как бы вы организовали запросы в такую базу? Начать можно с простого варианта, где скажем нужно заселектить 1 пост. Изи можно приджойнить к нему автора, а сопутствующие вещи такие как картинки, теги и комментарии+авторов комментариев можно параллельно запросить отдельными запросами, вместо того что бы писать монстр запрос, который я даже не знаю как будет выглядеть.
Но что делать, когда у нужен допустим список постов какого-нибудь автора со всей вот этой сопутствующей мишурой (теги, картинки, ответы), тут уже просто невозможно выкрутиться подобным способом: не будешь же потом в цикле для каждого поста слать по 3 дополнительных селекта? Если у тебя постов скажем много? Как с подобными вещами работают? Как вообще с такой базой подружиться?
>>1198372 Обычные селекты с джойнами. Такие вещи делаются в рамках одного запроса, СУБД это быстро прощелкает. Это уже с действительно сложными запросами имеет смысл дробить запросы и считать что-нибудь в приложении, но у тебя дженерик вебпараша, где подобных проблем не существует.
Накати ORM, включи дебаг запросов и смотри, как там такое делается. В начале пути очень может помочь. Но не увлекайся, потому что учить SQL и учить ORM — очень разные вещи.
Использую в своё сраном дипломном проекте встроенные сортировки и поиск из mysql, а мне надо их надо как-то описать, да ещё и сложность вывести. Какой воды можно налить страницы на две хотя бы?
Такие уж дела, дорос до того, что на продакшене надо обновлять структуру с БД, но тупо снести все к хуям и выполнить запрос на создание таблиц не выйдет. Ибо нужно сохранять данные, ибо сервисом уже активно пользуются и потеря данных недопустима.
Поэтому нужно мутить какой-то механизм миграций. Есть 2 пути. Разработка через миграции. То есть, когда-то создали некий baseline.sql с первоначальной структурой, а дальше ТОЛЬКО хуячишь файлы миграций с изменениями структуры и данных. Этот подход плох тем, что, во-первых, писать эти изменения надо вручную. В итоге я нихуя не вижу текущую полную структуру БД. Сейчас у меня вся структура в одном файлике, я целиком и полностью вижу все таблицы. Я я именно проектирую БД, а не пишу ссаные миграции.
Тут бы нужен некий инстурмент, чтобы я все так же описывал структуру в файлике, а эта ютилита брала предыдущую версию файлика и текущую и выдавала автоматом запросы sql, позволяющие получить новую структуру. То есть, грубо говоря, нужен инструмент, который позволит автоматически создать sql-запросы, позволяющие из файла1 получить файл2. Тогда бы технически вся разработка была через миграции, но я бы не пердолился с написанием этих самых миграций (максимум, проверял бы их корректность), а занимался именно изменением одного файла.
Короче, я хочу миграции, но не хочу вручную их писать. Какие могут быть решения? СУБД MySQL.
>>1199020 > Тут бы нужен некий инстурмент, чтобы я все так же описывал структуру в файлике, а эта ютилита брала предыдущую версию файлика и текущую и выдавала автоматом запросы sql, позволяющие получить новую структуру. В жизни бы такую хуйню даже из любопытства не трогал. На проде с большим количеством данных вообще только вручную ебашить, если у тебя там не переименование столбцов.
По теме ничего сказать не могу, из всех мокрописек вокруг СУБД использую только автоматические рисовалки схем — и то схемы удобнее в текстовом редакторе накидать.
>>1199081 Посмотри EXPLAIN запроса и прикинь. Только данных побольше захуячь, потому что индексы СУБД на трех с половиной записях использовать даже не подумает.
>>1199020 Если мсье проектант ленится сохранять промежуточные скрипты ddl, то пусть изволит проследовать сюда: https://dev.mysql.com/doc/workbench/en/wb-design-schema.html или пусть погуглит db schema compare tools. А еще пусть не выебывается и сохраняет скрипты для каждого вносимого изменения в упорядоченном виде, в системе хранения исходников.
>>1199179 Спасибо, уже понял, что один хуй нужны скрипты миграций и так или иначе они необходимы, буду писать я их сам или генерить. Скачал этот workbench, уже обрадовался что можно быстро сгенерить запросы миграции, так эта хуйня откуда-то фантазирует несуществующие маня-ключи. Что это вообще такое? Таблица вообще не менялась.
Как так, почему это matte of style? Ведь при втором мы проверяем каждую строку и, если она подходит, добавляем в result set, потом проверяем весь result set на where. А при первом мы делаем декартово произведение, возможно получая огромнейшую таблицу 10кк*10кк, а потом проверяем это адовую огромную ебалу на where. Или нет? Планировщик запросов сам во всем разберется, и джойны надо делать только там, где без них ну вообще никак не обоитись? Но таких ситуаций нет.
>>1199493 Это просто разный синтаксис. Запросы дадут одинаковый результат.
На то он и SQL - язык для менеджеров, чтобы можно было быстро таблички посмотреть без привлечения программистов, поэтому ты пишешь что ты хочешь получить, а не как. СУБД разберется.
Сап двач Есть одна бд SQLite. Там есть таблица с заданиями и таблица человеков. Для каждого человека нужно хранить все задания которые он выполнил. Как лучше такое хранить? В поле со всеми ид заданий или в отдельной таблице с строками человек-выполненое задание?
>>1199946 Насколько я понял, это работает так: Если у каждого задания может быть только 1 человек то это one-to-one или many-to-one relationship - хранишь указание на человека, которому дано задание, в таблице заданий. А если у каждого задания могут быть разные человеки, то это many-to-many relationship - делаешь таблицу типа person-task, где хранишь пары человек-задание.
Я решил сделать таблицу, где будут номера комнат, и время брони на них. Значит, для любой новой брони надо убедиться, что время бронирования не пересекается с предыдущим. Я решил, что проще всего это сделать проверкой того, что нижний предел брони больше любых верхних. А тут такое: никаких субзапросов в ограничении. И как мне обойти эту проблему?
>>1200331 Похоже ты сделал одинаковые измнения с помощью гуи-тулзы и на среде разработки, и на боевой. Поскольку ты поленился назвать FK нормально, то тулза сгенерила имена по своему усмотрению в обоих случаях. А с точки зрения сравнения это разные FK, несмотря на одинаковое содержимое.
>>1200500 вопрос снят. Вот бывает же такое, нигде нет ответа, потому что сильно банально. Всего лишь надо вызвать коннект... но между прочим, не очевидно.
>>1200522 Там заморока. Ведь я помню, что все решается как-то незаметно. А через шел, терминал и проч. я точно не делал. всего-то: path_db = os.path.abspath("D:/db/anal_data.db") conn_anal = sqlite3.connect(path_db ) c_anal = conn_anal.cursor()
Впервые ITT, не бейте, лучше обоссыте. Пишу веб морской бой. Хочу хранить состояние поля на момент каждого хода в базе, как это лучше сделать? Поле 10х10 представил в виде массива из 100 элементов, чтобы не создавать двухмерного массива. Но как это в sql хранить? Создавать таблицу с сотней булевых полей и парой связывающих? Это разумно? Дайте советов мудрых.
Анон, поясни за всякие графические интерфейсы. Они нужны? Их используют серьезные базаделы? Или ненужная хуйня, кто не пишет в консольке тот пидор etc etc? А если нужная, то какую взять? Сейчас у меня взломанный navicat 12, вроде работает. Но мне не нравится, что он взломанный. А бесплатное ПО, что я пробовал до этого для MySQL было совсем не очень.
>>1200674 >Создавать таблицу с сотней булевых полей и парой связывающих? Это разумно? Нет, не разумно.
Предположим, тебе сказали сделать морской бой 1212 клеток. Твои действия? Колонки добавлять? А 100100? И как с этим жить потом?
Второе - а зачем тебе вообще хранить ходы в виде массивов? Стартовое положение кораблей не меняется, достаточно сохранить его один раз, как-то так:
ship_id number; game_id number PK; player_id number; ship_size number; --Количество клеток ship_orientation number; --Признак того, как направлен корапь - по горизонтали (0) или по вертикали (1) ship_row number; --ряд, в котором находится первая клетка корабля ship_col number; --колонка, в котором находится первая клетка корябля
а ходы игроков хранить в такой примерно таблице:
shoot_id number; -- Ид выстрела game_id number; -- Ид партии player_id number; -- Ид игрока ship_row_index number; -- Строка ship_col_index number; --Столбец ship_id number; --Id корабля в который попали, null - промах shoot_result number; --null промах; 0 - попадание; 1 - уничтожение. shoot_ts timestamp; --Момент выстрела
shoot_result кажется избыточным, но он поможет потом быстрее анализировать партии, чтобы не разворачивать всю историю для того чтобы выяснить, когда утопили.
В такой структуре ты можешь хранить любые размеры полей, не обязательно квадратные, заметь. Можно делать поле 10000*10000 со стотрубными пароходами, например. А еще ты всегда легко воспроизведешь игру и так тебе гораздо легче анализировать ход игры - на каком ходу в среднем попадают в 4-х трубник? а в двухтрубник? Ну и прочую статистику собирать.
Если ты захочешь корабли в форме фигур тетриса вдруг, то нужна будет еще одна табличка-детейл к положению кораблей, где будет описана их форма.
Еще нужна табличка партий, где хранятся правила (размер поля, можно ли ставить корабли углами друг к другу и пр.)
>>1200770 >Второе - а зачем тебе вообще хранить ходы в виде массивов? Стартовое положение кораблей не меняется, достаточно сохранить его один раз Я почти сразу после отправки поста спросил себя именно это. Но так далеко мысль не зашла, спасибо.
Сап аноны, совсем новенький в базах данных и мне нужна ваша помощь. Хочу сделать 2 базы данных: в одной будут продукты, в другой рецепты. Как можно реализовать проверку продуктов для рецептов? Допустим, есть у меня в бд продуктов яблоко, банан и йогурт, а в бд рецептов фруктовый салат, который чтобы приготовить нужны как раз эти продукты. Как оформить бд рецптов, чтобы реализовать проверку?продуктов в рецепте может быть разное число: от 1 до 7 Пишу на c#+xamarin и кажись использовать буду SQLite, т.к для мобильного приложения
>>1201899 Я бы сделал это так: 1. Таблица Product с полями id (первичный ключ), name, ну и дальше какие тебе поля нужны 2. Таблица Receipt с полями id, name и тд 3. Таблица ReceiptsAndProducts с полями receiptId и productId, которые ссылаются на первичные ключи таблиц Receipt и Product. Это классическое many-to-many-отношение, которое делается через промежуточную таблицу.
Даун на связи. Может вы мне поможете. Как устроены данные типа ХАРКТЕРИСТИКА в табличных СУБД. Кароче мне надо сделать так клиентсерверный фул рест апи что бы у обїектов номенклатуры, контрагентов, физических лиц были настраиваемые характеристики. Или проще говоря свойства. Что бы к ебучей паре сапог можно было привязать цвет, тип материала, размер. А к типу номенклатуры ЕДА жирность, порция итд. И что бы блядь в сапогах или в сущности ДИРЕКТОР не было жирности. При этом надо что бы пользователь сам задавал какого типа будут данные, целочисленные, текстовые, дата, объекты. Пытаюсь представить связи, и ум за разум заходит. Как понял нужно создавать по табличке на каждый простой тип данных, типа ключ значение. И одну таблицу со связями к ключам других таблиц . Но не уверен. Думаю задача до меня решалась тысячу раз, но когда пытаюсь что то нагуглить натыкаюсь или на 1С или на что то совсем другое. Может кто то поделиться каким то учебным материалом как организовывать такие данные, или где посмотреть модель готовых решений?
>>1200715 >кто не пишет в консольке тот пидор etc etc Это только на дваче такую хуйню встретишь. Когда дело касается настоящей работы - речь о деньгах. Значит надо использовать наиболее быстрые и безопасные инструменты. Лаже системы контроля версий используют с гуи. Никому не надо что бы долбоеб выебывающийся как он ахуенно пишет в vim испоганил проект на который убили кучу денег и времени.
>>1202236 Спасибо. Походу то что надо. А есть какие нибудь ъорошие книжки на тему? А то на русеке даже на википедии перевода нет. Вроде реаляционным базам столько лет, а нет.
select u.user_id, u.user_name from user u where not exists ( select 1 from post p where p.user_id = u.user_id and p.created_at between sysdate() - interval 1 month and sysdate())
Когда я накидаю всяких grant'ов в постргесе, я могу потом через \dp узнать, какую таблицу кто может трогать и как. А как сделать наоборот? Узнать, какие таблицы может трогать каждая роль?
>>1203427 Не знаю, может в будущем пригодится. Я тут наткнулся на odbc в дрисятке, оказывается можно хоть xls, хоть txt использовать как источник БД. PHP умеет работать с odbc, чутка поигрался - понравилось. Вот думаю познакомиться с sql подробнее.
Анон, смотри какая хуйня. По дефолту в Постргресе у публичной роли есть привилегия на подключение к любой бд. При этом, подключившись, она может видеть все таблицы. Можно ли это как-то исправить, и делают ли так в продакшене? Это же полный пиздец, понятно, что доступа к различным таблицам по дефолту нет, и их надо выдавать через GRANT, но сам факт того, что вообще любая роль с login привилегией может подключаться к вообще любой базе и увидеть вообще все таблицы, включая all_my_fancy_passwords, или salaries_table_that_we_use_to_pay_our_employees мне кажется охуевшим. Тем более, что через \d они и структуру этих таблиц узнать могут. Или это нормально, и я паранойю? В том же MySQL например все наоборот - пока прав не дадут вообще ничего не увидишь.
>>1203551 Только к схеме паблик. Ты дебил там держать важные таблицы? Там обычно держат справочники общие и прочее. Пароли храни с солью, благо постгресс теперь умеет.
А теперь вопрос. Вчера за вечер сдедал задания на хакер-ранке, скл-ех пройден. Есть ли что-то такое же на pl/sql например?
Продолжаю читать, как вам моя account таблица? Нормально, что нигде нет not null constraint т.к. регэксовые ограничения и так горантируют, что колонны не будут пустыми? Я так же не нашел способ проверить имя без регулярок, т.к. не нашел какой-нибудь isalpha() функции как в том же Питоне на проверку того, что строка состоит только из буков.
Анон, вот как это решить? Почему я не могу в where clause ссылаться на ту же таблицу, из которой я беру все значения ну, которая from_item? Я понимаю, что могу свой подзапрос на пк с минимумом ОЗУ выделить в with clause, но в справке по теме CTE не указаны, значит можно обойтись без них. К тому же можно вместо noram заново написать весь этот подзапрос на пк без ОЗУ. Но это же ебанина какая-то. В общем, как сделать хорошо и правильно?
Кстати, иннер джойны использовать только если я Питонист и explict better than implict? Второй пик именно про это?
>>1205106 Ебать, вот только написал, сразу же пришла идея выбрать одновременно и минимальную ОЗУ, и максимальную скорость для пк с минимальной памятью, а потом сджойнить со всеми пк. И никаких подзапросов ебаных. Что скажешь анон, так нормально?
Почему при указании типа numeric я могу указать только precision, забив на scale, о не наоборот? Мне нужно, чтобы числа с точностью до 2х цифр с запятой, и я не ебу, сколько цифр они будут занимать вообще. Может там будет 20.33, может будет 935714.84, я не знаю. И что мне делать? numeric(100000000000000000000000000000000, 2) ?
>>1207054 Джойнишь к первой таблице вторую по ID2, группируешь по ID1, суммируешь Х, отдаешь мне свои 300кк.
Смотрите что нашел на sqlex, анализатор блять, 30 заданий прорешал, потом только заметил. Есть вопросы - есть ли то же самое в том же Постгресе? Только в MySQL видел время на запрос после каждого запроса, но ничего такого детального. То, что там в stmtext это что-то типа байткода Питона? Нет, я понимаю, что sql не компилируется\интерпретируется, я про то, что это какой-то второй более глубокий\сложный язык под капотом, который выплевывает оптимайзер в ответ на мой запрос так же как байткод питона выплевывает какая-то дрочильня пот капотом оного в ответ на данный интерпретатору код? Нужно ли мне прямо сейчас задрачивать эту оптимизацию и этот язык утверждений, если я хочу пойти джуном уже куда-то? Или это high level и мне лучше вернуться к этому после того, как стану миддлом, заработаю 300кк, и выучу весь матан включая реляционную алгебру?
>>1207521 >есть ли то же самое в том же Постгресе?
В любой современной СУБД есть.
Почитай что такое план запроса и что и как СУБД вообще делает с момента запуска скрипта до момента выдачи результата. Это будет полезно в любом случае. Обязательно внимательно прочитай и запомни основные моменты про bind-переменные - это архиполезно.
Что касается анализа плана запроса, то для нужно уметь его читать и знать, какие типы соединений таблиц поддерживает твоя СУБД и в чем их отличия по производительности, видеть, где используется или не используется индекс и какой. Когда пишешь запросики - обязательно смотри их план выполнения, заведи себе такую привычку.
Можешь добавлять и убирать индексы, менять условия и сразу смотреть, как меняется план. Очень наглядно все.
В общем есть 1 селект, и нужно получается для корректной пагинации узнать количество всего что он выдает. Но прикол в том, что селект большой и с кучей джойнов, а еще в нем много фильтров задействовано, на каждом столбике в таблице на сайте есть условный фильтр и сортировка и всё это падает в where'ы.
Пока что этот селект прогоняется в цикле из двух итераций.
На первой итерации собирается весь поиск и прогоняется селект с целью подсчета строк.
На второй итерации добавляются уже лимит и оффсет для получения собственно самих строк.
Как разрешить эту задачу и избавиться от дублирования запроса в базу в этой ситуации?
Правда я там только до 8 упражнения дошел, считаю нужно больше задач на самые основы, что бы надрочиться нубам типа меня, а то после изичной хуйни сразу дают джойн и груп бай и сижу не могу постичь до сих пор что там как правильно решать.
>>1208102 >>1208997 >sql-ex.ru Отличный сайт, чаю. Поставил первый раз сразу рейтинговые и охуел от пикрила.
>Правда я там только до 8 упражнения дошел, считаю нужно больше задач на самые основы, что бы надрочиться нубам типа меня, а то после изичной хуйни сразу дают джойн и груп бай Дошел до 9, так и не понял где там можно было GROUP BY использовать. Щитаю самые основы и вообще SQL должен сначала сам изучить, по крайней мере знать какие-есть возможности у языка в общем, а сайт чисто для практики и "набивания руки".
Все таки туториалов по SQL в интернете вагон, в отличии от сайтов с практикой, так лучше пускай сосредотачиваются на ней, а не распылаются дополнительно на уроки. Те же примитивные упражнения есть на W3 или как-его там, но их очень быстро заебывает делать, если они совсем простецкие когда ты по сути пишешь по 20 раз один и тот же запрос только меняешь название столбцов и таблиц.
>>1207808 >Почитай что такое план запроса и что и как СУБД вообще делает с момента запуска скрипта до момента выдачи результата. Это будет полезно в любом случае. Обязательно внимательно прочитай и запомни основные моменты про bind-переменные - это архиполезно. Есть советы, что почитать? Какие книги? Что-то типа 'Definitive guide to fast as fuck sql queries 300kk/ns'?
>>1210156 Так нельзя, в group by можно выводить только столбцы по которым идет группировка или агрегирующие функции. Я уже нарешал за 30+ упражнений, но это так и не осилил.
>>1210174 Ну не тролль, во-первых я конечно это попробовал еще на этапе решения своими силами, даже зная что-так нельзя, но мало-ли, вдруг благодаря HAVING COUNT(Distinct P.type) = 1 машина выводит возможность использовать атрибут в селект. Потому что, например, что-то похожее можно делать при использовании WHERE = (Query) если результат Query одно значение.
Но нет, так нельзя.
Не знаю что ты там пробовал, на форуме этой задачи я вообще не нашел.
>>1210371 Не троллю, ты просто тугой. Я не говорю тебе вывести просто колонну type, конечно это не сработает. Я говорю вывести тип продукта. А как это сделать при такой группировке собственно и есть само задание. Хотя конечно можно и по-другому сделать, но будет больше текста и cost плана выполнения. Под форумом я имел в виду именно топик этой задачи, который становиться доступным после ее решения - кнопка 'обсуждение упражнения на форуме'
Народ, вкатываюсь в БД, с нуля. Скачал MySQL + pgAdmin 4
На сайте написано "pgAdmin is available for Windows™ 7 (desktop) or 2008R2 (server) and above. The packages below include both the Desktop Runtime and Web Application"
Где он в десктоп рантайм? Почему блять у меня только ебучий веб. Неудобно пиздец, хочу обычное приложение. Помогите плс.
ребята, каким необходимым минимальным уровнем знаний нужно обладать, что бы получить предложение о работе связанной с Базами Данных? Хочу вкатиться, запросы писать умею, но не сложные. Шапки у треда нет, поэтому был бы рад вашим советам.
Кто-нибудь изучал SQL по книге "Learning SQL" от Alan Beaulieu? Как вам удалось подсоединить файл с примерами "LearningSQLExample.sql"? Мне выдает кучу ошибок, версия MySQL 5.7, шестой версии на офф сайте не существует.
>>1217093 слишком дохуя. Знание архитектуры и работы бд, как таковой. Расширенный sql. ( pl/pg/t) Начальные навыки администрирования бд.
Надрочка на какую-то технологию бд тоже норм.
Обычно работа с бд, как основа, это проектирование, систематизирование бд. То есть ты должен понять, как работать с бд в качестве чистого продукта( полный цикл поддержки), знание объектных методов и глубокие понимания абстракции данных.
Плюс тебе надо заточить что-то, что поможет писать API, GUI.
У меня C++/ Pl/SQL. Уже пару лет горбачусь архитектором, и знаешь, иногда приходиться читать документацию самой бд. Многие книги по тонким моментам не доступны в интернете и приходиться платить 75 баксов( со стоимостью), чтобы тебе томик Бурлесона доставили в Московию.
>>1217272 анон, можно с тобой контактками обменяться,с целью дальнейшего общения? Там телега, почта или ещё чего. Просто я на полном серьёзе хочу вкатываться в базы и уже много чего учу и прохожу курсы. Был бы благодарен тебе за такую возможность.
>>1217226 Потому что ты какую-то хуйню делаешь, по ошибкам кажется, что ты ему html документ скормить пытаешься.
Аноны, а помогите теперь вы мне с 118 задачей sqlex. Вот ее текст, мое решение и результат, а так же первое решение, что я нашел по гуглу и ctrl-c ctrl-v, чтобы проверить, работает ли. pastebin.com/MPt8U3J1 pastebin.com/s9weVUQD
Я не могу разобраться в коде, который дает правильный ответ. Он невероятно большой. Но почему мое решение не катит? Поясняю: я беру каждый год и прибавляю ему от 0 до 8 лет. Насколько я понял из википедии, год високосный если делится на 400, или делится на 4 но не на 100. Так что среди года, и восьми последующих точно будет хотя бы один високосный. Потом я беру 6 первых дней апреля этого года, среди которых точно будет понедельник, и прибавляю к этому понедельнику 1 день. Беру битву, дату, и минимальный вторник апреля високосного года (ведь беру 8 лет подряд, может получится больше одной такой даты). И че не так то, два дня с этим ебусь
>>1217709 СУКАБЛЯТЬ накатал эту огромную пасту, от безысходности решил просто так блять проверить не первые 6, а первые 7 дней апреля, и все заработало нахуй. Да пошло все блять в пизду
>>1218189 дунаева попробуй. тонкая. только там примеры на древней мs SQL, но ты установи что-то типа mysql или около того. или sololearn на телефон установи. там курс sql есть. весьма хорошо для нюфань. потом уже можно книжки от дядек читать и документацию по Ораклу или чему там надо.
Расскажите, как предотвратить добавление уже существующей записи в БД? Какие-то там индексы делать, или нет, не ебу вообще. В моем DB Browser ничего дельного, по идее, кроме каких то индексов нет.
>>1167018 (OP) Сделал в постгре полю id тип данных SERIAL. Если при инсерте в поле с UNIQUE указать уже существующее значение, то произойдет ошибка (ожидаемое поведение), но этот id при верных данных уже будет недоступен, следующая запись получит id + 1, получиться последовательность с дыркой. Как это фиксить?
>>1209297 Прости что долго не отвечал - тупо на работу устроился и времени нету, первые 3 недели - чистый ад в плане налаживания режима и прочей мозговой нагрузки. Я мог ошибаться поэтому с тем на чем там завис. В общем первый пикрил - то что у меня пройдено.
И соответственно попробовал сейчас решить 8е и вот такой вот посос.
Анон, ну как решить 127, я уже не знаю че делать с этой хуйней. Второй день ебусь. После кучи проверок заметил подсказку о том, что cd это строка. И нет я не забыл про это, ебучая подсказка, но ведь и строки '12x' и '13x' будут сравниваться так же, как и числа 12 и 13 т.к. '2' как символ меньше '3'. Но окей блять, может у них там есть строки '12a' и '12b', а мне важно только число, сделал ебаучую рекурсивную CTE cds0 чтобы это число вытащить.. И все равно нихуя не работает. Добавил уже даже ебанутые проверки на p.model = 'fuck 127' потому что вдруг наврали и там есть одинаковые модели для разных типов ну, пк с моделью 123 и принтер с моделью 123, попробовал также и avg() и sum()/count() для требования "При расчёте среднего отсутствующие цены не учитывать.". Ну не работает блять вообще ничего и я не знаю что делать, бляяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяя
>>1219635 >А почему у тебя в одном месте тип 'PC', а в другом 'pc'? Потому, что я уже очень заебался с этой задачей. Но это и не важно, текст в sql case insensitive все равно.
>дополнить слева строку нулями до длины строки в 10 символов И как бы это помогло? Было бы например две скорости: первая - '20x', вторая - '1хуйпизда'. И хуйпизда бы тогда выиграла т.к. на втором месте у первой был бы ещё 0, а у второй уже 1. Может и в этом ошибка, это же ебаный varchar, откуда мне знать, что у них там записано. 'fast'? 'reallyfast'? 'sonicthehedgehoc'? Ты сам то решил 127ю?
>>1219675 Во-первых если у тебя except то distinct не нужен т.к. except сам уберет все дубликаты. Во-вторых в таблице product есть модели, не указанные ни в одной из таблиц printer, pc, laptop.
>>1219745 Ну решил, ничего хитрого там нет, делается обычным avg, рекурсия не нужна, джойны по типу тоже и вообще дело не в скорости CD - она задана в виде 2x, 12x (скорость и в конце икс, все элементарно сравнивается).
Ошибка во втором блоке, нужно дополнительно проверять что prs.price is not null и prss.price is not null
>>1167018 (OP) Начал читать "Введение в системы баз данных" Дж. Дейта, чтобы понять теорию баз данных. Вроде все правильно, но как-то муторно. Есть ли книги как-то по-лучше или нужно дотерпеть и дочитать.
>>1220181 ААААААААААААААААААААААААААААБЛЯЯЯЯЯЯЯЯ Я ПРОСТО ОРУ Ещё и подсказка эта ебаная про cd, только о них и думал, а оказывается все из-за цен. Пиздец. Спасибо.
Такой к вам вопрос: Есть две вставки и две точки сохранения. INSERT INTO plsqll01_purchase VALUES ('Small Widget1, I, 44-JUL-03', 'CA'); SAVEPOINT a; INSERT INTO pls'qll01_purchase VALUES ('Medium Wodget', 75, 44-JUL-03', 'BB'); SAVEPOINT sp_2;
Если я сделаю ROLLBACK a, то сохранится ли первая вставка? Проверить возможности, увы, нет
>>1220745 >Если я сделаю ROLLBACK a, то сохранится ли первая вставка? У тебя откатится вторая вставка, а первая пока что так и не будет зафиксирована, т.е. она будет видна только из-под этой сессии. Чтобы 100% сохранилась, нужен коммит.
В чем прикол? Вот во-первых, надо для каждой 5 записи найти среднее, но всего записей если я селектну max(n) 26. Т.е. каждых пятых записей должно быть пять, как у меня. А их три. И по чему надо искать среднюю цену? По типу модели? Ну тогда что за хуйня с принтерами, у которых 2 разных средних цены? Или по производителю? Непонятно в общем, мдааааааааа
Тяжело ли самому писать поисковый движок для сайта по продажам? Я так понимаю если я допустим хочу сделать веб-сайт интернет магазин то придется полностью писать платформу под него? Кто нибудь занимался, собирали ли тиму? Сложно ли делать одному платформу с базой данных итд?
Анон, у меня есть таблица, допустим, товаров, и таблица категорий. Связаны они через пивот-таблицу (у одного товара может быть много категорий). В той же пивот-таблице содержится столбец с сортировкой (т.е. в разных категориях одни товары могут быть отсортированы по-разному). Плюс к тому у товаров есть какой-то столбец (допустим, "рекомендую" или ещё один сортировочный столбец). Вопрос: как мне выбрать первые сто товаров с сортировкой и по столбцу из пивот-таблицы, и из "основной" товарной (причем основная в приоритете), но при этом избежать сек скана?
Установил mariadb с помощью sudo apt-get install mariadb-server mariadb-client. Root пароль задать не предложили. Задал с помощь скрипта mysql_secure_installation. Вроде всё запускается. Но после перезагрузки субд шлет нахуй(первый пик). Снёс и поставил снова. Пока всё работало(до перезагрузки) сделал так: mysql -u root MariaDB [(none)]> use mysql; Database changed MariaDB [mysql]> update user set password=PASSWORD("my-new-cool-password") where User='root'; MariaDB [mysql]> flush privileges; MariaDB [mysql]> update user set plugin='' where User='root'; MariaDB [mysql]> quit; Вроде как сначала всё заработало после ребута. А может мне и показалось, т.к я отошёл покушать на полчаса. Вернулся и всё опять поломалось. Попробовал сделать так - http://dedicatesupport.com/content/sbros-parolya-polzovatelya-root-v-mysql Один хер всё ломается после перезагрузки. В чем тут дело?
Тут мы решаем ультраважные вопросы о том, как правильно хранить динамические атрибуты сущностей: в полях или в строках,
Рассказываем, как работаем аналитиками и мечтаем стать разработчиками,
Строим АНАЛИТИЧЕСКИЕ отчеты в экселе, выгружая по миллиону строк, а потом фильтруя,
Дружно не понимаем, ЗОЧЕМ ЖИ НУЖИН ОЛАП, ЕСЛИ И ТАК ВСЕ РАБОТАЕТ ЗАЕБИСЯ,
Ищем ошибки в аббривиатурах MDX DMX XMLA,
Доебываемся до эс - ку - элей наших же потенциальных конкурентов
>Select id from tbl_table_with_id where id = (select max(id) from tbl_table_with_id)
>ЧТО НЕ ТАК-ТО У МЕНЯ?
Удивляемся, как за знания, приобретаемые за 4 месяца на sql-ex, могут платить по 100к, и бугуртим, что ниасилили и 100к не получаем.
А так же:
Постгре или постгрес?
Май эс ку эль или мускуль?
Эс ку эль или сиквел?
В общем, это очередной баз данных тред, поехали!
Награда светит не посмертною медалью, отнюдь
Это храм старого формата, так предали огню
И скоптили небо старики, что слышны с Невской реки
Мы видим дым от костра - "Да здравствуют базовики!"
ПРЕДЫДУЩИЙ:
#sql #бд #базы данных