Это копия, сохраненная 10 августа 2018 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Тут мы решаем ультраважные вопросы о том, как правильно хранить динамические атрибуты сущностей: в полях или в строках,
Рассказываем, как работаем аналитиками и мечтаем стать разработчиками,
Строим АНАЛИТИЧЕСКИЕ отчеты в экселе, выгружая по миллиону строк, а потом фильтруя,
Дружно не понимаем, ЗОЧЕМ ЖИ НУЖИН ОЛАП, ЕСЛИ И ТАК ВСЕ РАБОТАЕТ ЗАЕБИСЯ,
Ищем ошибки в аббривиатурах 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к не получаем.
А так же:
Постгре или постгрес?
Май эс ку эль или мускуль?
Эс ку эль или сиквел?
В общем, это очередной баз данных тред, поехали!
Награда светит не посмертною медалью, отнюдь
Это храм старого формата, так предали огню
И скоптили небо старики, что слышны с Невской реки
Мы видим дым от костра - "Да здравствуют базовики!"
ПРЕДЫДУЩИЙ: >>1086747 (OP)
#sql #бд #базы данных
Найс блядь обосрался с перекатом. Не умеешь - не берись.
Иди нахуй.
Короче, второй день читаю информацию на эту тему, сравниваю варианты репликации и уже реально запутался. Кто-ндь наставит на путь истинный?
Вдогонку: есть ли способ относительно безболезненно обновиться с 9.3 на 10 без промежуточных этапов?
Это называется StandBy. Гугли книги администратора postgres на рутрекере. Настрой сначала архивлоги, а потом с этого пляши. Научись эти логи синмать раз в полчаса, например, а после дополни конфиг на стэндбай.
Чтобы безболезненно перейти на новую веосию читай ман про апгрейд, или делай бэкап и разворачивай потом на десятку
Как мне сделать таблицу эту по нормальному? Но если я сделаю как на пике, мне придется каждый раз писать insert into Группа - и вводить каждый раз имя группы, каждый раз количество и менять только айдишник студента.
Это нормальный подход?
Это ты так не смешно шутишь?
Продолжаю вкатываться, хочу устроиться для начала джуном в бекенд на Питоне. Дошел в своем обучении до баз данных. Что прочитать по ним? Database systems Сиджея и Learning sql ? Или это не то совсем? Что тогда надо?
Алан Бьюли, Том Кайт.
Связь студент-группа должна быть в отдельной таблице, в этой таблице также должны храниться дата начала членства студента в группе и дата окончания оной (null - если дата окончания неизвестна)
Чтобы добавить ограничение на колонку нужно выполнить такой запрос:
ALTER TABLE products ADD CONSTRAINT some_name UNIQUE (product_no);
(источник: http://postgresql.ru.net/manual/ddl-alter.html )
Как я понял product_no является названием колонки или нескольких колонок для которых мы добавляем ограничение, а чем тогда является some_name ?
Как-то так:
student_group_id number
student_id number
group_id number
student_group_date_start date
student_group_date_end date
Это самый простой вариант. Можно добавить ссылки на документы, на основании которых осуществлялось включение/исключение в группу, добавить комментарий.
Кстати, количество человек в группе хранить в таблице не надо.
Оно рассчитывается в зависимости от даты.
Например, на первом курсе было 20 человек, к пятому осталось 8. Тебе нужно узнать, сколько человек отчислилось на третьем курсе, или сколько пришло из академки на четвертом. С такой промежуточной таблицей-связью это легко сделать.
Но ведь при создании таблицы я могу сделать вот так:
CREATE TABLE products (
name text,
id integer UNIQUE
);
Так вот, где здесь указывается имя ограничения?
Точно! Спасибо тебе большое, что уделил на меня время.
Взял
Ну, если впадлу делать что, можешь мою взять с триггерами.
Нужно разработать и реализовать триггеры для операций INSERT, UPDATE, DELETE для проверки сложных ограничений, накладываемых на схему предметной области (не менее двух триггеров для каждого типа операции).
Не менее трех триггеров (любого типа) должны выполнять действия компенсирующего типа в связанных таблицах.
По одному триггеру для каждой операции должны быть триггерами instead of (триггеры должны содержать логику обработки данных - например, выполнение компенсирующих операций, расчетные данные, обработку сложного удаления или обновления данных).
В этом случае имя генерится субд и оно не очень удобное. Не знаю как в постгресе, а в Оракле это что-то вроде sys_12343123.
По ссылке, которую ты выше приводил:
Чтобы удалить ограничение, вам необходимо знать его имя. Если вы сами давали ему имя, то все просто. В противном случае, СУБД назначило автоматически сгенерированное имя, которое нужно найти. В этом может помочь команда \d tablename в psql; другие интерфейсы также могут предоставлять способ инспектирования подробностей таблиц. Затем выполняется команда:
ALTER TABLE products DROP CONSTRAINT some_name;
(Если вы выполняете команду с указанием такого имени ограничения как $2, не забудьте, что вам понадобится заключить имя в двойные кавычки, чтобы имя было воспринято как правильный идентификатор.)
понял, принял. Спасибо
Благодарю. Обновление уже сделал, проблем вроде не было.
Насчет StandBy не нашел ничего толкового, логи и бекапы есть, как я понял все-таки нужна потоковая/логическая репликация.
Помимо этого, наткнулся на вариант кластера высокой доступности средствами самой винды: https://www.postgresql.org/message-id/006c01cd8c6f$bd274ba0$3775e2e0$@devshock.com (правда слабо понял, как это реализовать, сейчас усилено гуглю).
Что думаете об этом? Стоит ли пробовать (учитывая, что серваки надо было запустить уже на этой неделе, а я - простая вебмакака без опыта администрирования чего либо)?
DataGrip
DBeaver.
Ты серьёзно? Твои друзья вот эти три дядьки: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.
Есть краткий ман по настройки Standby вот тут : https://wiki.postgresql.org/wiki/Hot_Standby
но по сути настроив wal ты вполне легко настроишь standby. Чтобы понять как всё работает и посмотреть все настройки тебе нужно postgresql.conf , и забэкапь этот файл, чтобы если сломаешь его, то сможешь восстановить.
По сути если у тебя есть виртуалка, то просто копируешь машину, а потом делаешь из одной main сервер, другой standby. И выпроси хранилище для бэкапов, даже если кто-то заебашит raid-5 тебе будет это нужно.
Работаю ETL-разрабом в развитии DWH полтора года. Oracle + Informatica. Мне норм, как тебе будет хуй знает. Лично мне платят хуево, собираюсь в ближайшее время перекатываться в другое место.
В оракле, если не ошибаюсь, NULL определяется как строка в блоке с значением длины 0.
>>168073
Есть такая профессия, даже не обязательно Data science. Если ты делаешь хуйню для который нужна база, то это типичная задача бэкэнд-разработчика на язык-нейм.
Если ты делаешь с нуля или развиваешь ебическую, нетривиальную по объему и нагрузке базу на основе которой будут работать разные хуйни, то это отдельная профессия.
у меня вторая есть как отдельная задача, лол.
Проектировка БД. Причём приходится всасывать дохуя документации и иногда недокументируемые возможности, но я вообще программист-архитектор по профессии.
Как мне создать триггер на удаление всех записей у которых одно поле равно удаляемому значению?
Спасибо, анон, за подробное разъяснение! Вообще с английским не очень дружу, то есть читаю, понимаю, но это занимает раза в 3 больше времени и сил, чем та же инфа на русском. Но книга реально крутая, буду разбираться.
Была мысль поднять по виртуалке на каждом сервере, основа - Дебиан, гостевая - Windows Server 2012 R2, но идея мне кажется дико костыльной, причем хз, можно ли ОЕМ-ключи к винде использовать на виртуалке.
ну вот мне надо таких запросов послать 12 штук за один раз, при этом разница в них будет только в DateTime - по два часа, то есть первый запрос с DateTime равным 00:00:00, второй 2:00:00 и так далее. И вот чего, как это можно оптимизировать?
Ну эта, сморя чо те надо сделать.
Запросы-то не ради самих запросов отправляются, верно?
Если ты хочешь получить какую-то информацию за сутки, тебе и надо отправлять один запрос на сутки плюс группировка по 2 часа.
Планирую начать использовать MongoDB, чтобы объединить в одном месте несколько больших наборов данных со множеством столбцов, где в случае SQL пришлось бы делать много таблиц.
Вот тут пишут, что из MongoDB неудобно делать запросы по типу SQL
https://habrahabr.ru/post/222083/
Если это так, то что, кроме упоминаемого Asterix, можно взять в качестве No SQL базы, чтобы можно было использовать команды, схожие с SQL ? Желателен модуль для Python.
Нет, в зеленом госбанке заебись платят, говорят.
>Если ты хочешь получить какую-то информацию за сутки, тебе и надо отправлять один запрос на сутки плюс группировка по 2 часа.
Да неужели получить результат за сутки, а потом выколупывание данных за каждые два часа будет быстрее?
>>170869
>Используй динамический sql
Это что такое? Как мне поможет?
это например такая конструкция
yoba:=ti
select * from you.pidor where you.youba=:yoba
когда ты делаешь это динамично, то план составление и исполнения запроса выполняется 1 раз на дохуя данных. То есть ты берёшь и меняешь yoba на что-то другое, например yoba:=mamka. Время на данный select тратится в разы меньше, ведь ты уже делал такую же выборку, анон, да ведь?
Дальше каждая норм СУБД имеет расширенный sql, можешь написать функцию или materialezed view.
Вообще если ты регулярно делаешь такие вопросы, то почему ты не подумал ещё о partition table?
>>Да неужели получить результат за сутки, а потом выколупывание данных за каждые два часа будет быстрее?
Ты не поверишь, но да. Можешь сделать вьюху с этими данными, а потом из перебирать. Вьюха это не только удобство, но и скорость.
блин, это интересно, но мне не ясно, сработает ли в моем случае, я просто задачу упростил, дабы анонов не грузить. Я на шарпе пишу отчеты и тащу данные вот таким запросом
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 раз. Вот такое говно как то можно оптимизировать?
Мм, вьюху делай
>Да неужели получить результат за сутки, а потом выколупывание данных за каждые два часа будет быстрее?
Зависит от структуры базы(особенно индексов) и природы данных. В общем случае так лучше и правильнее.
Если же мелкие запросы предпочтительнее, так тоже может оказаться, то их надо делать с bind переменными.
Даже если не дойдешь до вьюшки или хранимки, сделай bind переменные. Сейчас у тебя самый хуевый вариант из возможных.
>bind переменные
а чо, а как? я просто в ms sql не очень (только на уровне простых запросов и Entity Framework). В двух словах с небольшим примером можно? А то в гугле только про mysql нашел биндинг.
Если ты используешь bind-переменные для запроса , который вызвается несколько раз, то СУБД гораздо, гораздо быстрее разберет и выполнит второй и следующие запросы, используя данные из кэша. Если ты формируешь запрос простой строкой, то с точки зрения субд каждый запрос - уникальный и возникают дополнительные расходы на парсинг и построение плана, кэш не используется. Если таких уникальных запросов много, то ДБА тебе руки не пожмут.
Если ты используешь openquery, то там нельзя просто так использовать bind-переменные, вот же говно, не ожидал.
На твоем месте я бы попробовал сделать хранимую процедуру и вызывал бы ее с подставленным в цикле значением (но сначала попробовал бы все-таки группировки. Опять же, зависит насколько часто твой отчетник дергает базу)
https://social.msdn.microsoft.com/Forums/en-US/5da9950d-c526-4afe-a6d7-30488db2fb26/calling-sp-using-open-query-in-sql-server?forum=transactsql
Aqua data studio, на рутрекере есть крякнутая
Задание: 1 ($erges: 2008-06-21)
Дима и Миша пользуются продуктами от одного и того же производителя.
Тип Таниного принтера не такой, как у Вити, но признак "цветной или нет" - совпадает.
Размер экрана Диминого ноутбука на 3 дюйма больше Олиного.
Мишин ПК в 4 раза дороже Таниного принтера.
Номера моделей Витиного принтера и Олиного ноутбука отличаются только третьим символом.
У Костиного ПК скорость процессора, как у Мишиного ПК; объем жесткого диска, как у Диминого ноутбука; объем памяти, как у Олиного ноутбука, а цена - как у Витиного принтера.
Вывести все возможные номера моделей Костиного ПК.
Есть идеи как такое решить?
изи же. Но знаешь, sql-ex и ты идут на хуй.
>Есть идеи как такое решить?
А у тебя? Хоть строчку написал? Где твои собственные соображения? М?
Джойнов нет, селектов нет.
Там используются RDF, RDFS, SPARQL, OWL, SWRL, ну и CYPHER.
Что это такое - смотри в интернете. Логика совершенно другая.
Возьми OrientDB и попробуй, првда там sql даже очень далек от 92. Но есть возможность запилить граф.
Если хочешь область применения - социальные сети. Там это оптимально в отличии от реляционной, и вот подумай почему.
Индекс (англ. index) — объект базы данных, создаваемый с целью повышения производительности поиска данных.
Что это за объект? В каком формате хранится? Как связан с таблицей?
>Что это за объект
СУБД содержит разные объекты - таблицы, индексы, хранимые процедуры, триггеры, вьюшки. Т.е. индекс - это объект, отличающийся от таблицы.
Самая простая аналогия - предметный указатель терминов в конце учебника.
По этому указателю ты можешь быстро найти нужную страницу. Например, мануале по автомобилю написано: Топливный фильтр, стр. 30, 55, 100. Если такого указателя нет, то тебе бы пришлось просмотреть все страницы, а с индексом-указателем ты сразу получаешь конкретные номера.
В СУБД одна таблица может иметь много индексов - для разных колонок, содержать внутри функции от содержимого колонок. таким образом есть возможность быстро выгребать записи по самым главным атрибутам. Быстрее всего работают уникальные индексы - для одного значения индекса существует ровно одна запись и СУБД находит такую запись очень быстро. Индексы, для значения которых существуют много записей, работают медленнее (очевидно). При создании индексов нужно учитывать природу данных, примерное количество записей и характер джойнов, чтобы создать ровно столько индексов, сколько нужно, т.к. индексирование полей по которым никогда не будет поиска или джойна - пустая трата места на диске и времени на обновление этого индекса при операциях вставки, удаления, редактирования.
>В каком формате хранится
На данном этапе (да и на следующих) тебе это без разницы. Напрямую с индексами при написании запросов не работают, максимум, ты можешь указать индекс в хинте, чтобы СУБД его точно подхватила (может и не подхватить, если он по ее мнению не нужен)
>Как связан с таблицей?
Индекс создается на одну или несколько колонок определенной таблицы.
Короче, сделал Hot Standby, слейв льет данные с мастера и доступен на чтение. Но как, и, главное, когда делать слейв мастером и наоборот! Читал про варианты с pgpool, достаточно удобно, но третий сервер для него мне никто не даст. Остается вариант постоянной проверки на слейве доступности мастера и, в случае его недоступности, продвижения слейва до мастера. И наоборот. Пока думаю решить это с помощью наколеночных батников, но вообще не уверен, будет ли это решение приемлимо работать. Очень большое желание вообще забить на все и уволиться, ибо знаний катастрофически не хватает, а процесс настройки затянулся уже более чем на две недели. Есть ли выход из тупика?
Есть система мониторинга в фирме?
Просто пилишь в нее тесты, и когда сервер 100% падает, тл перекатываешься на другой. Напиши батники для переключения серверов и кинь на каждую машину. На всякий случай научись быстро отключать слейвы и мастеры, если один из них накроется. И настрой бэкапы на слейве, но не юзай их без необходимости.
>Есть система мониторинга в фирме?
"А что это?" Серьезно, только 2 сервака с Windows Server 2012 r2 на борту. Ну там pgAdmin, но не думаю, что он чем-то поможет.
Основная проблема: ок, слейв переключился в мастер. Но когда мастер вновь поднимется, неизвестно же. То есть на момент запуска сдохшего мастера у нас параллельно два мастера. Как его вовремя задемоутить, чтобы не похерить базу? Запускать при загрузке службу только после проверки роли второго сервера? Это за гранью моего понимания.
Бекапы есть на мастере. Настроить на слейве точно так же, вроде, не проблема, это пока даже не горит.
Вообще это моя первая сколько-нибудь серьезная работа в IT, до этого только писал сайтики на вордпрессе и админил локалхосты в гос. учреждении. К понедельнику надо уже предоставить готовый отказоустойчивый кластер, и у меня все сильнее поджимает. Это вообще нормально тупить по 2 недели на таких задачах?
Выпроси сервер на который ты поставишь Zabbix тебе нужно сделать пару вещей, поставить модули забикса на эти серваки, и заставить их общаться. Если понимаешь, что один сервер ебанулся и не отвечает минут 5: то лезешь на машину и включаешь батник, чтобы слейв стал мастером. В это время, если у тебя есть доступ к мастеру, то гасишь деятельность сервера и переводишь его уже в слейв( обычно такое не работает, так как у тебя сеть/отказ системы/подыхание хардов) .
Далее план таков: система мастера воскрешается, если разницы в redo мало, и какой-то уебан не переключился на него во время его отключки и не внес изменения - догоняешь его со слейва, если внес - ищешь scn переключения, откатываешься на него и дожираешь redo со слейва.)
Если все очень плохо - ты же делаешь бэкапы? )
Тебе надо будет восстановить до слейва( поэтому я и написал про включение wal+backup на слейве), а потом поменять их с мастером.
спасибо
База данных postgresql 10.
Делаю селект в psql, получаю такую ошибку.
>[22021] ERROR: invalid byte sequence for encoding "UTF8": 0xf0 0xe5 0xec 0xee
При выгрузке дампа и попытке его импортировать та же самая ошибка.
Посему несколько вопросов:
1) Как non-utf8 текст вообще попал в базу? Postgres при вставке не проверяет кодировку или не конвертирует в server_encoding?
2) Как это можно исправить на текущей бд?
3) Как это можно воспроизвести? Как вставить non-utf8 байты в базу? Я нихуя не понимаю. Это нужно будет чтобы протестировать исправление.
4) Как сделать так, чтобы это больше не повторилось?
Спасибо. А без внешнего сервера - никак? (сервер не выделят, потому что их просто нет, будет мифическая "циска", о которой никакой информации пока нет). Слейв сам может мониторить доступность мастера? Я вижу это так: тот же батник с автоматическим пингованием сервера (или проверкой доступности бд на нем, но это сложнее). Если пинг не проходит некоторое время, то все - становимся мастером. На клиенте (или на "циске", если такое возможно) можно тупо обращаться ко второму серверу, если первый не отвечает. Конечно, он может быть пока еще слейвом и не принять запрос, но это лучшее, что я пока придумал. В общем, мозгов у меня решительно не хватает, походу так и передам начальству.
Ну, клиенту надо как-то проверять доступность. У тебя нет брокера, поэтому есть системы мониторинга, которым можно прописывать сценарий.
Вот клиент ебашит на бд, а потос как он узнает, что бд упала и перешла на слейв? Поэтому ставят либо брокера, либо систему мониторинга.
В оракл к примеру на клиенте есть tnsnames в который можно писать куда конектится, если мастер упал.
И то у тебя должна быть недоступность мастера, чтобы кто-то не нашкодил. Если есть такой механизм, то все гуд и тебе лишь надо ловить момент когда падает мастер.
Как клиент проверяет доступность: пишет запрос, если он не выполняется, пингует сервак (или что-то там еще), если тот не отвечает, пишет запрос на другой сервак (сервака два, айпишники захардкожены). Это я сам только что придумал, но, думаю, реализовать будет несложно.
Насчет недоступности мастера не понял. Механизма такого, скорее всего, нет, если это не описанный мой выше бред.
Огромное спасибо, что тратишь время на меня. Но, походу, проебу я все-таки эту работу. Не помещается все это у меня в голове.
Мастер не должен пинговаться, дибо он должен усиленно всем показывать что он не мастер.
Чувак, нахуй ты за это взялся? Ты там на должность администратлра бд устроился?
Помоги с етой хуйней, Анон
Инженер-программист официально ) Месяц назад пришел, ну и скинули на новичка то, что сами не знают, как делать. В любом случае, поговорил с начальством, если вообще не будет получаться, наймем какого-ндь крутого ДБА для настройки.
Вот, кстати, на такую интересную штуку наткнулся:
https://habrahabr.ru/post/308950/
Там даже исходник есть. Надеюсь, завтра это решит все мои проблемы )
Set client_encoding to unicode
По умолчанию стоит.
Просто не копируй селекты из интернета в консоль. Он просит у тебя юник, а ты, блядь, кидаешь ему поганный 1251
Если и не так, то никакая база не декодирует в свою кодировку.
Смотря какой язык юзаешь, чтобы не мучаться в винде есть ATL конвертеры.
У тебя просто какой-то чувау может вводит данные в вин1251
В базе есть функции ascii, decode , encode. Последние для битовых данных.
initdb -E encodename
Автоматическая конверсация из пскл \encode win1251
Если есть прослойка то настрой libpq в приложении
а можешь привести пример?
есть таблица - id, имя, фамилия, отчество, год рождения и т.д. и она привязана через id к таблице техника сотрудника, где поля такие:
id техники, тип, модель, марка, серийный номер, номер ЦСО. Как индексация здесь может, что либо оптимизировать?
Сотрудников у тебя, положим, будет десять тысяч человек.
У каждого будет по десятку девайсов - итого в таблице девайсов 100 тыс. записей.
Допустим, у тебя есть условный сотрудник Сычев. Ты хочешь найти для него всю технику.
Без индекса тебе придется перебрать все 100 тыс. записей в поисках техники именно Сычева.
100 тыс. ради 10 записей. А если базу постоянно теребят даже несколько десятков человек, то все будет очень медленно. А если нужно получить список сотрудников с девайсами, то будет еще медленнее. А если таблица не помещается в память, то добавятся издержки дисковых операций.
Теперь создаем индекс для техники по ид сотрудника.
В общем случае строки в таблицах хранятся неупорядоченно, а индекс отсортирован (обновление происходит при каждом изменении автоматически).
На отсортированном наборе данных поиск происходит очень быстро.
Например, чтобы найти двоичным поиском на отсортированном наборе из 1000 записей одну, нужно просмотреть не более 10 значений, а на 100000 - не более 17.
Т.е. вместо просмотра n записей ты просматриваешь log (n) записей.
В СУБД используются более сложные алгоритмы, чем двоичный поиск, но они тоже работают за логарифмическое время.
Итак, мы нашли кусок в индексе, который отвечает за технику Сычева. Теперь СУБД перебирает найденные значения индекса и вытаскивает оттуда указатели на физическое расположение строк в таблице девайсов. Т.е. не нужно перебирать 100 тыс. записей, а берем конкретный блок данных и берем конкретные записи в нем. Доступ к данным проходит на низком уровне, очень быстро.
Так же индекс помогает при удалении Сычева из таблицы сотрудников - нам ведь надо удалить или пометить null все его девайсы и других операциях с изменениями данных.
Воте еще очень простой пример, есть дом на 250 квартир и тебе нужно найти квартиры, в которых есть белая собака. Ты можешь обойти все квартиры, спрашивая, есть ли у вас собака. А с индексом у тебя изначально есть список квартир, в которых есть собака допустим их 20 (это если у нас индекс только по виду животного, кошка-собака-крыса-хомячок-попугайчик, а еще можно добавить в него цвет). Среди 20 квартир ты довольно быстро найдешь белых собак.
Сотрудников у тебя, положим, будет десять тысяч человек.
У каждого будет по десятку девайсов - итого в таблице девайсов 100 тыс. записей.
Допустим, у тебя есть условный сотрудник Сычев. Ты хочешь найти для него всю технику.
Без индекса тебе придется перебрать все 100 тыс. записей в поисках техники именно Сычева.
100 тыс. ради 10 записей. А если базу постоянно теребят даже несколько десятков человек, то все будет очень медленно. А если нужно получить список сотрудников с девайсами, то будет еще медленнее. А если таблица не помещается в память, то добавятся издержки дисковых операций.
Теперь создаем индекс для техники по ид сотрудника.
В общем случае строки в таблицах хранятся неупорядоченно, а индекс отсортирован (обновление происходит при каждом изменении автоматически).
На отсортированном наборе данных поиск происходит очень быстро.
Например, чтобы найти двоичным поиском на отсортированном наборе из 1000 записей одну, нужно просмотреть не более 10 значений, а на 100000 - не более 17.
Т.е. вместо просмотра n записей ты просматриваешь log (n) записей.
В СУБД используются более сложные алгоритмы, чем двоичный поиск, но они тоже работают за логарифмическое время.
Итак, мы нашли кусок в индексе, который отвечает за технику Сычева. Теперь СУБД перебирает найденные значения индекса и вытаскивает оттуда указатели на физическое расположение строк в таблице девайсов. Т.е. не нужно перебирать 100 тыс. записей, а берем конкретный блок данных и берем конкретные записи в нем. Доступ к данным проходит на низком уровне, очень быстро.
Так же индекс помогает при удалении Сычева из таблицы сотрудников - нам ведь надо удалить или пометить null все его девайсы и других операциях с изменениями данных.
Воте еще очень простой пример, есть дом на 250 квартир и тебе нужно найти квартиры, в которых есть белая собака. Ты можешь обойти все квартиры, спрашивая, есть ли у вас собака. А с индексом у тебя изначально есть список квартир, в которых есть собака допустим их 20 (это если у нас индекс только по виду животного, кошка-собака-крыса-хомячок-попугайчик, а еще можно добавить в него цвет). Среди 20 квартир ты довольно быстро найдешь белых собак.
Мех. Немножко не так. Будет у тебя 100 сотрудников - будет 100 таблиц?
В таблицу техники добавляется айди того, кому она принадлежит.
Это проще апдейтить.
Чтобы запилить индекс тебе нужны уникальные айди, которые часто вызываются, но не равны 70% таблицы.
Давай такой пример.
У тебя есть таблица с документами и есть битовый признак обработки документа(1). Допустим у тебя 70% обработано и 30% нет.
Как ускорить таблицу? Инвертируешь признак обработки, то есть 0 - обработан, а индекс делаешь по оставшимся 30% .
То что ты описываешь скорее всего предпологает индекс-таблицу. Т.е. ты сортируешь данные по ключам. В твоем случае лучше делать ключи связанные с айди техники. Это лучший вариант, да и по айди техники тоже.
Но то что ты описал похоже на вложенную таблицу. То ест столбцы , а потом связанный по айди список техники, аля ообд.
Либо просто сделать первичный ключ по айди сотрудника, во второй бд первичныц по айди техникт, вторичный айди сотрудника
извините, что туплю. Белая собака в моем примере - это как определенный вид техники, да? То есть будет разумно создать индекс, например, для принтеров LaserJet p9313, чтобы узнать у кого такие принтеры?
>Просто не копируй селекты из интернета в консоль.
Ват.
>Он просит у тебя юник, а ты, блядь, кидаешь ему поганный 1251
Я нихуя не понел почему ты подумал, что я что-то откуда-то копирую. Просто делаю выборку на рабочей базе. Сама база на серваке под CentOS 7. Подключаюсь по ssh.
>>172316
Алсо почему вы думаете, что это именно win1251?
Да, это как определенный вид техники.
Если говорить о второй части вопроса, то индекс создается для колонки, а не для ее конкретных значений. Т.е. если у нас в колонке есть принтеры, сканеры, ксероксы и ноутбуки, то индекс будет содержать все эти типы. Можно, конечно, сделать функциональный индекс вида case when device_name = 'LaserJet1488' then 1 else 0 end но это довольно редкий прием - на каждый вид девайса индексов не напасешься.
Может помочь индекс по виду (принтер, ноутбук, сканер), по фирме-производителю, а можно сделать индекс по модели девайса (точнее, по upper(device_name)) или составной по нескольким полям, поставив более селективные поля вперед. Тут уже нужно смотреть по месту, как и что у тебя хранится и какие запросы наиболее характерны.
Допустим, сделали индекс по upper(device_name), тогда в запрос будем передавать введенную строку поиска в верхнем регистре и получаем набор записей для владельцев девайсов. А чтобы быстро расшифровать ид владельцев в их фио, поможет индекс по ид сотрудников - он будет уникальным и поэтому очень быстрый.
спасибо, друже, просветил
Есть таблицы на пикриле. Допустим в таблице users такие записи:
1 | Peter
2 | Fedor
3 | Vasily
В таблице stuff такие записи:
1 | 1 | shirt
2 | 1 | hat
3 | 1 | shoes
4 | 2 | gloves
5 | 2 | coat
6 | 3 | dress
Нужно составить запрос который вернул бы такой результат:
1 | Peter | shirt, hat, shoes
2 | Fedor | gloves, coat
3 | Valisy | dress
Я так понимаю тут нужно использовать агрегатную функцию и конкатенация, но как именно не могу сообразить.
Разобрался, GROUP_CONCAT() нужна.
- построчное резервирование
- хранимая поцiдура с проверкой значений
- журнал «кто что и когда делал с данными в таблице»
Тут в каждой субд будет разная функция для этого.
Я не батя, но:
>построчное резервирование
Нахуя, в чем задача? Нихуя не понятно. Скорее всего ты имеешь ввиду триггер.
>хранимая поцiдура с проверкой значений
Тоже непонятно в чем подводный камень и зачем.
>журнал «кто что и когда делал с данными в таблице»
Через триггер. На практике, если такое нужно сделать, то заказчик наглухо ебанутый. Нужно сделать не журнал, а отдельные поля и все это должно заполнятся фронтом. В остальных случаях это бессмысленно. Если тебе нужен аудит юзеров с правами на DML, то ты лох, пидор и нахуй из профессии.
>На практике, если такое нужно сделать, то заказчик наглухо ебанутый.
Что плохого в том, чтобы знать историю изменений записи?
> Нужно сделать не журнал, а отдельные поля и все это должно заполнятся фронтом. В остальных случаях это бессмысленно.
Поясни идею с полями, причем тут фронт-енд и тезис о бессмысленности, почему так?
>Если тебе нужен аудит юзеров с правами на DML
Что ты тут подразумеваешь?
Эй еба-ораклист, ты бд то свою знаешь?
1) локи же есть. Ты просто избалован, так как у оракла это в ядре.
2) через триггер всегда делается
3) аудит средствами оракла, тебе про такое никогда не говорили?
Я не он, можешь объяснить, какое отношение имеет триггер к проверке параметров хранимой процедуры?
То, что вы на заводилова, дрочите —
ПИШИТЕ БЛЯДЬ, ЗУБАРЮ!!!
И запрашивайте, данные.
>Скорее всего ты имеешь ввиду триггер.
Вот и пиши триггер.
>Тоже непонятно в чем подводный камень и зачем.
Игорь, если я ещё раз такую хуйню, услышу — я запишу все расходы на комплексе — на вашу группу. Вы у меня штаны последние продадите.
>Нужно сделать не журнал, а отдельные поля и все это должно заполнятся фронтом.
Чо блядь у вас, дерьмократия?! Забудьте нахуй о дерьмократии. Пока у вас каждый кладовщик знает SQL, тут везде тоталитаризм, будет!
>>173428
Нет потенции — сваливай нахуй, с рынка!!!
>>173501
ПРОСРАЛИ ВСЕ ПОЛИМЕРЫ!!!
ВЫ ПРОСРАЛИ БЛЯДЬ!!!1111ы
>Что плохого в том, чтобы знать историю изменений записи?
>Поясни идею с полями, причем тут фронт-енд и тезис о бессмысленности, почему так?
Само по себе ничего, ее и хранить в ней можно, но звучит как: "Есть важный ручной справочник и мне нужно знать какая именно макака его заполняющая накосячит, чтоб лишить ее премии". Заполнение пользователем справочника через dml говорит о незрелости процесса. В самой таблице должны быть заполняемые автоматически, скрытые для пользователя поля(кто добавил запись, время добавления итд.), за этим и нужен фронт, АРЕХ, например.
>>173485
>аудит средствами оракла, тебе про такое никогда не говорили?
Говорили, но >Если тебе нужен аудит юзеров с правами на DML, то ты лох, пидор и нахуй из профессии.
К тому же эта штука медленная и базу нагружает.
>локи же есть. Ты просто избалован, так как у оракла это в ядре.
Я вообще задачи не понял. Зачем нужно построчное резервирование(репликация что ли?) и причем тут локи?
Apex это фронт? Что же тогда бэк?
Штатное редактирование справочников dml? Это где такое есть? Все только через бизнес логику, и неважно где она- в хранимках или на сервере приложений.
Да и коннект пользователей в бд под уникальными логинами имхо анахронизм.
>В самой таблице должны быть заполняемые автоматически, скрытые для пользователя поля
Не в той же таблице. А в отдельной схеме (schema), с другими правами доступа, создаётся точная копия каждой таблицы.
>Да и коннект пользователей в бд под уникальными логинами имхо анахронизм.
Андрей Орлов, «Записки автоматизатора».
Читать до окончательного просветления.
Книга хорошая, читал, хотя и не самую последнюю версию.
Если что я говорю про то, что коннект в бд происходит под одним логином, но имя пользователя (например, доменная УЗ) при этом передается и обрабатывается.
>>построчное резревирование
Том Кайт, штудируй.
>>аудит DML
Фейербах, Прибыл. Есть безопасность на уровне строк.
Плюс кто тебе не позволяет анализировать undo/redo? Аудит можно хранить не на этой же бд, обычно так и делают.
Если есть проблема что какое-то говно срет в систему организуешь сбор доказательств включая выборочно аудит скриптов. Если конечно этот ебушка не срет анонимными блоками.
То что ты не можешь оптимизировать аудит, это пиздец твои проблемы.
Ты можешь сохранять все инсерты/апдейты из системных схем, и переносить их на спец.серверы или во внешний файл, а потом анализировать.
>построчное резревирование
>Том Кайт, штудируй.
Ты объясни что это или напиши как называется на английском.
>Фейербах, Прибыл. Есть безопасность на уровне строк.
Хуербах, блять! Если ты не можешь выстроить ролевую модель и процессы так, чтоб тебе не понадобился аудит, то иди нахуй. Придумай хотя бы один кейс где это действительно нужно.
>>173540
Зачем?
>>173538
Есть такая штука как контекст.
>Да и коннект пользователей в бд под уникальными логинами имхо анахронизм.
Хуясе, поясни.
>>172906
Что это за прикольная картинка? Мне сказали учить MySQL и там кроме командной строки нихуя нет.
аноны, есть книга где примеры наsql server 2000, у меня спермерка. что можно ставить, чтобы осваивать sql?
>Да и коннект пользователей в бд под уникальными логинами имхо анахронизм.
>Хуясе, поясни.
Провокационное высказывание получилось, выше писал:
>>173642
Речь идет о конечных пользователях, например Светлана Ивановна из бухгалтерии или Аня из кадров. Удобно, если для всех задач они используют единую УЗ. Особенно это удобно если приходится работать с несколькими разнородными БД.
>1174725
Спасибо тебе, на добром слове анончик
какой должен быть минимальный набор для освоения SQL?
имею спермерку или Linux.
Ставить Microsoft, Postgre, MySQL?
Блед. Я тебе говорю, у тебя построчное резервирование уже в бд есть. Допустим у тебя постят две пидорашки в одну таблицу, и у тебя ебучий айди генерится сам без задвоений. Кайт приводит, что этот пиздец не в каждой бд был и есть, и он охуел, когда узнал что в оракле это есть, а он сам это пилил.
По вторлму пункту. Это нужно, когда у тебя система может быть скомпрометирована, или какой-то мудень решил пошатать целостность. Буквально если ты работаешь в банках, то там в 90% случаях есть бд, которая копит аудит по абс, чтобы ты оптимизировал затраты и смотрел, чтобы пидорашко-программист правильно инсертил или апдейтил справочники.
То на что я тебя сослал это RLS. Допустим у тебя есть база клиентов общая, и каждое структурное отделение должно видеть только своих клиентов. Что сделать неуч? Создаст пол каждое подразделение вьюху, а ораклист ебанет RLS. Это простейшие политики безопасности. Позволяет так же следит за аудитом избранных юзеров, а не всех. Просто добавив им еще одну политику. Чтобы не быть голословным пакет dbms_rls.
бамп
Ищи платные гайды в свободном доступе.
Как ты обобщил джойны и дистинкт? джойны объединяют таблицы. Дистинкт в результатах выборки отсекает повторяющиеся значения в пределах стоблца, в котором он указан.
мне плоха
>Допустим у тебя постят две пидорашки в одну таблицу, и у тебя ебучий айди генерится сам без задвоений.
ПОСТРОЧНОЕ РЕЗЕРВИРОВАНИЕ, БЛЯТЬ! Это называется изоляция транзакций. И как минимум REPEATABLE READ есть в любой современной СУБД. Хотя иногда даже READ UNCOMMITTED включают ради производительности.
Б
>Буквально если ты работаешь в банках, то там в 90% случаях есть бд, которая копит аудит по абс, чтобы ты оптимизировал затраты и смотрел, чтобы пидорашко-программист правильно инсертил или апдейтил справочники.
Такое у всяких диасовтовских абс на сайбейсе, у оракла ни разу не видел отдельной базы под аудит(и можно ли такое вообще сделать?). В абс макаки инсертят через фронт. У разработчика вообще максимум права на селект должны быть проде и препроде. Такой способ защиты может помочь только от дба.
>Что сделать неуч? Создаст пол каждое подразделение вьюху, а ораклист ебанет RLS.
Лучше вообще никого в базу не пускать и ебануть отчет в BI, чтоб тетя срака не джойнила таблицу саму с собой десять раз и не вешала базу.
прошу прощения за оффтоп
а для рашки зп в полтора косаря уе - это норма или хуйня для итшника или для обычного рабочего?
Пошел работать в 21 учась на пятом курсе.
В 24 имею достойную ЗП, нашел годное место, счастлив, продолжаю расти как специалист
Причем тут питон?
Что тебя смущает? Если у тебя разовая загрузка, и все работает за устраивающее тебя время, то все норм.
То что не каждую запись коммитишь - правильно.
И что у тебя за БД?
Например, в Орагле есть специальная утилита для загрузки данных, которая на низком уровне хуячит гораздо быстрее, чем DML. В твоей БД есть такое? Если да, до парси XML до csv например и его скармливай загрузчику.
Под виндовс 7 ставятся все sql серверы вплоть до 2014го.
В какой СУБ это реализовано? В MS SQL можно разве что разрешить группе пользователей ОС входить в SQL, и каждый из них может подключаться под логином винды как trust connection.
>Причем тут питон? Что тебя смущает?
Наверное проблема в том что я не до конца понимаю session'ы и вообще "архетектуру" SQLAlchemy.
>То что не каждую запись коммитишь - правильно.
Окай.
>И что у тебя за БД?
PostgreSQL, только пару дней назад не без труда впервые накатил на винду.
>В твоей БД есть такое?
631x420, 4:33
>>176804
>Причем тут питон? Что тебя смущает?
Наверное проблема в том что я не до конца понимаю session'ы и вообще "архитектуру" SQLAlchemy.
>То что не каждую запись коммитишь - правильно.
Окай.
>И что у тебя за БД?
PostgreSQL, только пару дней назад не без труда впервые накатил на винду.
>В твоей БД есть такое?
Я не хочу пока лезть во всякие тулзы, мне бы базово разобраться с реляционными СУБД и SQLAlchemy. Хотя похоже SQLAlchemy не очень подходит для такого переноса базы, но я продолжу пердолиться.
Аноны, такая задача:
мне нужно собирать показания с прибора, ~200 цифровых значений каждые несколько минут.
Я уже начал гуглить и сравнивать БД для хранения временных рядов, но наткнулся на один пост в инете и задумался:
"А так ли нужна мне БД для этой задачи? Могу ли я обойтись файловой системой?". Вот смотрите:
1) Изменять данные не требуется, только записывать и (надеюсь когда-нибудь) читать.
2) Как именно, какими кусками и в какой последовательности данные будут читать я хз, на данный момент сказать сложно.
3) Я могу раскидать файлы по папкам, разделив, например, по месяцам и дням, т.е поиск не станет большой проблемой.
Внимание вопрос: какие подводные?
С многопоточностью проблем вроде быть не должно.
Если идея с ФС звучит норм, то какой формат данных подойдёт для моей задачи? csv + gzip (bzip2?), hdf5?
Ещё, возможно не по теме, но хочется хранить данные минимум в 2 местах, какую распределённую ФС можно выбрать под эту задачу? Какие вообще используются? Гуглёж показал что существует несколько вариков, да и я сталкивался поверхностно с HDFS, но не хотелось бы лезть в хадуп инфрастракчер.
316x420, 3:21
А то я никак не могу запомнить эти три буквы, блять.
Как версионировать структуры?
Объекты понятно. Хез_мэни вержнс и создаем копию.
А что делать со структурами, когда, например, есть конкурс, который состоит из этапов, которые состоят из испытаний. У всего есть свои свойства, последовательность и т.п. Короче структура. И вот она со временем эволюционирует, меняется состав, порядок и сами сущности. При этом есть прошлое, в котором проходили соревнования по старым версиям и есть уже запланированное настоящее, которое хочется при выпуске новой версии тоже проапдейтить.
Вот как это блять изящно версионировать? Я понимаю, что ответ достаточно очевидный - копировать и поддерживать целостность. Но может существуют какие-то практики и я просто не знаю.
Спасибо, Анон, буду копать глубже эту тему. А есть опыт работы с этой связкой, или это теоретическая рекомендация? Никогда просто о таком не слыхивал ранее! (тем ценнее рекомендация)
>>176986
Можешь развернуть свою мысль? У меня была похожая как только сея идея посетила мою голову, но потом она перестала казаться мне такой уж тупой, ведь из всех ништяков настоящих БД мне нужна по сути только репликация.
>Что за криворукие ублюдки ее делали?
Вот этот ублюдок накосячил :
>>176941
На самом деле тебе нужно задать явный формат даты для загрузки в твоем скрипте, а не думать, что СУБД сама догадается.
Это из разряда good practice. СУБД может разные настройки, а скрипт должен работать всегда.
Поэтому распиши преобразование из строки в дату с явным форматом.
Я генерирую данные в другой ИДЕ и просто вставляю. Ну ок, но скорее всего погуглю как правильно формат делать, и просто попытаюсь в кавычки вставить
Ты совсем дурак, бля? Ты не мог даже чуть-чуть теорию почитать? Будешь с каждым вопросом сюда приходить? Иди на хуй пидорас
pg_ctl службу запускает или нет?
Так зайди в список служб и проследи, хули ты как этот
Все зависит от того для чего ты хранишь данные и какие задачи будешь решать. По твоему описанию может подойти все что угодно.
>все что угодно
а чо там выбирать? NoSQL вместо выбора ФС и key+value вместо выбора формата данных, ведь для снятия статистики творческого мигания светодиода на ардуинке постгрес в его случае нинужен
>>117755
Ты Ванга? откуда ты знаешь что нужно в его случае?
>~200 цифровых значений каждые несколько минут
Ардуина будет генерировать ~овер 6*10^8 значений в год. Если нужен какой-нибудь Ad hoc-анализ "что за хуйня произошла позвачера", то лучше всего запилить выгрузку csv-лога с ротацией.
Если нужен анализ с машинлернигом и всей хуйней за 100 лет, то Hadoop. Если за год, то Python + csv-лог в фс.
Если нужен отчет в котором будет динамика скорости мигания светодиода в разбивке по датам, то RDBMS-name.
Если на основе основе данных ардуины нужна какая-нибудь операционная хуйня с огромным количеством чтений, то key-value(самый невероятный вариант).
> А есть опыт работы с этой связкой, или это теоретическая рекомендация?
Есть опыт в разных ситуациях и конфигурациях.
> перестала казаться мне такой уж тупой
Сама по себе перестала, видимо, потому что ты её не обдумывал.
Смотри:
> Как именно, какими кусками и в какой последовательности данные будут читать я хз, на данный момент сказать сложно
То есть тебе еще сложно сказать, как у тебя все на базовом уровне будет организовано, но ты уже с каких-то хуёв решил, что с ФС тебе будет лучше работать. Далее ты несешь про какое-то разбивание по папкам, и эту хуйню просто лень комментировать.
Мой тебе совет: бери хоть реляционку, хоть нереляционку, и делай свою хуйню, стараясь не выебываться.
в JSON пердоль, чо как не пердоля?
{"Lat":"123","Lon":"231"}
Суть в том, что мне нужно сделать из неё jsonb, но так, чтобы значения были нумерик, а не текст. Обычный alter, который set type jsonb using col::jsonb переводит в обычный текст (значения в кавычках), а мне нужно от этих кавычек избавиться. Как быть?
>сиквел
Сиквел (англ. «sequel» [siːkwəl], от лат. «sequella» — «продолжение», «приложение») — книга, фильм или любое другое творческое повествование, по сюжету являющееся продолжением какого-либо произведения.
Ты ваще о чём?
Ну главное то, что ты дартаньян, да.
> ПРОСТА ТАК, БЕЗ СВЯЗЕЙ
Главный вопрос тут такой: зачем вообще брали РСУБД? Господи, сколько я подобных быдлобаз переделал — не сосчитать.
> нельзя удалить юзера какого-нибудь, если не удалил его высеры на форуме например
ON DELETE CASCADE. СУБД следит за целостностью данных, а разработчик при создании таблицы не указал политики удаления данных.
> связи они главное в голове и в коде
Когда перестанешь делать гостевухи, поймешь, что был неправ. Ну или же если будешь работать не один.
> мб я что-то упускаю или не понимаю?
Упускаешь и не понимаешь. Смысла вот только пояснять нет, ибо ты уже выразил скепсис, не разобравшись в теме абсолютно. Либо ты понимаешь, что делаешь, либо нет.
И никто тут особо не против нереляционщины, бородатых адептов Кодда в треде нет. Просто такие ребята и в Монге такую хуету городят, что глаза на лоб лезут.
Попробуй найти примеры открытия одной бд, потом остальные так же открываешь и аппендишь, что-ли.
>в вебе
>в небольших проектах
Тебе не нужно искать ответы на свои вопросы, потому что ты веб-макака — пародия на разработчика. Оставь реляционную алгебру специалистам совершенно другого уровня квалификации и продолжай пилить говносайты за мелкий прайс.
Вот тут то и проблема, не могу найти годный пример для этого. Да и я не особо это все понимаю, мне бы вот литературы какой или туторчиков на ютубе что бы с нуля все делать.
А почему именно делфи? Чем богоизбранный быдлер на плюсах не угодил?
Восстановление, переводы.
Гугли ADO компоненты в Delphi (не ADO.NET, это другое). Сейчас уже не помню подробности, но все необходимое имеется. Можно, например, сделать комбо-бокс с выбором таблицы и отображением результатов в гриде. Можно вывести в грид результаты запроса или хранимой процедуры. И не нужно ничего дополнительно устанавливать (как в BDE), все уже встроено в винду.
Во всяких dwh вообще нет связей. Такие базы очень больше, со связями кучу задач просто не решить. Связи - это инструмент, использовать его или нет решать тебе.
Ньюфаг с платиной и ms-sql на связи.
Как вы работаете с дохуя количеством данных в интерфейсе?
Вот например есть абстрактное овердохуя количество записей (с байтмасивами) и если я попытаюсь сделать просто
>select * from zhopa
ляжет прога.
Так вот, следовательно, максимум пока что я придумал - поставить юзверю 2 поля - с какого поля и до какого поля вывести записи с таблицы, а там он уже сам разбереться.
Как вообще это на практике выглядит и как делают местные олдфаги?
Есть какой-то сайт с платиновых процедур?
Нужна процедура которая выдает таблицу с н-ного начала и до н-ного конца.
Есть ли в таблице конкретно № записи, не поле-айдишник, а именно № записи (чтобы циклом в процедуре выше пройти)?
Или я слишком заморочился?
Ты вообще хуево структурировал базу, переделывай. Столбцы в таблицу добавлять — не такое же рутинное мероприятие, как добавление строк.
Нихуя не понял, причем тут структура базы, я ее вообще не упоминал и не за это спрашивал.
у тебя говно намешано на уровне бд, раз в бд столько столбцов, которые не нужны конечному пользователю.
Обычно конечный не должен видеть лишнего, либо делай вьюшку, либо еби конём свою структуру.
Как вам доки к 18?
Есть у кого книга про advanced tuning от Бурлесона?
И вообще есть ли аналоги данной книги?
> я ее вообще не упоминал
Это не значит, что я не имел возможности понять, какой пиздец у тебя там творится.
> не за это спрашивал
Тебе нужно решить проблему, я тебе говорю, куда нужно смотреть. Костылями и изолентой можно сделать то, что ты хочешь, но это один из самых тупорылых вариантов. Переделывай, тебе нужно твои дохуя столбцов вынести в отдельную таблицу. Совета конкретнее дать при таких данных нельзя.
>>182341
Сём, блять, нормально же блять вроде вопросы сформулировал.
Какие нахуй блять столбцы ты себе нафантазировал, какая блять впизду вьюшка?
Я не за выборку спрашиваю, я спрашиваю за отображение записей в конечном графическом интерфейсе для околоадмина/заказчика и как лучше/правильнее с этим совладать, кроме как выгрузить сразу всю базу, а то на что ты отвечаешь это уже совсем другой вопрос.
Или это такой местный тролинг тут?
Ты не разбираешься в самых азах. Всю базу выгрузить для интерфейса — вообще лхуительные истории.
САП ДВАЧ, Я НЬЮФАГ, КАК НАПИСАТЬ ХЕЛОУ ВОРЛД
@
-СХОДИ В КАЧАЛКУ И ПСИХОЛОГУ, ПОБРЕЙСЯ, ПОЧИСТИ ЗУБЫ И КЛЕЙ ТЯНОЧЕК НА УЛИЦЕ
@
НО Я ВЕДЬ Я ЭТО НЕ УПОМИНАЛ
@
-ЭТО НЕ ЗНАЧИТ ЧТО Я НЕ ИМЕЛ ВОЗМОЖНОСТИ ПОНЯТЬ ЧТО У ТЕБЯ ПРОБЛЕМЫ С ТЯНКАМИ
@
НЕ ЗА ЭТО Я СПРАШИВАЛ
@
-ТЕБЕ НУЖНО РЕШИТЬ ПРОБЛЕМУ, Я ТЕБЕ ГОВОРЮ КУДА СМОТРЕТЬ
Тащемта я вообще не ожидал что мне тут даже отпишут, лучше чем ничего.
Ты хуйню несешь и никакой конкретики не даешь.
САП ДВАЧ, Я НЬЮФАГ, НО У МЕНЯ ЕСТЬ ЕБАНУТЫЙ ВОПРОС И ЕБАНУТОЕ ПОНИМАНИЕ СУТИ ПРОБЛЕМЫ
@
НЕ ДЕЛАЙ ХУЙНЮ, СДЕЛАЙ НОРМАЛЬНО И ПРОБЛЕМЫ НИКАКОЙ НЕ БУДЕТ
@
ТЫ ХУЙНЮ НЕСЕШЬ, ЖДУ ДРУГИХ СОВЕТОВ
@
НЕ ДЕЛАЙ ХУЙНЮ, ПОДУМАЙ
@
ТУПЫЕ АНОНЫ ОПЯТЬ ПЫТАЮТСЯ МЕНЯ ЗАТРОЛЛЕТЬ
Скинешь схему БД — поясним конкретно.
> Вот например есть абстрактное овердохуя количество записей (с байтмасивами) и если я попытаюсь сделать просто
> select * from zhopa
Почитай описание селекта в документации. Там есть ключевые слова LIMIT и OFFSET. Никто никакую базу никуда не загружает, если не совсем долбоеб. Гугл на твой вопрос за секунду ответит.
Одну. Ты не понимаешь, что делаешь. Пиздуй читать статьи для ньюфагов. Тебе абсолютно бесполезно отвечать на данном этапе.
Так ладно, попытаюсь по другому пояснить:
Мне надо (все столбцы блжад) конкретную таблицу (из которых может выбрать пользователь) вывести для просмотра. Сейчас у меня затычкой в программе стоит
> select * from zhopa
но, так как записей в будущем может быть теоретически дохуя, я резоно подметил что мое конечное говноприложение может лагать при загрузке/просмотре.
И поэтому все что я пока изобрел либо загружать в мою прогу допустим по 1к записей из таблицы либо дать возможность пользователю выбрать по какому-то фильтру (например загрузить с 40 по 1200 запись).
И поэтому спрашиваю как выводят таблицу для просмотра местные гуру-аноны.
Либо пагинация используется, либо запрашивается для листинга минимум данных, а при необходимости запрашивается уже и остальное. Никто всё в памяти не держит, это типичная ошибка мудаков, которым лень статьи для самого начального уровня почитать.
https://doc.qt.io/archives/qq/qq07-big-tables.html
Вот так вот и сразу, спасибо
>Никто всё в памяти не держит
Отобразить же мне как-то нужно изначально
> Отобразить же мне как-то нужно изначально
Это не требует того, чтобы все в памяти держать. Насколько я понимаю, у тебя там сишарпопараша, наверняка ASP.NET, поэтому кури пагинацию, как у всех остальных. Если все же под десктоп пилишь что-то, то просто таблица нужна, держущая в памяти только определенное «окно» (видимая часть плюс еще по N строк выше-ниже; только не ручками говнокодь, а приложи усилия и изучи гугл на эту тему, чтобы нормальную обертку написать).
если ты хочешь заебаться, то можешь сделать подгрузку, как в крутых TOAD/Workbench.
грузишь первые 500, когда пользователь пролистал до 500, то подгружаешь ещё 500.
Но если твой заказчик такой мудак, что хочет за раз 10к записей без фильтров, то тебе пиздец.
http://www.itprotoday.com/microsoft-sql-server/logical-query-processing-clause-and-joins
А, понял, у него там иннер жойн и аутер жойн выдавали один и то же результат, даже когда были non-matches, потому что он не там ON поставил.
Пользователю дохуя записей в интерфейсе не нужно. Для того, чтобы получить вменяемое количество записей нужны фильтры.
Если же все-таки ты думаешь, что тебе нужно таскать из базули тысячи записей для отображения в интерфейсе (на самом деле нет), то посмотри что такое пейджинация.
>овердохуя количество записей
>с какого поля и до какого поля вывести записи с таблицы
Ты не путаешь поля со строками? Полагаю, что путаешь, потому что динамически выбирать поля для большого списка - крайне сомнительная и странная затея.
Как я понял тебе нужно вытаскивать данные большого объема. Поскольку ты сразу выбираешь сотни записей, то и байтмассивы твои не нужно вытаскивать, пока на то не будет явной необходимости. Т.е процедура для списка должна показать тебе только те поля, которые дают общее представление о записи, а уж потом, когда пользователь выберет конкретную запись - подгрузить объемные данные.
Если у тебя можно бегать по записям стрелками вверх и вниз, то есть смысл сделать загрузку дополнительных данных после того, как пользователь постоял на записи 0.2 - 0.5 секунд. Ну или явно по нажатию кнопки подгружать.
Тут не сайт платиновых процедур нужен, а элементарный здравый смысл. Если ты тащишь тысячи записей, то пользователю все сразу, в один момент их никак не обработать.
>Оператор левого внешнего соединения LEFT OUTER JOIN соединяет две таблицы. Порядок таблиц для оператора важен, поскольку оператор не является симметричным.
>Порядок таблиц для оператора важен, поскольку оператор не является симметричным.
Серьёзно, блять?
Абсолютно серьёзно. Левый внешний выдаст строки из левой таблицы, которым нет соответствия в правой.
482x360, 3:11
Так же вдруг оказалось, что я как еблан поставил MySQL 5.Х вместо последней восьмой версии. Скачал ее, а она предлагает обновить shell и connector, но не сервер. Это нормально? Сервер с 5 до 8 версий не менялся вообще что ли?
консолька оказалась лучше всех gui
Окей, начал вкатываться. Почему я могу использовать alias balance в order clause, но не могу в where clause? Так и должно быть или я чего-то не понимаю?
Так и должно быть.
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-ex.ru
если совсем с нуля, то раздел Arcade->SQL на codefighting.
Тебе нужно запросы к этим JSON'ам обрабатывать или там они будут просто валяться?
Для этого лучше постгрес взять, там полная поддержка JSON со всеми индексами без костылей. Ну или же документоориентированное что-то, конечно.
Найдется решение в один запрос, конечно, но по эффективности у двух селектов оно будет сосать.
Так оно и делается. Если есть возможность на стороне приложения кэшировать в какой-нибудь redis крайние значения, то это будет самый лучший вариант. Если нет, то делай вьюху. Еще лучше — материализованную, но для неё нужно будет с триггерами и процедурками поебаться, так как искаропки нет их, кажется. Будешь просто при необходимости обновлять значения в ней. Впрочем, с индексами первое и последнее значение все равно не дорого получать.
Охуеть, все дело оказалось в distinct. Интересно, что у них за проверочная база такая, у которой есть зачем-то одинаковые записи в Laptop таблице.
Спасибо за ответ.
Как правильно хранить вектора большой длины (несколько сотен минимум) в БД при условии, что по этим векторам нужно будет осуществлять поиск?
oracl
c#
мне нужно подключить базу данных к вижуал студио
когда я пытаюсь это сделать, вылезает ошибка
что делать? как исправить?
вообще говоря, нужно ли над базой данных производить еще какие-нибудь действия, кроме ее наполнения и написания всяких запросов и триггеров?
импортировать каким нибудь образом?
я полный профан очень нужен ваш совет
SQLite наверное?, потому как будет несколько независимых друг от друга наборов таких векторов и к ним должен быть доступ из мобильного приложения без интернета.предполагается, что пользователь скачивает сразу весь набор и пользуется ими
Мне кажется мы друг друга не поняли.
Сущность, хранимая в базе, имеет следующий вид:
x,y,z, feature_vector(500)
В ходе работы с базой мне нужно будет выполнять запросы типа
select * from entities where x = x_value+- error, y = y_value+=error...
Так для всех трёх координат и для каждого элемента вектора.
У меня стоит несколько вопросов:
1. Хули делать с вектором? Делать 500+3 столбцов кажется странной затеей, как обычно такую проблему решают?
2. Подойдёт ли для этого SQLite в плане производительности? Есть ли альтернативы?
Понял. Тебе тогда лучше две таблицы сделать, наверное, и unique повесить на (x, y, z). У тебя тут классический one to many будет. Если в feature_vector не предусмотрена перестановка мест элементов, то можешь при селекте сортировать по PK, в противном случае придется еще одну колонку для порядка городить. В принципе, если тебе так удобно, ты можешь свой список сериализовать и обрабатывать его в приложении, чтобы с реляционками не ебаться, если тебе не интересно это. Будет всего одна таблица, не нужно будет с джойнами разбираться и все такое.
> Подойдёт ли для этого SQLite в плане производительности?
Еще не знает история случая, когда бы на Андроиде производительность в SQLite упиралась. Ты же не бэкенд для хайлоада делаешь, ну.
А что даст уникальность x, y, z?
А с сериализацией неплохая идея, я правда хуй знаю, хорошая ли идея постоянно строки разбивать и конвертировать. Надо будет потестить, может лучше окажется в bytearray в блоб засунуть.
Спасибо за помощь.
> А что даст уникальность x, y, z?
Отсутствие подводных камней с дублированием объектов плюс индексы.
> хорошая ли идея постоянно строки разбивать и конвертировать
Видно, что ты с реляционками почти не знаком и сделаешь хуйню. Так ты сделаешь меньше хуйни. Потом всегда будет возможность разобраться в технологии поглубже, но пока что ты будешь хуйней маяться вместо решения задачи. Добра.
>То чувство, когда, работая веб-макакой в довольно мелком проекте, половину рабочего времени тратишь на индексы и дрочь на снижение total cost запроса с 1000 до 950
Да.
Пилишь потоки, маппинги всякие в ETL-инструменте, консультируешь аналитиков, оптимизируешь скрипты. Плюс еще куча всяких связанных задач. Что конкретно тебя интересует?
Чье рабочее время ты собираешься учитывать? В каком контексте? Какие задачи должны быть решены?
>Чье рабочее время ты собираешься учитывать?
Просто регистрировать время ухода и прихода работников.
>Какие задачи должны быть решены?
Учёт рабочего времени: сколько часов в день, неделю месяц, год по отдельным сотрудникам и целым отделам, а так же опозданий и ранних уходов.
Первая очевидная мысль - таблица с периодами, привязанная к работникам, с парой таймстемпов или tsrange.
Какой ид повторяется?
Очевидно, что ид сотрудников не должны быть уникальными. Потом по ним дергаешь все рабочие сессии и уже их обрабатываешь, как хочешь.
И почему в этом упражнении правильный ответ - создать индекс на пару (дата_транзакции, количество), а не на все 4 колонны вместе, как делается индекс на все используемые колонны в предыдущих картинках.
>Потом по ним дергаешь все рабочие сессии и уже их обрабатываешь, как хочешь.
А примерно, как должна выглядеть такая БД?
Мне вот подкинули ТЗ на йобо-фитнесс-приложение и там довольно интересная схема таблиц выходит и что бы не запутаться и контактировать с другими разрабами думаю перенести мысли по БД в графическую среду.
Под руку попадаются лишь сомнительные онлайн сервисы, а есть ли что-то десктопное и мощное?
P.s. планируем юзать postgresql+mongodb
пиши схемы в виде текста, а визуализация пусть происходит автоматически какой-нибудь тулзой.
Вот меня и интересуют тулзы для такой визуализации текста
Турникет понимает, в какую сторону прошел человек - вход или выход?
Поля Начало, Конец обязательными делать нельзя - у тебя он даже просто войти не позволит, будет ругаться на то, что Конец пустой. Но это не все - допустим, у тебя выключили свет с утра , всех пустили в обход турникета, люди выходят вечером - никого выпустить не можем.
Я бы хранил так (навскидку, не претендую на абсолютную истину):
Таблица 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 часов.
У определенной группы пользователей должна быть возможность редактировать эти данные, естественно, с ведением аудита - кто, что и когда менял.
Можешь добавить причины начала и окончания сессий - если тебе нужно будет потом отличить отгулы на полдня от прогулов.
Как должна выглядеть БД - вопрос странный.
У тебя должны быть таблички фактов прохода сотрудников через турникет, реестр турникетов, реестр карточек, табличка привязок карточек к сотрудникам (с учетом актуальности), реестр сотрудников, реестр отделов, реестр связи сотрудника и отдела. Плюс служебные таблички для статусов, причин и т.п.
Турникет понимает, в какую сторону прошел человек - вход или выход?
Поля Начало, Конец обязательными делать нельзя - у тебя он даже просто войти не позволит, будет ругаться на то, что Конец пустой. Но это не все - допустим, у тебя выключили свет с утра , всех пустили в обход турникета, люди выходят вечером - никого выпустить не можем.
Я бы хранил так (навскидку, не претендую на абсолютную истину):
Таблица 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 часов.
У определенной группы пользователей должна быть возможность редактировать эти данные, естественно, с ведением аудита - кто, что и когда менял.
Можешь добавить причины начала и окончания сессий - если тебе нужно будет потом отличить отгулы на полдня от прогулов.
Как должна выглядеть БД - вопрос странный.
У тебя должны быть таблички фактов прохода сотрудников через турникет, реестр турникетов, реестр карточек, табличка привязок карточек к сотрудникам (с учетом актуальности), реестр сотрудников, реестр отделов, реестр связи сотрудника и отдела. Плюс служебные таблички для статусов, причин и т.п.
Спасибо за развернутый ответ.
>Поля Начало, Конец обязательными делать нельзя - у тебя он даже просто войти не позволит, будет ругаться на то, что Конец пустой. Но это не все - допустим, у тебя выключили свет с утра , всех пустили в обход турникета, люди выходят вечером - никого выпустить не можем.
Там сетевой контроллер, который не видит разницу между входом и выходом, только факт срабатывания считывателя (очень древняя технология древних).
>Как должна выглядеть БД - вопрос странный.
И если честно, мне нужен учёт времени и хранение полученных результатов (по дням, месяцам, годам) и отделам, с учётом того, что люди могут выходить из здания по делам и возвращаться обратно в течение смены. Не хранить же для каждого сотрудника таблицу в 365 дней и рабочими датами?
Если у тебя просто срабатывание датчика, то тогда колонка с направлением движения не нужна - ты ее не сможешь заполнить.
Учет времени и хранение у тебя будет по определению. СУБД для того и нужна - хранить.
Если у тебя всего одно здание, то какой поток в день? 1000? 2000? Это все очень маленькие количества записей.
Для каждого сотрудника будет несколько записей на день, да, это нормально. СУБД справится, не переживай.
480x360, 1:28
>Учет времени и хранение у тебя будет по определению. СУБД для того и нужна - хранить.
А вот как лучше всего это реализовать - я без понятия. Важно же не только хранить, но и получать доступ к хранимой информации.
>Если у тебя всего одно здание, то какой поток в день? 1000? 2000? Это все очень маленькие количества записей.
500 примерно.
Какие инструменты? Че несешь? Уже с timestamp'ом без мокрописек совладать не можешь?
Да я про разные. Например как при подсчёте общего времени учитывать только будние дни?
https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html
> DAYOFWEEK
Это называется документацией.
Я же не прошу сделать за меня базу данных, просто спрашиваю как люди решали эту проблему.
Ты еще даже со схемой не определился. Чтобы с тобой говорить, нужно её самому за тебя сделать, а потом примеры запросов показывать. Повторяю, никто этим заниматься не будет. Задача у тебя простейшая, за время, прошедшее с создания твоего вопроса здесь, ты бы её уже худо-бедно решил.
>Ты еще даже со схемой не определился.
Так мне нужна идея, как это реализовать правильно, а не сами запросы (пока что). Пока что есть идея при создание нового пользователя создавать отдельную таблицу, где один столбец будет общим временем за день, второй - датой этого времени.
> при создание нового пользователя создавать отдельную таблицу
Иди, блядь, читай, идеи свои охуительные отбрось и хоть немного разберись в теме. Потом поймешь, как мне тяжело сдерживаться и не покрывать тебя хуями. Ты свое время проебываешь и нихуя не делаешь. Пиздуй, блядь, читать. У тебя задача самого вводного уровня, соберись.
>Иди, блядь, читай, идеи свои охуительные отбрось и хоть немного разберись в теме.
Так где можно почитать про учёт времени через sql?
гугли opensource СКУД системы. если получится, то молодец.
Вообще что тебе нужно.
1) сделать опозанание где вход, а где выход.
2) Если человек не вышел, то ставить время 00:00, например.
3) додумать закрытие для случая два, если он вышел в 00:00.
Если ты не можешь спроектировать бд, то пиздец, блядь, купи готовое решение.
Вот это круто, на каждую запись новую табличку. Дейтом теперь только подтереться можно, нормальные формы, отношения, кортежи, муть какая-то.
Так и делай, анон, потом покажешь, что получилось. Думаю, получится отличное решение, тиражируемое и масштабируемое.
Похоже ты совсем нулевой. Почитай хотя бы как вообще БД используются, хотя бы простейшие примеры как делается список сотрудников. Если ты думаешь, что таблички - это типа как файлики, то спешу разочаровать, это не так. Я тебе даже примеры таблиц написал, но судя по всему ты это вообще не воспринял. Иди на sql-ex.ru, читай все с нуля, тред сохрани, потом (если) осилишь саму идею РСУБД перечитаешь. Пока что тебе особого смысла нет объяснять, у тебя нет элементарных знаний.
Вообще, мне нужен СКУД, мне нужно хранение данных о времени, что бы в любой момент можно было запросить то, сколько часов человек работал в мае 2018 года.
>>189493
>Вот это круто, на каждую запись новую табличку.
Ну так назови альтернативу, что бы можно было хранить данные по каждому дню у каждого сотрудника.
хуле ты такой тупой то?
хранишь id сотрудника timestamp тип события(вход, выход)
а потом селекты нормально составляешь.
>Назвал уже, перечитывай пока не поймешь:
И я уже писал: проблема не в контроле доступом, а в хранение результатов полученных результатов.
>хранишь id сотрудника timestamp тип события(вход, выход)
Работник может и 15 раз за день выйти.
Колонки:
id (сессии; автоинкремент, PK), id_сотрудника, время_начала, время конца. Мудак ты ленивый, ты бы уже после первого же тутора для детей понял, как это хранить можно. Но ты всё ждешь, когда за тебя все тебе в рот положат и разжуют.
Нет, у тебя идиотская идея. Никуда время не добавляется. Начинается новая сессия, запросом уже просуммируешь продолжительности сессий, но делать ты это будешь сам.
>Нет, у тебя идиотская идея. Никуда время не добавляется. Начинается новая сессия, запросом уже просуммируешь продолжительности сессий, но делать ты это будешь сам.
Так ведь вопрос был и в этом: куда суммировать время так, что бы потом можно было его легко и просто достать.
Еще раз почитай. Там все ключевые моменты есть, но могу еще раз повторить - анализируй сырые данные с девайса и заполняй таблицу рабочих интервалов.
Единственная сложность - это то, что данные с девайса не дают тебе 100% данных для учета, в случае, если девайс на время выйдет из строя, тебе нужно предусмотреть возможность как автоматически, на основе каких-то правил или режимов работы, так вручную, с помощью клиентского приложения, разрулить входы без выходов, выходы без входов и ударную работу по 36 часов во время авралов.
Один из возможных вариантов дальнейших действий: выбираешь стек технологий - СУБД, платформу для бизнес-логики и для клиентских приложений с учетом желаемой архитектуры - простой клиент-сервер или трехзвенка
Рисуешь схему данных, создаешь таблички.
Пишешь бизнес-логику, она же бэк-энд, прикручиваешь к ней клиентские приложения.
Никаких вопросов про тонкости обработки дат в SQL быть не должно. Это все разжевано в документации к БД.
Я спорить не буду. Порекомендую тебе съебаться из треда и начать что-то делать, но если останешься, то с удовольствием понаблюдаю за тобой.
Небось ещё по IP пробиваешь.
А ты прям мастер хуястер. Здесь вообще никого нормального нет.
ты тупой? Ты настолько ленив, что не можешь считать суммы в процедурах?
ебать ты.
Я мог бы тебе написать всё это, но бабла у тебя конечно же нихуя нет, как и мозга
Подскажите какой нибудь sql учебник для самых маленьких.
>select * from ... where sale = @idSale
А где гарантии, что у тебя там одна запись по этому условию?
Есть одна таблица в которой требуется найти дубли по двум столбцам и сгрупировать их. Так вот есть один запрос, выделен на пикче, нужно его оптимизировать-перепилить.
Дубли должны находится по колонке CommunicationType и SearchNumber, как и делает мой запрос. Однако, как на выходе не получать лишних "групп"? Например, на пикче есть две группы, но нужно что-бы была только одна т.к. первая полностью входит во вторую, но есть условие что в группе не может быть меньше 2х записей. сори за качество пикчи
Очень нужна помощь HALP PLZ
Что убрать? Или оставить как есть?
Мартин Грубер Понимание SQL.
Дейт - Введение в СУБД.
В процессе чтения обязательно задрачивай тысячи запросиков - на sql-ex.ru или на codefight.com в разделе Arcade -> SQL
Нет, это ненормально, а очень и очень плохо.
Связи на картинках не будут нормально работать. Допустим, ты завел 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, при показе данных из справочника проверяется дата и показываются только актуальные - либо с не наступившей датой окончания, либо с пустой.
Резюме - убираешь табличку Подтип, в упражнениях оставляешь ссылку только на тип, табличку Тип делаешь иерархическим, делаешь первичные ключи во всех таблицах, связи переделываешь на первичный ключ, добавляешь внешний ключи, индексы по ним.
Советую посмотреть книжки из поста выше - судя по твоей схеме тебе будет крайне полезно, узнаешь много нового.
Нет, это ненормально, а очень и очень плохо.
Связи на картинках не будут нормально работать. Допустим, ты завел 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, при показе данных из справочника проверяется дата и показываются только актуальные - либо с не наступившей датой окончания, либо с пустой.
Резюме - убираешь табличку Подтип, в упражнениях оставляешь ссылку только на тип, табличку Тип делаешь иерархическим, делаешь первичные ключи во всех таблицах, связи переделываешь на первичный ключ, добавляешь внешний ключи, индексы по ним.
Советую посмотреть книжки из поста выше - судя по твоей схеме тебе будет крайне полезно, узнаешь много нового.
1. Понял про ключи, спасибо(дело в том, что я ORM юзаю, и тут с этим проще, оно само привязывается к primarykey unique с автозаполнением).
2. Можешь чуть подробней пояснить про типы/подтипы в одной таблице?
P.s. Спасибо за книги
призывается бородатый бдшник
ситуация: есть одна sqlite3 бд, в ней 130+ таблиц. В эти таблицы постоянно пишется дата, которая парсится с некого api. В тоже время, из этой базы берется эта же дата на обработку. То есть постоянные insert'ы и select'y.
Как бы ускорить это дело? все, конечно, на python
> SQLite
Заменить на что-нибудь более серьезное. Остальные оптимизации не подсказать без экстрасенса, да и бесплатно никто не будет этим заниматься.
т.е.:
things(id, thing_id)
id: 1, thing_id: 3
id: 2, thing_id: null
id: 3, thing_id: null
id: 4, thing_id: null
Нужно отсортировать, что бы было 1 и 3 были рядом, например:
1,3,2,4
Как?
Пример точно правильно написал?
960x540, 1:15
Бамп вопросу!
>>188501
>Тома Кайта
Гугл выдал 6 учебников по ораклу, который вроде как не надо использовать потому, что он охуенно мощный и дорогой. В общем адская дрочильня для серьезных заданий, а не для вкатывальщика.
Мне бы что-то по MySQL, Postgre или по SQL вообще. Именно как делать все не только select, join а ещё например создание юзеров, таблиц, процеры какие-то, о которых у Алана ни слова, зачем, и как делать это быстро.
поглядел кучи рецептов по ускорению, вплоть до эксплоитов на плюсах, кажется.
Индиксация мне не подходит, потому что постоянный Insert. Думаю, остановится на многопоточности и реализации шаблона consumer. Еще говорят, есть кучи конфигов, которые не гонятся за производительностью.
Может быть вместе и сработает. Ну а еще докучи буду писать в память и только читать. Раз в какое-то время дампить в базу на диске.
какие подводные?
>меняй на оракл или postgre
- инсерты к селектам: 1 к 3
- 135 таблиц в бд. По 7M полей. Фулом не обхожу. Все вычисления из последних сотен тысяч.
так и поступлю
Ты через жопу свои охуительные идеи описываешь. То, что ты озвучил, больше похоже на базу в tmpfs. С кэшированием данных иногда все просто, а иногда сложно и почти бесполезно, поэтому нужно смотреть по задаче. Вот я и спросил.
Поддерживаю тебя в этом. Не забудь, что там есть полноценная поддержка JSON, что где-нибудь тоже может помочь в срезании углов.
зацените на грани бреда: а что если, я сделаю каждую работу с таблицей как отдельную базу данных? И буду в 135 потоках ебашть в них асинхронно? Ну и запрашивать в этом же потоке.
Может так быть? все на питоне
формирую джсон уже на фласке и в рест апи
Я траллел, а ты не понял.
>>191930
> - 135 таблиц в бд. По 7M полей
И как sqlite работает? Не лопается к хуям?
>>191954
Ты мог бы посмотреть в сторону игнайта, тебе и встроенный кэш, и SQL какой-никакой, и масштабирование до плюс бесконечности, и встроенные мап редьюс операции близко к данным, но у тебя объемы крошечные, поэтому бери постргре и успокойся.
>>191960
Ебаклак просто. Возьми любую базу данных, которая нормально поддерживает многопоточность, не обосрись с блокировками (вдруг), обеспечь, чтобы твоя приложуха срала и жрала говно с БД также многопоточно и все будет хорошо.
Ну ладно, ты будешь идти на улице, тебя арестует нацгвардия, потом окажется, что у тебя в кармане был аргентинум и пойдешь по 228.
Так это у тебя иерархический запрос, только сортировку по веткам нужно будет сделать обратную.
Гугли "иерархический запрос CTE"
Я имею ввиду, в каком формате? Есть три опции: html, Markdown и JSON. Сам склоняюсь в пользу последнего.
>2. Можешь чуть подробней пояснить про типы/подтипы в одной таблице?
Да вроде все сказал, куда уж понятнее.
Когда у тебя рубрикатор в виде дерева, ты можешь поддерживать вложенность любой глубины, хоть 10 уровней. В твоем варианте ровно два уровня. Через две недели после запуска к тебе придет Машенька из отдела маркетинга и скажет - "а неплохо бы нам сделать три уровня для упражнений". И твоя схема поплывет - как в части рубрикатора, так и в части его использования - теперь у тебя для одного подтипа получается три уровня иерархии, а колонок только две.
Нужно делать новую таблицу, новую колонку, новую форму, новые запросы и т.д.
А когда все в иерархической структуре лежит, то тебе все нужно написать один раз. Конечно, код получится немного сложнее, но его в итоге будет меньше. Максимально возможную глубину иерархии ты можешь вынести в конфигурационную табличку, если нужно жестко ограничить пользователей тремя уровнями, например.
В табличке Упражнения будет ровно одна колонка с ссылкой на запись в типах. Из нее ты всегда можешь развернуть полную иерархию.
Если что-то непонятно, то задавай более конкретный вопрос.
> html
Уже отрендеренный.
> Markdown
Который нужно рендерить.
> JSON
Который нужно рендерить.
Ты не понимаешь, чего хочешь. Тебе нужно еще подумать.
Мне надо хранить текст, созданный с помощью react-draft-wysiwyg. Функции для рендера и конвертации одно в другое там есть. Хочу хранить в JSON потому что в СУБД, которую я юзаю (PostgreSQL), есть полноценная поддержка работы с ним.
А что тебе с текстом нужно делать в базе?
> Хочу хранить в JSON потому что в СУБД, которую я юзаю (PostgreSQL), есть полноценная поддержка работы с ним.
Дядя, ты дурак? Ты будешь делать запросы к отрендеренным постам в бложике? Отвечу: не будешь. Хуйню думаешь, думай ещё.
> все в иерархической структуре лежит
Вот насчёт этого сможешь пояснить? Как она будет выглядеть ирл, структура такая, на реальных данных.
вместо dense_rank() юзай row_num() over (partition by communicationtypeid order by number. потом обобщай запрос и отсекай те записи у которых row_number() будет > 1.
Смысл: есть юзеры. у юзера есть возможность создавать таблички(проекты?) в программе.
Например табличка нравится / не нравится. Записей может быть разное количество. Нравиться 5, не нравиться 8 и т д.
Количество записей в каждом проекты может варьироваться. То есть типизировать проекты и записать в 1 не получиться.
Как сделать БД? Разбить каждую запись в отдельную таблицу? Объединить все к хуям в большую?
Погуглмл, что то сильно замудренные ответы. Я думал средствами sql это намного проще (
Спасибо, буду разбираться
У тебя тут получается обход дерева, по сути это и есть сортировка, только по особым правилам.
Если у тебя ровно два уровня, то можно и самоджойном обойтись, а если уровней несколько может быть, то нужно рекурсивно обходить.
Причем у тебя иерархия в обратном порядке задана, там еще аналитическую функцию нужно будет сделать для такой сортировки как тебе нужна.
Если у тебя всегда ровно два уровня может быть (т.е. в твоем примере 3 на втором уровне и у этой записи thing_id всегда пустой), то это проще сделать.
Лучше в тексте.
Рано или поздно придется сохранить номер с решеткой или звездочкой, или добавочный какой-нибудь.
лучше разбить номер на все составные: регион int, оператор int, номер int. Дальше можно реляционные таблицы сделать к оператору, регионы и тд. Это в случае, если тебе нужно максимально быстро делать выборку
У меня нет такой выборки. Храним в базе просто номера клиентов. Для смс рассылок достаточно, у нас тем более клиентов всего 30к и все из РФ, поэтому не имеет смысла.
Если для рассылок - храни текстом, можно завести еще одно поле для типа контакта - телефон, почта, учетка телеграм, что там еще есть.
Мальчик, ну ебаный в рот, я конечно понимаю всё, но не учи отца ебаться. У тебя еще молоко, а может и не молоко, на губах не обсохло, когда я начинал с sql работать.
Минимизацию функциональных зависимостей*
30 лет-то перевалил, отец?
Если ты такой гуру, то вопросов как хранить контакты быть не должно.
Если хочешь по существу пообщаться - скажи, чем плохо хранить все контакты в одной таблице с указанием типа контакта (сотовый, мессенджеры и т.п.)?
Разменял 4 десяток 2 года назад. По заданным тобою вопросам ответа не знаю. Извини меня пожалуйста. Мне нечем заняться в воскресенье вечером. Я одинок и мне грустно. Одна отрада траллить на харкаче.
Просто удивился такой реакции на безобидное предложение.
Я в твоем возрасте (сейчас 38) тоже один был, тоже грустно было, а сейчас вспоминаю те времена - свои плюсы тоже были.
Сейчас у меня другая крайность - семья, дети мелкие, никуда толком не выбраться в одно лицо, заботы, хлопоты и рутина, только на дваче урывками и сидеть осталось.
Сам себе не ответишь никто не ответит
Появилась идея сделать не каждую отдельную таблицу на каждый тип проетка юзера, а сводную по всем полям всех проектов. Насколько это хуевая идея?
Почему то навикет импортирует эту хует в 10й постгресс с ошибками, Реквест на другой проектировщик БД с экспортом
Просто не совсем понятно, что ты хочешь сделать, анон.
Да, можно все атрибуты описать в одной таблице, есть такой подход. Погугли Entity-Attribute-Value.
Но нужно понимать, что это далеко не панацея и у этого подхода есть серьезные минусы.
>Entity-Attribute-Value
Сейчас загуглю. Спасибо. Хоть будет откуда копать.
Несколько видов сущностей, которые могут отличаться между собой количеством полей, и каждое поле не обязательно...и количество не регламентировано.
Как список за / против составляется. 2 колонки - 1 за 1 против. И там и там есть какие то записи. Их может быть произвольное количество.
А в другом варианте еще появляется произвольное количество колонок..
Navicat.
table1:
ID
Name
cID
table2:
ID
cID
value
Для 1й записи может храниться множество значений во второй таблице.
Необходимо забрать только последнее значение из table2. Помогайте, горю.
Не ругайся. Достаточно адекватный вопрос для треда. В начале не всё интуитивно понятно, и системный подход к обучению тут тоже не сразу начинает работать. Он же не просит схему на %курсовая_нейм% ему быстро накидать и объяснить всё.
> каким хуем этот запрос вообще будет работать?
Хз, где-то, может, и сработает.
> Где гарантии, что ID первой записи всегда 1?
В условии задания, полагаю.
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)
но как сделать запрос по диапазону фрагментов??? Или как иначе можно ускорить??
>Но блин проблема в том, что уже 71 минуту считает, а результата нет.
Наверное, индексов нет.
Там все нормально я думаю настроили. Это я просто не умею пользоваться
>>195969
А что такое range для partition?
>>195970
>>196105
Я не знаю даже что это такое...
Вообщем ночью придумал запрос выполнять по каждому фрагменту таблицы по отдельности. Прикинул что в одном месяце 30 дней, то есть 30 фрагментов. И сидел запускал 30 раз ночью такой запрос:
select /+ parallel(32) /type, count(*)
from table partition(p_01_01_2017)
group by type;
Потом результат каждого вставлял в librecalc. В конце в librecalc просуммировал формулой всех 30 дней значения и получил результат за месяц. Для ускорения использовал parallel, хотя его запрещают использовать почему то. Надо все таки как то фундаментально этот sql выучить, а то так запаришься.
Всем спасибо за помощь, пацаны!
Ну блеать, просишь свою субд explain и она тебе план запроса говорит. Оптимизация и тюнинг эт пиздец. Люди книги на эту тему пишут
Ну блин я понял, они реально шарят, уважение им.
Допустим есть таблица с постами:
post_id, post_text
таблица с тегами:
tag_id, tag_name
и таблица связей
tag_id, post_id
У меня вопрос, как мне селектить все посты, что бы к каждому посту еще и массив тегов летел в каком-то виде? Желательно что бы каждый тег еще был отдельным элементом, а они не были склеены скажем в строку, спасиб.
У нас бэкэнд на MongoDB. Нужно хранить в БД оче большие файлы. Требуется собирать файлы по частям перед заливкой в бд. Оказалось, что это требование возникло из-за того, что GridFS не позволяет обновлять файлы в базе (дописывать к ним байты). Есть ли NoSQL СУБД, в которой реализован аппенд к файлам,уже хранящимся в бд? Как с этим дела в CouchDB?
Тип сделай описательный. Либо запрос с order by post_id
Либо сделай анонимный блок, который будет тебе возвращать в loop селект от айди поста и все теги столбцом для этого поста.
Монго же большие файлы вообще хранить не умеет. Пробовал хранить не сами файлы, а ссылки на них? А для ссылком развернуть распределенную файловую систему?
>Пробовал хранить не сами файлы, а ссылки на них?
А почему все бд не делаю так? В чем профит хранить сам файл в БД вместо какой-нибудь строки "c:/yoba/cp/peperoni_pizza.png" ?
только вкатываюсь
1)Оно о distributed data storage. То есть каких-то баз данных, которые разделены между разными компьютерами. А то я сначала не понимал, как, выбрав Availability, кто-то сможет получить ответ от моей БД, если она только на 1 моем пк расположена и в данный момент лежит мертвая.
2)Consistency значит, что запрашивающий будет получать самую новую информацию, up-to-date то есть. Я пока пишу\учусь только на своем 1 пк, но я предполагаю, что в серьезных ебах видимо есть куча нод, которые принимают-отправляют транзакции, а есть какая-то группа главных еб, которая занимается сбором и учетом транзакций с остальных нод. И при выборе consistency мы или получаем от ответ от одной из главных нод, где учтены все изменения, либо идем нахуй, если нода лежит. А при выборе availability мы обращаемся сначала к главной ебе, если она не отвечает, то к ебе поменьше, и так, пока не получим ответ. Даже если он немного устарелый и в нем не учтены все транзакции.
Это так работает? Я все понял? Если я вкатываюсь в джуна, мне достаточно пока иметь это представление , и не пытаться понять, как вся эта адова машина работает на практике в серьезных предприятиях?
Ещё, я правильно понял, что consistency в CAP означает то, что я сказал - up-to-date информация. А consistency в ACID означает, что в бд есть защита от умников, которые в поле "возраст" вместо целого числа попытаются забить "23.5" или строку "23 с половиной годика"?
Запрети редактирование, лол. Рфс может ебашить не только, как таковая. Ставишь перед рфс - машину брокера и все.
Или йопта, купите отраслевое решение у оракла, он теперь в носкл может, что вам и нужно, а его клобы/блобы до 2 тб
Если решение прямо стоит с монго, то можешь программно все сделать с делением файлов.
А так ты попал со своими NoSQL
>>196704
Читай курс по субд и танненбаума. Это под разные задачи.
Вариант с хранением далеко и не в базе снижает нагрузку, однако надо мучиться с политиками безопасности.
Нет, не прав.
Согласованность - все узлы не противоречат друг другу в одмн эпизод времени.
Доступность - любой запрос к рс завершается корректно, но не факт что данные совпадут.
Устойчивость к делению - расщепление не приводит к некоректности ответа от каждой секции.
Почитай про Stand by system например у Оракла. Там все расписано, правда документы большие.
Ты в любом случае получаешь три режима ca cp ap
А еще говорит, что после стадии MVP на этом слое будут серьезные изменения.
Юзеры, их роли и третья. Как найти все роли одного юзера?
Хотя бы в какую сторону гуглить.
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;
Спасибо. Я примерно такое же сам писал.
Ну вообще работает.>>196934
А почему инер-джоин?
SELECT r.id,role_name FROM roles r
JOIN user_role ur ON r.id=ur.role_id
JOIN users u ON u.id=ur.user_id
WHERE u.nickname = 'User'
Названия строк не много не совпадают но думаю понятно.
Выдает то что надо. То есть фильтровано по имени пользователя, его роль.
Чтобы возвращало объект в хибернейте.Всем спасибо.
Потому что план выполнения эффективнее чем та дрисня.
Чтобы лохи из зекача бесплатно сделали за меня всю работу.
Там сложные запросы все равно надо писать.
Легкий да. 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 транзакций в секунду? Я даже никаких команд ему не пишу. Что он там самостоятельно крутит?
Ты что такой окукленный? Все бд через консоль включают. Это самый важный навык, а ты еще все это на винду накатил, долбаеб.
>Кстати, почему мой сервер уже делает по 5 транзакций в секунду? Я даже никаких команд ему не пишу. Что он там самостоятельно крутит?
Твой сервер майнит кому-то битки.
>Все бд через консоль включают
Да я и не против. Просто у MySQL сразу сказали, что и как сделать. А у постргреса вообще никаких упоминаний об этом. Сиди и ищи в документации сам.
>а ты еще все это на винду накатил, долбаеб.
Кстати, что с этим делать? Пикрил. Каким хуем вообще "кодовая страница консоли отличается от основной"? Кто это придумал? А почему не сделать вообще случайные кодовые страницы для каждой итерации запуска cmd? Ну и дальше, я меняю кодовую страницу на указанную, и что? Сообщение об ошибке psql не выдает, но я получаю нечитаемую хуйню. И как мне жить теперь?
Накати линукса и будь человеком
https://mariadb.com/kb/en/library/deprecation-policy/
Во второй таблице Deprecated-платформы со ссылками на последние релизы для них. В следующий раз попробуй сам погуглить.
Лучи добра, анон! Гуглил, но не нагуглил. Спасибо. А mysql версия 5.5.х какая последняя поддерживаемая windows xp?
Почему? Я в середине нулевых сидел плоьно на хрюше и спермосерверк 2003, помню, что mysql не было проблем.
Текущая реализация в SSRS: несколько процедур с выходным параметром типа sys_refcursor.
При перекате на Tableau я столкнулся с проблемой: в неё нельзя передать курсор из процедуры, только обычный SQL запрос.
Мне не хочется копировать эти запросы втупую. Во-первых, я не уверен, что мне удастся избавиться от PL/SQL полностью, во-вторых, я хочу, чтобы весь код был в одном месте.
Напрашивается использование pipelined function.
Оцените, пожалуйста, эту идею с точки зрения производительности и трудоемкости.
sys_refcursor vs pipelined function
БД-бояри взываю Вас. Вообщем есть бд в фокспро, нужно ее перетащить в пхпмайадмин делаю экспорт бд4 кодировка 1252(или какая она там) вообщем пхп орет что
>#1064 - У вас ошибка в запросе. Изучите документацию по используемой версии MariaDB на предмет корректного синтаксиса около '?v????' на строке 1
крч какая то залупа. Вопрос можно ли как-то открыть код бд и поглядеть его блокнот и нотепаде не помогает я хз у же че делать
а блять как код то выгрузить, все дело идет из галактики в фокспро я могу тока смотреть
У тебя есть среда где запросы выполняешь? Черещ нее проси код для каждоц таблицв или бд. Возьми VFP и сделай экспорт.
хех, вот в этом и прикол мб слышал о такой штуки как ЕРПИ ГАЛАКТИКА так вот выгрузка идет с нее, но о коде и речи и не идет, она автоматически создает бд и туда вбивает все нужные данные, такие вот дела
У нее преднастроенная база поумолчанию, хуле ты? А это значит, что ты можешь с ней сконнектиться
Она проверяет все строки. Нет такого, что проверил одну и дропнул.
блядь, анон, не ставь на винду постгресс. Поставь себе линукс уже
Если не забуду я тебе книг насоветую вечером по постгрессу.
Мимо Ораклист с опытом постгре
чет пхпмайадмин говорит что хуй, так как при создании она использует устаревший ситаксис, и на это админ ругается, и вот ебя труп пытаюсь ее затолкать в пхп
>Она проверяет все строки. Нет такого, что проверил одну и дропнул.
Но ведь подчеркнутое говорит обратное: как только попадается подходящая строка, проверяет только по ней, и если что не так - дропает. Вот я думаю, что сервер и должен проверить по IPv4 просто потому что он выше в файле и сразу дропнуть. А он почему-то дропает только если указать reject в IPv6. Может я чего-то не понимаю, и почему-то подключение к самому-себе не подходит под 127.0.0.1/32 ?
>>198273
>Поставь себе линукс уже
В соседней доске посоветовали виртуальную коробку и на нее линукс сверху. Попробую в скором времени.
>>198273
> книг насоветую
Было бы неплохо. Взял 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 дополнительных селекта? Если у тебя постов скажем много?
Как с подобными вещами работают? Как вообще с такой базой подружиться?
Обычные селекты с джойнами. Такие вещи делаются в рамках одного запроса, СУБД это быстро прощелкает. Это уже с действительно сложными запросами имеет смысл дробить запросы и считать что-нибудь в приложении, но у тебя дженерик вебпараша, где подобных проблем не существует.
Накати ORM, включи дебаг запросов и смотри, как там такое делается. В начале пути очень может помочь. Но не увлекайся, потому что учить SQL и учить ORM — очень разные вещи.
Это быстрые сортировки. Вычислительная сложность у них возрастает медленнее, чем линейно.
Ибо нужно сохранять данные, ибо сервисом уже активно пользуются и потеря данных недопустима.
Поэтому нужно мутить какой-то механизм миграций.
Есть 2 пути. Разработка через миграции.
То есть, когда-то создали некий baseline.sql с первоначальной структурой, а дальше ТОЛЬКО хуячишь файлы миграций с изменениями структуры и данных.
Этот подход плох тем, что, во-первых, писать эти изменения надо вручную. В итоге я нихуя не вижу текущую полную структуру БД.
Сейчас у меня вся структура в одном файлике, я целиком и полностью вижу все таблицы. Я я именно проектирую БД, а не пишу ссаные миграции.
Тут бы нужен некий инстурмент, чтобы я все так же описывал структуру в файлике, а эта ютилита брала предыдущую версию файлика и текущую и выдавала автоматом запросы sql, позволяющие получить новую структуру.
То есть, грубо говоря, нужен инструмент, который позволит автоматически создать sql-запросы, позволяющие из файла1 получить файл2.
Тогда бы технически вся разработка была через миграции, но я бы не пердолился с написанием этих самых миграций (максимум, проверял бы их корректность), а занимался именно изменением одного файла.
Короче, я хочу миграции, но не хочу вручную их писать.
Какие могут быть решения?
СУБД MySQL.
> Тут бы нужен некий инстурмент, чтобы я все так же описывал структуру в файлике, а эта ютилита брала предыдущую версию файлика и текущую и выдавала автоматом запросы sql, позволяющие получить новую структуру.
В жизни бы такую хуйню даже из любопытства не трогал. На проде с большим количеством данных вообще только вручную ебашить, если у тебя там не переименование столбцов.
По теме ничего сказать не могу, из всех мокрописек вокруг СУБД использую только автоматические рисовалки схем — и то схемы удобнее в текстовом редакторе накидать.
Посмотри EXPLAIN запроса и прикинь. Только данных побольше захуячь, потому что индексы СУБД на трех с половиной записях использовать даже не подумает.
Если мсье проектант ленится сохранять промежуточные скрипты ddl, то пусть изволит проследовать сюда: https://dev.mysql.com/doc/workbench/en/wb-design-schema.html или пусть погуглит db schema compare tools.
А еще пусть не выебывается и сохраняет скрипты для каждого вносимого изменения в упорядоченном виде, в системе хранения исходников.
Спасибо, уже понял, что один хуй нужны скрипты миграций и так или иначе они необходимы, буду писать я их сам или генерить.
Скачал этот workbench, уже обрадовался что можно быстро сгенерить запросы миграции, так эта хуйня откуда-то фантазирует несуществующие маня-ключи.
Что это вообще такое?
Таблица вообще не менялась.
Это просто разный синтаксис.
Запросы дадут одинаковый результат.
На то он и SQL - язык для менеджеров, чтобы можно было быстро таблички посмотреть без привлечения программистов, поэтому ты пишешь что ты хочешь получить, а не как.
СУБД разберется.
Есть одна бд SQLite. Там есть таблица с заданиями и таблица человеков. Для каждого человека нужно хранить все задания которые он выполнил. Как лучше такое хранить? В поле со всеми ид заданий или в отдельной таблице с строками человек-выполненое задание?
Насколько я понял, это работает так:
Если у каждого задания может быть только 1 человек то это one-to-one или many-to-one relationship - хранишь указание на человека, которому дано задание, в таблице заданий.
А если у каждого задания могут быть разные человеки, то это many-to-many relationship - делаешь таблицу типа person-task, где хранишь пары человек-задание.
Похоже ты сделал одинаковые измнения с помощью гуи-тулзы и на среде разработки, и на боевой.
Поскольку ты поленился назвать FK нормально, то тулза сгенерила имена по своему усмотрению в обоих случаях. А с точки зрения сравнения это разные FK, несмотря на одинаковое содержимое.
как создать sqlite3 файл базы? сам на питоне. пипец. Обещаю в течении недели ответить на несколько вопросов.
вопрос снят.
Вот бывает же такое, нигде нет ответа, потому что сильно банально. Всего лишь надо вызвать коннект... но между прочим, не очевидно.
Там заморока. Ведь я помню, что все решается как-то незаметно. А через шел, терминал и проч. я точно не делал. всего-то:
path_db = os.path.abspath("D:/db/anal_data.db")
conn_anal = sqlite3.connect(path_db )
c_anal = conn_anal.cursor()
Пишу веб морской бой. Хочу хранить состояние поля на момент каждого хода в базе, как это лучше сделать? Поле 10х10 представил в виде массива из 100 элементов, чтобы не создавать двухмерного массива. Но как это в sql хранить?
Создавать таблицу с сотней булевых полей и парой связывающих? Это разумно?
Дайте советов мудрых.
Бери постгрес и интовую матрицу используй. Там так можно.
>Создавать таблицу с сотней булевых полей и парой связывающих? Это разумно?
Нет, не разумно.
Предположим, тебе сказали сделать морской бой 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-х трубник? а в двухтрубник? Ну и прочую статистику собирать.
Если ты захочешь корабли в форме фигур тетриса вдруг, то нужна будет еще одна табличка-детейл к положению кораблей, где будет описана их форма.
Еще нужна табличка партий, где хранятся правила (размер поля, можно ли ставить корабли углами друг к другу и пр.)
Если что непонятно - спрашивай.
>Создавать таблицу с сотней булевых полей и парой связывающих? Это разумно?
Нет, не разумно.
Предположим, тебе сказали сделать морской бой 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-х трубник? а в двухтрубник? Ну и прочую статистику собирать.
Если ты захочешь корабли в форме фигур тетриса вдруг, то нужна будет еще одна табличка-детейл к положению кораблей, где будет описана их форма.
Еще нужна табличка партий, где хранятся правила (размер поля, можно ли ставить корабли углами друг к другу и пр.)
Если что непонятно - спрашивай.
>Второе - а зачем тебе вообще хранить ходы в виде массивов? Стартовое положение кораблей не меняется, достаточно сохранить его один раз
Я почти сразу после отправки поста спросил себя именно это. Но так далеко мысль не зашла, спасибо.
Перед добавлением вызывай запрос, который проверит валидность.
да, 4 года еще не о чем не говорит
Я бы сделал это так:
1. Таблица Product с полями id (первичный ключ), name, ну и дальше какие тебе поля нужны
2. Таблица Receipt с полями id, name и тд
3. Таблица ReceiptsAndProducts с полями receiptId и productId, которые ссылаются на первичные ключи таблиц Receipt и Product.
Это классическое many-to-many-отношение, которое делается через промежуточную таблицу.
Может вы мне поможете. Как устроены данные типа ХАРКТЕРИСТИКА в табличных СУБД.
Кароче мне надо сделать так клиентсерверный фул рест апи что бы у обїектов номенклатуры, контрагентов, физических лиц были настраиваемые характеристики. Или проще говоря свойства.
Что бы к ебучей паре сапог можно было привязать цвет, тип материала, размер.
А к типу номенклатуры ЕДА жирность, порция итд. И что бы блядь в сапогах или в сущности ДИРЕКТОР не было жирности.
При этом надо что бы пользователь сам задавал какого типа будут данные, целочисленные, текстовые, дата, объекты.
Пытаюсь представить связи, и ум за разум заходит. Как понял нужно создавать по табличке на каждый простой тип данных, типа ключ значение.
И одну таблицу со связями к ключам других таблиц .
Но не уверен.
Думаю задача до меня решалась тысячу раз, но когда пытаюсь что то нагуглить натыкаюсь или на 1С или на что то совсем другое.
Может кто то поделиться каким то учебным материалом как организовывать такие данные, или где посмотреть модель готовых решений?
>кто не пишет в консольке тот пидор etc etc
Это только на дваче такую хуйню встретишь.
Когда дело касается настоящей работы - речь о деньгах.
Значит надо использовать наиболее быстрые и безопасные инструменты.
Лаже системы контроля версий используют с гуи.
Никому не надо что бы долбоеб выебывающийся как он ахуенно пишет в vim испоганил проект на который убили кучу денег и времени.
Думаю он про то что ты не правильно термины используешь.
Не базы данных, а таблицы. Все происходят в рамках одной базы.
Спасибо. Походу то что надо.
А есть какие нибудь ъорошие книжки на тему? А то на русеке даже на википедии перевода нет.
Вроде реаляционным базам столько лет, а нет.
https://www.google.ru/search?q=сущность-атрибут-значение
Книжек, лекций и прочих материалов по РСУБД на русском очень много, посмотри тред, в постах есть названия хороших книг для новичков.
И да, вот этот анон >>202250 дело говорит, учи, без ангельского никак.
Вот в паблике мои таблицы, как получить всех имена и занести в отдельную таблицу?
пробовал через not in, но не получается(
SELECT `posts`.* FROM `posts` WHERE (`posts`.`created_at` BETWEEN '2018-05-04 13:47:16' AND '2018-06-04 13:47:16')
да, в терминах запутался
Спасибо за ответ,анон
http://sqlfiddle.com/#!9/c55ac6/2
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())
Не знаю, может в будущем пригодится. Я тут наткнулся на odbc в дрисятке, оказывается можно хоть xls, хоть txt использовать как источник БД. PHP умеет работать с odbc, чутка поигрался - понравилось. Вот думаю познакомиться с sql подробнее.
Только к схеме паблик.
Ты дебил там держать важные таблицы? Там обычно держат справочники общие и прочее.
Пароли храни с солью, благо постгресс теперь умеет.
А теперь вопрос. Вчера за вечер сдедал задания на хакер-ранке, скл-ех пройден. Есть ли что-то такое же на pl/sql например?
>Только к схеме паблик.
В документации об этом не написано. Попробую сегодня схемы потеребить.
>Пароли храни с солью
Это что значит? При создании бд через initdb указал, чтобы хранил пароли с scram-sha 256.
>хакер-ранке
Кстати, а это что за сайт? А sql вроде ещё на codewars был.
В доках это было, а ты что думал про схему public? Она же тебе сразу говорит для чего она.
Да, у тебя соль включена.
Ты чувствуешь разницу между pl/sql и sql?
Я нашел quiz от Оракла. Но ты наверно про него знаешь
Кстати, иннер джойны использовать только если я Питонист и explict better than implict? Второй пик именно про это?
Ебать, вот только написал, сразу же пришла идея выбрать одновременно и минимальную ОЗУ, и максимальную скорость для пк с минимальной памятью, а потом сджойнить со всеми пк. И никаких подзапросов ебаных. Что скажешь анон, так нормально?
float/double хранят n знаков после запятой, а мне нужно именно 2, а decimal это синоним numeric, тупица ебаная
Блядь, скотина, открой мануал к своей БД и чекни типы данных, которые я привел выше, они как раз позволяют делать то, что тебе нужно.
Есть две таблицы таблицы
В первой
Nane ID1 ID2
Петя 1 2
Вася 1 1
Дима 2 2
Настя 2 2
Во второй
ID2 X
1 10
2 20
Как получить сумму X по каждому ID1, то есть, что бы ID1(1) = 20+10, ID1(2)=20+20?
Джойнишь к первой таблице вторую по ID2, группируешь по ID1, суммируешь Х, отдаешь мне свои 300кк.
Смотрите что нашел на sqlex, анализатор блять, 30 заданий прорешал, потом только заметил. Есть вопросы - есть ли то же самое в том же Постгресе? Только в MySQL видел время на запрос после каждого запроса, но ничего такого детального. То, что там в stmtext это что-то типа байткода Питона? Нет, я понимаю, что sql не компилируется\интерпретируется, я про то, что это какой-то второй более глубокий\сложный язык под капотом, который выплевывает оптимайзер в ответ на мой запрос так же как байткод питона выплевывает какая-то дрочильня пот капотом оного в ответ на данный интерпретатору код? Нужно ли мне прямо сейчас задрачивать эту оптимизацию и этот язык утверждений, если я хочу пойти джуном уже куда-то? Или это high level и мне лучше вернуться к этому после того, как стану миддлом, заработаю 300кк, и выучу весь матан включая реляционную алгебру?
>есть ли то же самое в том же Постгресе?
В любой современной СУБД есть.
Почитай что такое план запроса и что и как СУБД вообще делает с момента запуска скрипта до момента выдачи результата. Это будет полезно в любом случае. Обязательно внимательно прочитай и запомни основные моменты про bind-переменные - это архиполезно.
Что касается анализа плана запроса, то для нужно уметь его читать и знать, какие типы соединений таблиц поддерживает твоя СУБД и в чем их отличия по производительности, видеть, где используется или не используется индекс и какой. Когда пишешь запросики - обязательно смотри их план выполнения, заведи себе такую привычку.
Можешь добавлять и убирать индексы, менять условия и сразу смотреть, как меняется план.
Очень наглядно все.
В общем есть 1 селект, и нужно получается для корректной пагинации узнать количество всего что он выдает. Но прикол в том, что селект большой и с кучей джойнов, а еще в нем много фильтров задействовано, на каждом столбике в таблице на сайте есть условный фильтр и сортировка и всё это падает в where'ы.
Пока что этот селект прогоняется в цикле из двух итераций.
На первой итерации собирается весь поиск и прогоняется селект с целью подсчета строк.
На второй итерации добавляются уже лимит и оффсет для получения собственно самих строк.
Как разрешить эту задачу и избавиться от дублирования запроса в базу в этой ситуации?
Курсор?
можешь считать общее количество записей в отдельную колонку аналитической функцией, если твоя субд позволяет
типа count(*) over () cnt
hackerrank
http://sql-ex.ru/
Правда я там только до 8 упражнения дошел, считаю нужно больше задач на самые основы, что бы надрочиться нубам типа меня, а то после изичной хуйни сразу дают джойн и груп бай и сижу не могу постичь до сих пор что там как правильно решать.
>>208997
>sql-ex.ru
Отличный сайт, чаю.
Поставил первый раз сразу рейтинговые и охуел от пикрила.
>Правда я там только до 8 упражнения дошел, считаю нужно больше задач на самые основы, что бы надрочиться нубам типа меня, а то после изичной хуйни сразу дают джойн и груп бай
Дошел до 9, так и не понял где там можно было GROUP BY использовать.
Щитаю самые основы и вообще SQL должен сначала сам изучить, по крайней мере знать какие-есть возможности у языка в общем, а сайт чисто для практики и "набивания руки".
Все таки туториалов по SQL в интернете вагон, в отличии от сайтов с практикой, так лучше пускай сосредотачиваются на ней, а не распылаются дополнительно на уроки. Те же примитивные упражнения есть на W3 или как-его там, но их очень быстро заебывает делать, если они совсем простецкие когда ты по сути пишешь по 20 раз один и тот же запрос только меняешь название столбцов и таблиц.
>Почитай что такое план запроса и что и как СУБД вообще делает с момента запуска скрипта до момента выдачи результата. Это будет полезно в любом случае. Обязательно внимательно прочитай и запомни основные моменты про bind-переменные - это архиполезно.
Есть советы, что почитать? Какие книги? Что-то типа 'Definitive guide to fast as fuck sql queries 300kk/ns'?
Так нельзя, в group by можно выводить только столбцы по которым идет группировка или агрегирующие функции.
Я уже нарешал за 30+ упражнений, но это так и не осилил.
Я тебе говорю, что можно сделать так, как я сказал. Я так сделал, и на форуме многие так сделали. Сиди и думай. Или не думай, мне то похуй.
Ну не тролль, во-первых я конечно это попробовал еще на этапе решения своими силами, даже зная что-так нельзя, но мало-ли, вдруг благодаря HAVING COUNT(Distinct P.type) = 1 машина выводит возможность использовать атрибут в селект. Потому что, например, что-то похожее можно делать при использовании WHERE = (Query) если результат Query одно значение.
Но нет, так нельзя.
Не знаю что ты там пробовал, на форуме этой задачи я вообще не нашел.
Не троллю, ты просто тугой. Я не говорю тебе вывести просто колонну type, конечно это не сработает. Я говорю вывести тип продукта. А как это сделать при такой группировке собственно и есть само задание. Хотя конечно можно и по-другому сделать, но будет больше текста и cost плана выполнения.
Под форумом я имел в виду именно топик этой задачи, который становиться доступным после ее решения - кнопка 'обсуждение упражнения на форуме'
На сайте написано
"pgAdmin is available for Windows™ 7 (desktop) or 2008R2 (server) and above. The packages below include both the Desktop Runtime and Web Application"
Где он в десктоп рантайм? Почему блять у меня только ебучий веб. Неудобно пиздец, хочу обычное приложение. Помогите плс.
Mysql workbench скачай и подключайся
Ну и что, это тематика, тут полтора анона, и 1.4 его сидит в нюфаг треде. Здесь небампанные треды годами живут.
привет всем задам тут
неработают кнопки ине отображаются данные что делать
https://pastebin.com/zs3pvjsq
слишком дохуя.
Знание архитектуры и работы бд, как таковой.
Расширенный sql. ( pl/pg/t)
Начальные навыки администрирования бд.
Надрочка на какую-то технологию бд тоже норм.
Обычно работа с бд, как основа, это проектирование, систематизирование бд. То есть ты должен понять, как работать с бд в качестве чистого продукта( полный цикл поддержки), знание объектных методов и глубокие понимания абстракции данных.
Плюс тебе надо заточить что-то, что поможет писать API, GUI.
У меня C++/ Pl/SQL. Уже пару лет горбачусь архитектором, и знаешь, иногда приходиться читать документацию самой бд. Многие книги по тонким моментам не доступны в интернете и приходиться платить 75 баксов( со стоимостью), чтобы тебе томик Бурлесона доставили в Московию.
анон, можно с тобой контактками обменяться,с целью дальнейшего общения? Там телега, почта или ещё чего. Просто я на полном серьёзе хочу вкатываться в базы и уже много чего учу и прохожу курсы. Был бы благодарен тебе за такую возможность.
Потому что ты какую-то хуйню делаешь, по ошибкам кажется, что ты ему html документ скормить пытаешься.
Аноны, а помогите теперь вы мне с 118 задачей sqlex.
Вот ее текст, мое решение и результат, а так же первое решение, что я нашел по гуглу и ctrl-c ctrl-v, чтобы проверить, работает ли.
pastebin.com/MPt8U3J1
pastebin.com/s9weVUQD
Я не могу разобраться в коде, который дает правильный ответ. Он невероятно большой. Но почему мое решение не катит? Поясняю: я беру каждый год и прибавляю ему от 0 до 8 лет. Насколько я понял из википедии, год високосный если делится на 400, или делится на 4 но не на 100. Так что среди года, и восьми последующих точно будет хотя бы один високосный. Потом я беру 6 первых дней апреля этого года, среди которых точно будет понедельник, и прибавляю к этому понедельнику 1 день. Беру битву, дату, и минимальный вторник апреля високосного года (ведь беру 8 лет подряд, может получится больше одной такой даты). И че не так то, два дня с этим ебусь
СУКАБЛЯТЬ накатал эту огромную пасту, от безысходности решил просто так блять проверить не первые 6, а первые 7 дней апреля, и все заработало нахуй. Да пошло все блять в пизду
В какой среде можно развернуть пикрил и сделать пару команд?
хочу потренироваться по этим вопросам сам
https://www.jitbit.com/news/181-jitbits-sql-interview-questions/
скачал MySQL с Wokbench. Там ты можешь развернуть такую бд, а потом построить схемку.
У Oracle + TOAD такое же есть, да и вроде в стандартных тулзах оракла есть.
>MySQL с Wokbench
спасибо.
попробую.
Мне тут советовали SQLite Studio и OpenServer
Сам еще думах ХАМПП попробовать. Решит ли оно задачи?
Посоветуйте литературу для совсем ньюфага по бз
дунаева попробуй. тонкая.
только там примеры на древней мs SQL, но ты установи что-то типа mysql или около того.
или sololearn на телефон установи. там курс sql есть. весьма хорошо для нюфань. потом уже можно книжки от дядек читать и документацию по Ораклу или чему там надо.
мимо ньюфаг после курса сололёрн
мимо даун начал познавать foxpro
Какие-то там индексы делать, или нет, не ебу вообще. В моем DB Browser ничего дельного, по идее, кроме каких то индексов нет.
попробуй. Хуже не будет.
Сделал в постгре полю id тип данных SERIAL.
Если при инсерте в поле с UNIQUE указать уже существующее значение, то произойдет ошибка (ожидаемое поведение), но этот id при верных данных уже будет недоступен, следующая запись получит id + 1, получиться последовательность с дыркой. Как это фиксить?
Прости что долго не отвечал - тупо на работу устроился и времени нету, первые 3 недели - чистый ад в плане налаживания режима и прочей мозговой нагрузки.
Я мог ошибаться поэтому с тем на чем там завис.
В общем первый пикрил - то что у меня пройдено.
И соответственно попробовал сейчас решить 8е и вот такой вот посос.
С первым пиком подобсрался, лол.
Ну не работает блять вообще ничего и я не знаю что делать, бляяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяя
А почему у тебя в одном месте тип 'PC', а в другом 'pc'?
И с CTE явно ты переусложнил, наверняка там просто хватит дополнить слева строку нулями до длины строки в 10 символов, скажем.
Мимо ораклист.
Пс. Кто-то сдавал экзамен на оракл программинг про?
>А почему у тебя в одном месте тип 'PC', а в другом 'pc'?
Потому, что я уже очень заебался с этой задачей. Но это и не важно, текст в sql case insensitive все равно.
>дополнить слева строку нулями до длины строки в 10 символов
И как бы это помогло? Было бы например две скорости: первая - '20x', вторая - '1хуйпизда'. И хуйпизда бы тогда выиграла т.к. на втором месте у первой был бы ещё 0, а у второй уже 1. Может и в этом ошибка, это же ебаный varchar, откуда мне знать, что у них там записано. 'fast'? 'reallyfast'? 'sonicthehedgehoc'? Ты сам то решил 127ю?
>>219675
Во-первых если у тебя except то distinct не нужен т.к. except сам уберет все дубликаты. Во-вторых в таблице product есть модели, не указанные ни в одной из таблиц printer, pc, laptop.
Тоже думал насчет этого, но я помню, что как-то отсекал подобное на входе, когда посылался insert
Ну решил, ничего хитрого там нет, делается обычным avg, рекурсия не нужна, джойны по типу тоже и вообще дело не в скорости CD - она задана в виде 2x, 12x (скорость и в конце икс, все элементарно сравнивается).
Ошибка во втором блоке, нужно дополнительно проверять что prs.price is not null и prss.price is not null
Начал читать "Введение в системы баз данных" Дж. Дейта, чтобы понять теорию баз данных. Вроде все правильно, но как-то муторно. Есть ли книги как-то по-лучше или нужно дотерпеть и дочитать.
ААААААААААААААААААААААААААААБЛЯЯЯЯЯЯЯЯ Я ПРОСТО ОРУ
Ещё и подсказка эта ебаная про 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, то сохранится ли первая вставка?
Проверить возможности, увы, нет
pl sql, если что.
https://www.ozon.ru/context/detail/id/140212979/
>Если я сделаю ROLLBACK a, то сохранится ли первая вставка?
У тебя откатится вторая вставка, а первая пока что так и не будет зафиксирована, т.е. она будет видна только из-под этой сессии. Чтобы 100% сохранилась, нужен коммит.
Попробуй Мартин Грубер Понимание SQL.
Спасибо
не дописал, кароче Merge можно юзать.
Спасибо тебе анон за хороший совет
Какой триггер? Я "работаю" через DB. Browser, там нихера подобного нет, только индексы какие-то.
Я так понимаю вручную никто базы данных не заполняет, все пишут интерфейсы и алгоритмы чтобы уже все готово было?
О, а эту я оказывается давно решал.
Читай внимательно условие.
С какого хуя ты решил, что записей 26? Посмотри сколько записей в табличке product.
Ах ехидная дата база. Теперь понятно, по чему искать среднее. Спасибо. не, ну это пиздец, никогда не угадаешь, что они там наделали
Теперь можно пойти убить себя нахуй на рейтинговом
Вопрос: как мне выбрать первые сто товаров с сортировкой и по столбцу из пивот-таблицы, и из "основной" товарной (причем основная в приоритете), но при этом избежать сек скана?
Снёс и поставил снова. Пока всё работало(до перезагрузки) сделал так:
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
Один хер всё ломается после перезагрузки.
В чем тут дело?
select
from table
where 1=1
and field in (value1, value2, value3)
;
Можно ли как-нибудь заебенить:
set @variable = (value1, value2, value3);
select
from table
where 1=1
and field in @variable
;
????
Да, почти.
declare @variable as table (value int);
insert into @variable (value)
select 1
union all select 2
union all select 5
select
from table
where 1=1
and field in (select value from @variable)
дело в том, что количество вэлью может меяться,
Я так понял то, что я хочу в mysql нельзя сделать(
Напиши функцию, которая парсит строку и превращает ее в table expression, который и будет возвращать. Используй это функцию в запросе.
Это копия, сохраненная 10 августа 2018 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.