Вы видите копию треда, сохраненную 12 мая 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к не получаем.
А так же:
Постгре или постгрес?
Май эс ку эль или мускуль?
Эс ку эль или сиквел?
В общем, это очередной баз данных тред, поехали!
Награда светит не посмертною медалью, отнюдь
Это храм старого формата, так предали огню
И скоптили небо старики, что слышны с Невской реки
Мы видим дым от костра - "Да здравствуют базовики!"
#sql #бд #базы данных
В смысле ПРОСТО ПЕРЕКАТИЛ, ирод?! А придумать тупую пикчу и дибильное описание для Оп-топика?
>>087068
смотря, какие данные. если у тебя места жопой жуй, можешь в джей соне хранить, да, однако, данные зачастую используются еще какими-то системами, так что скорее всего, они уже где-то собраны(в бд), а тебе их просто нужно грамотно представить и запихнуть в свою нейросеть на пайтоне
Вопрос, честно говоря, ни о чем. Это как
>на каком языке программировать?
иди в sqlzoo, потом порешай немного sqlex
потом если хочешь работать с хранилищами данных, врубись в основную терминологию этой хуйни, ну там измерения и факты всякие
если научишься юзать ETL-инструмент, или что-то для аналитики вроде Business Objects или хз че ещё есть, можешь больше получать
Почему у меня запрос отрабатывает быстро, а когда я пишу инсерт с этим запросом - виснет
Ебаный оракл
Он чё хинты выключает или что
Ухххх сука бля
На базе, с которой я беру данные, все ок. И селект и инсерт.
Я прописываю в свой запрос driving_site
Селект работает так же быстро, как на основной базе, а инсерт висит
Что за хуйня
А зачем ты это высрал? Я не понял с одного слова, поясни
Что значит "висит", ебаный ты в рот?
Висит, в смысле, вообще ни одной строки не инсертит? Если да, у меня для тебя плохие новостиблокировки
Если нет, и просто инсертится ооооооочень медленно, у меня для тебя плохие новостидиски скорость фрагментация кококо
Только начинаю прошаривать бд, для своего личного проекта. Имеет ли смысл писать сервер на с++, и из него через сторонние библиотеки делать запросы к sql-серверуpostgresql в частности?
Смысл такой, что клиент на питоне шлет запросы, с++ сервер принимает, вытаскивает какие-то данные из БД, прогоняет их через питоний скрипт на своей стороне(какой - зависит от пользователя, их типо много) и возвращает ответ клиенту. Или все это можно сделать как-то на самом SQL сервере? Я понимаю что наверно нет, но меня словосочетание sql сервер смутило, типо из с++ сервера обращаться в другой сервер... хз
Что скажете?
Остальное все уже продумано и частично написано.
inb4: Не ньюфаг, с++ знаю относительно хорошо, python тоже неплохо.
>Что скажете?
1) Том Кайт — «Oracle для профессионалов»
2) К. МакДональд, Х. Кац, К. Бек, Д. Кальман, Д. Нокс — «Oracle PL/SQL для профессионалов»
>клиент на питоне
не нужен, эта задача решается средствами веб интерфейса
если все-таки нужен, то для него не нужен сервер на c++, эта задача решается прямым обращением к базе/sql_серверу из клиента
ежели таки нужно и то и другое, то необязательно писать сервер на c++, можешь писать его на том же питоне
>из с++ сервера обращаться в другой сервер
мировая практика, иначе при наличии овер9к клиентов с исходящими 100500 запросов/сек. к базе от каждого, твой сервер просто ЗДОХНЕТ, ЯСКОЗАЛ
Да мне собственно сама sql мне не особо нужна, там вся база это 2 таблицы с 4 столбцами каждая, но на книги обязательно гляну
Понял, спасибо. На счет сервера на питоне подумаю, все же привычнее на плюсах, да и наработки есть ну и распространненное мнение/заблуждение что плюсы априори быстре, а собственно ради скорости отдельный сервер и затевался
В универе дали задание - придумать 1) 3 ненормализованных таблицы, 2) 3 таблицы в 1НФ с аномалиями, 3) три таблицы во 2НФ с аномалиями и 4) 3 таблицы без аномалий.
Если с 1, 2 и 4 все понятно, то вот с 3 я нихуя не понимаю. Какие аномалии могут быть в 2НФ, если эти самые аномалии 2НФ и фиксятся?
>Такие неприятные явления называются аномалиями схемы отношения или коллизиями. Эти недостатки реляционных отношений устраняются путем нормализации по 2НФ.
Уже час голову ломаю, ничего придумать не могу.
Блядь, на Википедии примеры есть
select * from table(твоя_функция(аргуменнты_к_ней))
SELECT employee_id, last_name, manager_id
FROM employees
CONNECT BY PRIOR employee_id = manager_id;
EMPLOYEE_ID LAST_NAME MANAGER_ID
----------- ------------------------- ----------
101 Kochhar 100
108 Greenberg 101
109 Faviet 108
110 Chen 108
111 Sciarra 108
112 Urman 108
113 Popp 108
200 Whalen 101
...
есть некий работник и мы его соединяем таким образом, что б manager_id следующего по level (иерархии) работника была равна employee_id текущего?
А если так:
SELECT employee_id, last_name, manager_id
FROM employees
CONNECT BY employee_id = PRIOR manager_id;
Что конкретно означает PRIOR ?
SELECT employee_id, last_name, manager_id
FROM employees
CONNECT BY PRIOR employee_id = manager_id;
EMPLOYEE_ID LAST_NAME MANAGER_ID
----------- ------------------------- ----------
101 Kochhar 100
108 Greenberg 101
109 Faviet 108
110 Chen 108
111 Sciarra 108
112 Urman 108
113 Popp 108
200 Whalen 101
...
есть некий работник и мы его соединяем таким образом, что б manager_id следующего по level (иерархии) работника была равна employee_id текущего?
А если так:
SELECT employee_id, last_name, manager_id
FROM employees
CONNECT BY employee_id = PRIOR manager_id;
Что конкретно означает PRIOR ?
*нормальная разметка аутпута
/тред
То поле перед которым PRIOR будет считать своим родителем другое поле равенства.
habrahabr.ru/post/43955/
Хотя как по мне, лучше бы PRIOR ставили перед родителем.
Есть статусы пользователя, 1, 2, 3, и условно еще один, из всех остальных, но не этих трех (4, 5, 6, 7, 8)
Я строю такой запрос: ... WHERE e.status IN (1, 2, 3), получается первые три статуса
все 4 имеющиеся - WHERE e.status IN (1, 2, 3, 4, 5, 6, 7, 8 ), но, это как-то не правильно, и получается, надо написать
WHERE e.status IN (1, 2, 3) and e.status NOT IN (1, 2, 3), я прав? Хотя я где-то объебался.
Перечитал твой пост три раза и нихуя не понял :/ можешь ещё раз объяснить? Опиши какие строки ты хочешь на выходе получить
Есть четыре чекбокса, соответственно статусы 1, 2, 3, а у четвертого чекбокса все остальные. Мне нужно получить запрос, чтобы достать соответствующих пользователей.
Прост селект таблицы делаешь без условий.
>Месяцу совпадающему с таблицей kek3
>Что?
1. В зависимости от того, существует ли уже таблица с именем kek1 в БД, создать или удалить и создать.
Поля таблицы допускают пустые значения
- Data тип дата-время
- ID тип целый
- TankID тип символьный, длина 10.
- Mass плавающий
- Vol плавающий
Присвоить значения массе и объему (300 и 150), а TankID равное дате текущего дня месяца.
2. Создать функцию Plot с двумя переменными Mass_F и Vol_F.
Вычислить значение функции, взяв данные из таблицы kek1.
3. Занести вычисленное значение плотности в таблицу kek2 для резервуара TankID совпадающий с TankID из kek1 и месяцу из Date, совпадающему с таблицей kek3. (Связанные поля пишутся одинаково)
Хочу подарить знакомой, которая занимается ораклом бусы или браслет, как в официальной документации,
толковая мысль?
Я и второй-то пункт ниасилил. Что функция должна делать то, лол?
Она типа вся такая гик/нерд? Если нет то хуже подарка придумать нельзя
Пока придумал, что простой метод это объединить две колонки в одну и потом удалить повторяющиеся, но это 2 запроса, как одним это сделать?
Ну вот. Объеденить столбцы A и B и получится столбец D, в котором есть только неповторяющиеся значения.
SELECT DISTINCT A.A
FROM A
UNION
SELECT DISTINCT B.B
FROM B
MINUS
(SELECT DISTINCT A.A
FROM A
INTERSECT
SELECT DISTINCT B.B
FROM B);
Собственно, это и есть столбец D, а дальше уже что хочешь с ним делай.
Если что, я кроме Оракла ничего не знаю, поэтому хз прокатит ли такой скрипт на других платформах
Запрос, если быть точнее.
((((a)g)q)
z)(s)(
(((f)e)w))(h(g(w))
))((
Есть даже решение, в котором не могу разобраться начиная со вспомогательной таблицы RESULT (14я строка):
https://pastebin.com/uYLZYuyt
если строка "правильная", то она выводится, в противном случае не выводится ничего или null
По мотивам этого решения написал своё:
https://pastebin.com/iWBYa7z5
Но моё плохо тем, что считает правильным такую строку
))((
потому что я просто считаю количество ) за 1 и ( за -1, а остальное за 0 и складываю, вывожу, если итог 0.
А как мне учесть такое )( не могу сообразить.
Буду благодарен, если кто напишет комментарий к 1му решению, подскажет мне как улучшить моё или представит работающее своё.
>DE_STRING AS(
> SELECT STR, SUBSTR(STR,LEVEL,1) SS, ROWNUM RN
> FROM STRING
> CONNECT BY LEVEL <= LENGTH(STR)),
Разбивает на буквы строку.
>PARENTHESIS AS(
> SELECT STR, SS, ROWNUM R
> FROM DE_STRING
> WHERE SS IN ('(',')')
> ORDER BY RN),
Забирает из разбитой строки только скобочки.
>DE_PARENTHESIS AS(
> SELECT STR, TO_NUMBER(CASE SS WHEN '(' THEN 1 ELSE -1 END) AS SS, R FROM >PARENTHESIS),
Заменяет скобочки на цифры.
>RESULT AS(
> SELECT STR, SS, R, (SELECT SUM(SS) FROM DE_PARENTHESIS WHERE R<=EXT.R) AS >RESULT FROM DE_PARENTHESIS EXT
> START WITH R = 1
> CONNECT BY PRIOR R = R-1),
Кумулятивная сумма чисел скобочек. То есть сначала первая скобка, потом 12, потом 123 и т.д..
Потом автор взял за основу 2 условия адекватности выражения.
Выражение адекватно, если:
1. Сумма чисел скобочек в строке = 0, что очевидно.
2. Никакое из значений кумулятивной суммы не меньше 0, что эквивалентно наличию лишней закрывающей скобочки. Можно понять, что из такого выражения уже никак не получить адекватное.
>DE_STRING AS(
> SELECT STR, SUBSTR(STR,LEVEL,1) SS, ROWNUM RN
> FROM STRING
> CONNECT BY LEVEL <= LENGTH(STR)),
Разбивает на буквы строку.
>PARENTHESIS AS(
> SELECT STR, SS, ROWNUM R
> FROM DE_STRING
> WHERE SS IN ('(',')')
> ORDER BY RN),
Забирает из разбитой строки только скобочки.
>DE_PARENTHESIS AS(
> SELECT STR, TO_NUMBER(CASE SS WHEN '(' THEN 1 ELSE -1 END) AS SS, R FROM >PARENTHESIS),
Заменяет скобочки на цифры.
>RESULT AS(
> SELECT STR, SS, R, (SELECT SUM(SS) FROM DE_PARENTHESIS WHERE R<=EXT.R) AS >RESULT FROM DE_PARENTHESIS EXT
> START WITH R = 1
> CONNECT BY PRIOR R = R-1),
Кумулятивная сумма чисел скобочек. То есть сначала первая скобка, потом 12, потом 123 и т.д..
Потом автор взял за основу 2 условия адекватности выражения.
Выражение адекватно, если:
1. Сумма чисел скобочек в строке = 0, что очевидно.
2. Никакое из значений кумулятивной суммы не меньше 0, что эквивалентно наличию лишней закрывающей скобочки. Можно понять, что из такого выражения уже никак не получить адекватное.
Забыл добавить что стоимость тарифа не хранится в базе, а лежит в CSV-файле. Но на нее внимания можете не обращать, мне хотя бы выборку по направлениям сделать чтобы считалась общее количество секунд по указанному периоду для мобильных, городских и т.д.
Так тут можно обычные sql запросы делать? Это бы всё ускорило.
Если нет, то можешь в самом скрипте суммировать данные.
Хочу отобразить повторяющиеся слова в строке.
Сап аноны! На связи кун энихуйщик (по совместительству - полный ноль в БД) с мухосранска. Ношу подносы с новыми клавиатурами Обслуживаю 25 пекарен в конторке, занимающейся отчасти лабораторными испытаниями. В срочные сроки поставлена задача ввинтить результаты лабораторных испытаний (задним числом есесссна) в базу данных оборудования для испытаний (одно из этих чуд - Хромос ГХ-1000). Собственно вопрос - реально ли?
Результат беглого осмотра - из того что называется Базами данных найден лишь файл мелкомягких .mdb с заготовленными заголовками, формулами и прочей хуергой для занесения данных, то есть пользовательских данных в нем нет. А собственно сами результаты вместе с хромотограммами пишутся в отдельные файлы с расширением .stg (которые естественно открываются только прогой идущей к прибору).
Исходного кода этого чудо ПО ясен хуй нету. Как быть?
ВНИМАНИЕ! Анончик, дорогой! Я знаю ты можешь помочь советом и поэтому, если предложишь 100% рабочий вариант решения моего вопроса, я гарантирую оплату деньгами на ништяки, пивас, пару шлюх и немного кокаина (ну или на пару гантель, штанг и абонементов в тренажерку, если ты больше по ЗОЖу например)!
Вопрос жизни, целостности моего ебальника, моей работы и твоих, возможно, очень даже нихуевых выходных, анон!
Не знаю, как тебе помочь.
Попробуй с этого, может что-нибудь прояснится.
http://www.anchem.ru/forum/read.asp?id=21976
Если есть ПО Бакса могу подсказать, как что хранится, базы данных там нет, все в бинарных файлах. Наверняка в Хромосе все то же самое. Попробуй посмотреть работает ли их ПО как OLE сервер, можно попробовать дизассемблировать, если c# или джава то шансов понять, что надизассемблируешь больше. Ты конечно тут всем покушать принес, братишка.
Хммм. Конвертнуть туды суды в принципе вариант, но там объем адовый. Но спасибо за ссыль, покопаю.
> Если есть ПО Бакса могу подсказать, как что хранится, базы данных там нет, все в бинарных файлах. Наверняка в Хромосе все то же самое. Попробуй посмотреть работает ли их ПО как OLE сервер
Если ты про НТФ "БАКС", то нет, их оборудования и соответственно ПО нет.
Проблема в том, что там настолько кастрированные настройки, что кроме как указать пути к хранению баз, методов и хроматограмм ничего не представляется возможным. Да и установлен прибор локально, то есть комп и прибор, сервера для хроматографа нет. Вообще мне кажется там ole ни к чему, там даже никакого особого форматирования нету - тупо цифры в поля вбивает юзверь, они потом выводятся в отчетах. Если бы хотя бы экспорт в эксель был... А про дизассемблер, это ты имеешь ввиду раскомпилировать экзешник? Это одно и тоже? Если да, то мне кажется это импоссибль(
Я тут уже полтора треда засрал и пришел к такому выводу что мне нужно именно сюда:
Посоветуйте тему для курсача, MsSql, знаний мало.
Где базы данных нужны и какой с их помощью можно сделать йоба курсач и не обосраться?
бля, проще сказать где базы данных НЕ нужны. В крайнем случае просто возьми стандартный пример с школой, пусть у тебя будет таблицы: учителя, школьники, оценки там. Нормализуй(т.е. смотри чтобы соблюдались норм. формы). Наложи какие-то констрейнты, ну типа чтобы оценка могла быть в пределах от 1 до 5, даже на таком уровне.
Мне кажется просто что много где достаточно как раз таки обойтись сериализацией тупо в файл и так даже будет удобнее.
А в повседневной жизни нужно только всем сортам продаванов товаров и услуг и то не везде.
> стандартный пример с школой
Слишком просто, желательно что-то посложнее.
Это хуита. Увеличь в 20 раз - получишь среднюю по размерам бд.
Да, это она. Спасибо большое за помощь.
\tСоздать запрос для выделения из символьной строки повторяющихся, стоящих рядом слов.
Примеры:
Кулон лон слон слон слон Книга книга \tслон слон
Книга книга
Мама мыла раму раму мыла мама\t
раму раму
пока что есть такое решение
https://pastebin.com/45xhHR08
но это всё равно не до конца верно, потму что строка
'ER ER erer erer er er erer ererer erer erererer erererer'
обрабатывается некорректно
Насколько направления BI/ETL перспективны? Есть ли смысл изучать и возможно ли вообще это самостоятельно, не имея доступа к инструментам корпоративного уровня? Реально ли найти удалённую работу такого рода или разумнее продолжить изучать Java (которая не очень нравится и по большей части просто использовалась вместо скриптов для всяких задачек по работе с данным) и конкурировать с армией индийцев?
Учи пистон
Вот, пожалуйста, не благодарите, заодно и оппик новый будет.
Сори, у меня рабочий день кончился, не успел нормально сделать. Работает только с двумя повторяющимися словами)))))
>у четвертого чекбокса все остальные
Первое фундаментальное свойство отношений - отсутствие атомарных атрибутов, а это значит, что ты не можешь присвоить четвертому чекбоксу несколько статусов.
Если я сделал 50 заданий на sql-ex, знаю реляционную теорию, знаю основы T-SQL, я могу вкатываться на джуниорские должности или мне нужно что-то еще?
Да
Третий хотя-бы работал корректно, часто вылетая при этом.
Четвёртый же просто не работает в рамках своей бизнес-логики.
Поля не переименовывает, ибо генерирует косячный sql для этого.
Выполняю скриптом insert - он рапортует что успешно, хотя оно не успешно. И я не знаю причину почему не успешно.
НЕНАВИСТЬ
У меня в одно время тоже были проблемы, помогло следующее:
%папка постгреса%\data\postgresql.conf
в этом файле есть строка:
lc_messages = 'Russian_Russia.1251'# locale for system error message
Надо было заменить ее на:
#lc_messages = 'Russian_Russia.1251'# locale for system error message
lc_messages = 'en_GB.UTF-8'# locale for system error message
В моем случае пгАдмин4 не показывал ошибки, в любом случае писал success и ничего не происходило.
Это понятно.
Допустим у меня есть файл с БД. Я открываю его в MySQL Workbench. И вот, у меня вопрос. Как посмотреть эту базу данных, если я уже ее открыл. Скриншот.
сам майэскуэл это такая служба без графического интерфейса. К ней по сети делаются запросы, она возвращает результат.
Данные оно хранит в файле. И этот файл нужен только это службе, никому другому.
Чтобы через интерфейс пощупать базу, тебе надо запустить эту службу, и чтобы эта служба захавала этот свой внутренний файл
хотя может я не понял вопрос
Похожая проблема. Бампую вопрос.
https://stackoverflow.com/a/13297724
Последствие этого решения - замедление базы данных. Но не могу сказать, в каких пределах.
Для тестов и лаб норм.
Представь вот такую табличку
num action date_time
43252 DELETE 20170825 15:55:45.68
43252 DELETE 20170825 15:58:02.57
43252 DELETE 20170825 15:59:14.77
43252 DELETE 20170825 16:01:20.35
43252 DELETE 20170825 18:23:41.91
как сгруппировать ее так что бы он учитывал промежуток во времени только 1 час?
тоесть должно получиться так первые 4 строки группируются а пятая нет т.к она
совершалась позже чем через час начиная с минимальной даты из первых 4-х строк,
тоесть в группу должны попасть все записи в промежутке между 15:55:45.68 - 16:55:45.68
вот так
43252 DELETE 20170825 15:55:45.68
43252 DELETE 20170825 18:23:41.91
одна запись сгруппировалась по времени в промежутке за 1 час а другая в этот промежуток не влезла и осталась
group by
из таблички в примере group by должен выглядить примерно так
group by [num],[action],{date_time в промежутке от первой строки 15:55:45.68 до dateadd(hh,1, 15:55:45.68) }
Сам себе посоветую - может, ещё кому пригодится:
Eric Redmond, Jim R. Wilson - Seven Databases in Seven Weeks - A Guide to Modern Databases and the NoSQL Movement.
Почти то, что нужно.
Oracle designer как минимум не терпит кириллицу в диаграммере, с NLS-LANG ебался, не помогает, кастомайз сосет.
Не хочу сидеть в корпусе для того, чтобы сделать лабу, выручайте, как суппостата ебнуть, чтобы кириллицу поддерживал?
В чём разница между репликацией и зеркалированием БД? Натыкался на разные определения и цели у обеих технологий, но чё то они похоже все одинаковые. Единственная разница, которую я находил - зеркалирование нужно, чтобы обеспечивать максимальную доступность: сначала ебошит мастер и все транзакции тем или иным способом транслирует слейвам, а потом если мастер отвалится, то до его восстановления мастером становится какой то другой слейв, но тем не менее в один и тот же момент времени работает только один сервер. В репликации же одновременно работают и мастер и все слейвы, только вот операции write/delete идут через мастера, а read - через наиболее удобного слейва, что позволяет не только увеличить доступность, но еще и снять нагрузку с мастера. Иными словами, цель репликации: доступность поддержка большей нагрузки, а зеркалирование - просто доступность БД?
INSERT INTO anus
Есть две таблицы, в обоих у записей одинаковые id. В одной 100 записей, в другой 30. Как из первой выбрать только те, которых нет во второй ?
select * from table1 t1 left outer join table2 t2 on t1.id = t2.id where t2.id is null
Суть токова: хочу делать оналитику. Есть эвенты примерно 10 видов. В них довольно разные поля, причём в них есть ещё вложенные на 2—3 уровня объекты. В сыром виде эти эвенты ещё объединены в массивы пачками штук по 100 и этими пачками и хранятся.
На этих эвентах хочется делать всякую оналитику, считать разные funnel-retention, обогащать их ещё данными из внешнего мира, считать какие-то композитные метрики.
В общем сходу пришла идея, что сырые данные из-за их разрозненной структуры удобно хранить в NoSQL виде (пока недолго думая засунул их в монгу). Потом каким-нибудь ETL выгружать их в преобразованном плоском виде в SQL (сходу, опять же, взял постгрес). Ну и потом уже писать запросы-запросики, JOINы и т.д.
Что не нравится в текущей схеме:
1) Монга медленная сука на bulk reads. Считать миллион или несколько лямов документов за раз — ждать охуеешь.
2) Постгрес тоже не самый быстрый для ОЛАП запросов (но в принципе в какой-то степени это решается через пре-вычисленные и обновляемые materialized views)
Советов мудрых прошу:
1) Что лучше использовать, чем монгу, для сырых неструктурированных данных, чтоб они читались быстро в ETL?
2) Что лучше юзать для ETL?
3) Какая БД заебок для OLAP? Слышал про Vertica или опен-сорсный Druid, а в друиде нет joinов. Redshift? Данных вроде не безумно много, пока ~10 лямов эвентов, но будет расти. Думаю до 100 млн дорастёт в обозримое время.
Рассматриваю как опен-сорс, так и вариант с отстегиванием бабла империалистическим расовым буржуям.
Блин, я не знаю, зачем это написал.
Так они ж не связаны. Просто последовательность неструктурированных JSON-like объектов с несколькими уровнями вложенности.
Вроде бы может подойти, но чото ОЧЕНЬ сложно. Тут технологический стек из десятка наименований, с каждым из которых надо разбираться, поднимать, поддерживать.
Я надеялся на какое-то решение попроще. Ну и для моего невеликого массива данных я не уверен что сразу надо бросаться в дебри Hadoop-экосистемы.
Но если лучше идей нет, может и придётся конечно.
Замечено, если сформировался запрос добавить 2500 строчек в БД, программа подвисает секунд на 10, добавляя данные в БД. Клиенты в это время ждут своей очереди.
Так не пойму в чём проблема. Кажется дело в конфигурации mysql. Что нужно поменять, чтобы быстрее работал сервер mysql?
Пытаюсь через php записать 23 строки в таблицу, и получаю в ответ MySQL server has gone away. Отчего может быть, чем лечить?
Давайте я вам порешаю какие-нибудь интересные задачи по SQL или отвечу на какие-то вопросы по БД Oracle
Если обитателю /pr/ отрубить голову, он ещё 10 секунд будет спрашивать, как вкатиться.
Ладно, один хуй с похмелья не работается, можно и попиздеть.
Ты ведёшь себя неуважительно, потому что спрашиваешь, как вкатиться, не давая при этом никаких вводных: возраст, образование, опыт.
Все ситуации индивидуальны. Я не вкатывался в это дело целенаправленно, я просто искал работу, будучи студентом, который не умеет ничего. Так уж вышло, что человек я одаренный, но очень неустойчивый, у меня не получается изучать что-то самостоятельно дома, мне нужны реальные задачи.
На первую мою работу меня взяли за отличный физико-математический бекнраунд и сообразительность. Это было не слишком серьезно, можно сказать, что это подработка для студента. За копейки, кстати. Но тем не менее там я впервые познакомился с sql и ораклом, полюбил, сделал это своей специализацией. После свалил в хорошее место.
Спустя пару лет я великолепный разработчик отчётности, имею психологические 100к в месяц и очень доволен жизнью.
И да, я все же больше хотел попиздеть о технических вопросах, а не о карьере. Селектики там пописать, ну вы понимаете.
Мне вот и чатик по sql в телеге не впадлу было бы создать, но никому не интересно ведь будет, да?
Создавай! @aminazinn и в шапку треда надо будет запилить
Есть база данных на хостинге. У меня есть логин и пароль. Работаю с ней через программы вроде HeidiSQL. Сейчас надо подключиться скриптом php (5.6 и 7, в составе WAMP64), юзаю mysqli, а он выдаёт ошибку
mysqli_connect(): (HY000/2000): mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication.
и предлагает обновить пароль командой. Но эта база используется в одном довольно старом сервисе, и трогать пароли не хотелось бы. Поиск решений с этой ошибкой даёт аналогичные советы - обновить пароль.
Please use an administration tool to reset your password with the command SET PASSWORD = PASSWORD('your_existing_password'). This will store a new, and more secure, hash value in mysql.user. If this user is used in other scripts executed by PHP 5.2 or earlier you might need to remove the old-passwords flag from your my.cnf file
Можно ли как-то приконнектиться к базе ?
Избавься от автоинкрементального ключа и сделай ключ генерируемым.
Научите пользоваться индексами. Зачем они нужны? Когда и какие использовать? Хотелось бы с примерами из настоящей практики.
Да не, я в свою таблицу инсентил, на ней ничего не было.
Если честно, уже не помню, в чем там оказалась проблема, но все решилось
Есть сущность Работники. ID - первичный ключ. И есть отдельная сущность должности. Она создана, дабы избежать аномалии удаления.
Так вот вопрос - является ли сущность работники слабой?
Гуглить можешь? Да, является. А вот нахуй тебе этот вопрос сдался вообще, я ее понимаю. Это охуенно просто. Человек приходит выебнуться интеллектом и тем, что знает термин "слабая сущность", но интеллекта на пользование гуглом ему не хватает.
Ну давай разберем по частям, тобою написанное )) Складывается впечатление что ты реально контуженный , обиженный жизнью имбицил )) Могу тебе и в глаза сказать, готов приехать послушать?) Вся та хуйня тобою написанное это простое пиздабольство , рембо ты комнатный)) от того что ты много написал, жизнь твоя лучше не станет)) пиздеть не мешки ворочить, много вас таких по весне оттаяло )) Про таких как ты говорят: Мама не хотела, папа не старался) Вникай в моё послание тебе< постарайся проанализировать и сделать выводы для себя)
Как бы составить запрос так, что если бы в таблице скриптов не было записей с определенной моделью коммутатора, то все равно вывелись бы все типы скриптов как на пикриле 4, например?
Разобрался.
Миллисекунды и типом большую чиселку.
Interval
Помню, на предыдущей работе видел функцию для красивого вывода даты-времени, которая принимала в себя переменную типа даты, шаблон dвода информации, и шаблон вывода информации. Что то типа такого:
function("01.05.17 15:46:32", "dd.mm.yy hh:minmin:ss", "mm/dd hh:minmin")
Данная функция принимает в себя определенную дату-время и выводит через слэш число месяца/месяц и часы с минутами. Ну, то есть чтоб я вбил в неё переменную даты и вывел эту дату в формате каком хочу. И наоборот - если я хочу вбить строковую переменную, которая содержит в себе дату-время и шаблон(в котором указано, какой символ, какой единице даты принадлежит) и чтобы система перевела данную строчку в тип дата-время. Думаю, такие функции можно ведь где-то скачать.
Так зачем же нужен OLAP?
Помогите, совсем зарапортавался.
Есть таблица Производство и таблица Материалы. Как мне вывести Имя материала и количество раз, которое этот материал используется в производствах?
Или задам вопрос проще - как выбрать кортежи, у которых один атрибут одинаковый?
Запрос ИмяМатериала, НЗЧ(количество(МатериалыУк), 0)
из Материалы
левый союз Производство на Материалы.Ук равно Производство.МатериалыУк
борда /po ИмяМатериала
Подумой.
Создаю триггер на уменьшение количества определенного материала на складе при добавлении записи в другую таблицу с айдишником этого материала - пикрил 1
Инсертаю запись - пикрил 2
И выдает ошибку - пикрил 3
Все, с этим разобрался.
А как сделать триггер на отмену вставки при определенном условии? Например, если количество материала равно 0, отменяет вставку производства с этим материалом.
В какую сторону копать?
БЛЯДЬ ДВОЕ СУТОК НА ЭТОЙ ЕБОЛЕ НЕ МОГУ СОСТАВИТЬ ЗАПРОС, как что-то сложнее пары уровней вложенности, все, пиздец.
Надо выбрать из первой таблицы строки, для которых в дочерней таблице выполняется ряд условий. И я блять не понимаю как к этой еболе подходить.
Условно, есть две таблицы. Покупатель и покупки, с отношением один ко многим соответственно. Мне надо выбрать тех покупателей, у которых последняя покупка была "путь будет чайник".
Еслиб это был голый SQL, то я бы объединил две таблицы, сделал бы Group By, выбрал только последние и сравнил покупки с искомой покупкой.
Как это сделать на Linq, я не понимаю. Как вообще на нем такие запросы делаются, пойду еще почитаю документацию, такое ощущению что я какую-то техническую деталь пропускаю, и не могу понять какую. Include какой-нить или еще что-нить в этом роде.
Надо понимать что в таблице покупателей, не лежат ID их покупок. Все что там есть, это public virtual List<покупки>, который в таблицу то не отображается, а транслируется фреймворком в какие-то понятные ему связи. Есть только обратные индексы в дочерней таблице, но мне её DbContext конечно же не показывает - "ибо совсем охуел, мы ему фреймворки с интерфейсами, а он куда-то глубже пидор руки свои тянет".
Кто-нить работает/работал с LINQ to Entity, вроде бы рядовая задача, а что делать я не знаю.
Что нибудь в духе
from c in ctx.Customers
from s in ctx.Sales
group s by s.CustomerID into sg
let sgr = new { ID = sg.Key, LastSale = sg.Max(sg=>sg.Date)}
where sgr.ID= c.ID
select new {Customer = c, Sale = sqr.LastSale}
Хотя может выйдет и так:
from c in ctx.Customers
select new {Customer = c, Sale = c.Sales.OrderByDescending(s=>s.Date).FirstOrDefault()}
Бефор инсерт триггер на твою таблицу, в котором ты лезешь по айдишнику в таблицу, в которой количество ресурса, если там ноль, ничего не делаешь
Для верности ограничение на таблицу, что меньше нуля быть не может
И вообще ты пидрильство какое-то разводишь и головой не думаешь.
Что будет, если два человека одновременно внесут данные?
Меняй эту таблицу до
Ладно, расскажу, как человек бы сделал.
Прежде чем внести ресурс в какую-то таблицу, ты делаешь апдейт таблицы склада по номеру ресурса, попутно проверяя, что там достаточно ресурсов. Лучше, если условие на то, что ресурса должно быть больше нуля, будет зашито в ограничении на таблицу склада. Тогда тебе будет выскакивать ошибка сразу же при апдейте, которую ты сможешь успешно обработать эксепшеном.
Важно: коммит ты при этом не делаешь. Это значит, что ты блокируешь строку с ресурсом на себя и второй пользователь не сможет поменять количество этого ресурса на складе, пока ты не закончишь свои манипуляции.
Потом ты делаешь инсерт в свою таблицу и только потом фиксируешь изменения.
Если во время твоим манипуляций, второй пользователь попробует добавить тот же ресурс, то у него повиснет блокировка. Когда ты закончишь, у него блокировка отвиснет.
Простите ради бога, я всё с точки зрения оракла написал.
Я знаю, что такие вопросы сильно по-разному работают в этих базах.
Простите меня.
>INSERT INTO Orders values
(1, 15000, 'Mirror', '20160508'), (2, 15000, 'Glass', '20160507'),
(3, 45000, 'Mirrors', '20160508'), (4, 32155, 'Glass', '20160507'),
(5, 17000, 'Glass', '20160508'),(6, 33213, 'Mirrors', '20160507'),
(7, 9000, 'Glass', '20160607'),(8, 34500, 'Glass', '20160608'),
(9, 19800, 'Glass', '20160507'),(10, 5000, 'Glass', '20160608'),
(11, 7200, 'Mirror', '20160507'),(12, 19800, 'Glass', '20160507'),
(13, 8800, 'Glass', '20160508'),(14, 5000, 'Mirrors', '20160509'),
(15, 50000, 'Glass and mirror', '20170507');
> ORA-00933: SQL command not properly ended
А вот нихуя так не работает в оракле.
Тупо по строчке
Insert into t() values();
Insert into t() values();
Insert into t() values();
Вот почему нельзя было обычный синтаксис T-SQl сделать?
Теперь еще все даты менять, в таком
>20160508
виде он их вставлять не хочет.
Некоторые форматы даты он понимает, '21.12.2017' бы пропустил.
А вообще всегда хорошим тоном считается объявлять маску. В твоём случае to_date('20171221','yyyymmdd'). Должен схавать
https://docs.mongodb.com/v3.0/tutorial/administer-shard-tags/
https://docs.mongodb.com/manual/tutorial/manage-shard-zone/
и вижу, что обе этих технологии настраиваются одними и теми же командами, и сама документация совпадает за исключением, что в одной статье tags, а в другой zones. Что за хуйня?
Забыл уточнить, зоны и теги в контексте шардинга.
Рот ебал этой хуйни.
Сходу нихуя не разобрался, проебал срок тест задания пока читал базу про LINQ, ебанный Entity, ламбдахуямбда, ссаные статьи о работе ORM 21 ВЕК КОКОКО.
Все оказалось очень просто в итоге:
Iqueryable costomersList =
from cost in db.Costomers
where cost.Orders.OrderByDescending(order => order.ID).FirstOrDefault().Item == OrderItems.Item
select cost;
Выбрать тех покупателей у которых последняя покупка была OrderItems.Item.
Решение на столько простое, что я практически плачу не понимая как на это ушло почти 3 дня.
Единственное что я так и не понял, метод FirstOrDefault генерирует обращение к базе сразу, или таки это будет уже сделано потом, по факту обращения в момент использования costomersList.ToList().
UPDATE t3 SET t3.t2ID = t2.ID
FROM [dbo].[Table3] t3 (nolock)
JOIN [dbo].[Table1] t1 (nolock) on t3.t1GUID = t1.GUID
JOIN [dbo].[Table2] t2 (nolock) on t1.GUID = t2.t1GUID
WHERE t3.t2ID IS NULL AND
-------------------------------------------------------
t3.t1GUID in (
SELECT tt1.GUID
FROM [dbo].[Table1] tt1 (nolock)
JOIN [dbo].[Table2] tt2 (nolock) on tt1.GUID = tt2.tt1GUID
WHERE t1.GUID = tt1.GUID
GROUP BY tt1.GUID HAVING count(tt1.GUID) = 1
-------------------------------------------------------
EXISTS (
SELECT 1
FROM [dbo].[Table1] tt1 (nolock)
JOIN [dbo].[Table2] tt2 (nolock) on tt1.GUID = tt2.tt1GUID
WHERE t1.GUID = tt1.GUID
GROUP BY tt1.GUID HAVING count(tt1.GUID) = 1
)
Он будет быстрее отрабатывать через EXISTS или через IN? На stackoverflow пишут, что через EXISTS.
Предлагаю тебе еще один вариант:
Выбрать дистинктом все гуиды во временную таблицу (операция выполняется всего один раз в отличии от двух твоих примеров, в которых запрос выполняется для каждой строчки), проиндексировать временную таблицу по гуид, а потом переиннерджойниться с ней.
Может быть, я тоже об этом думал.
Но как-то нелогично, dimension это измерение же.
Вообще лучше у коллег спрошу, простите, что я такой хикка и омега.
dim - dimension - все верно Анон выше сказал.
А база ваша - скорее всего, хранилище данных. Покури теорию по хранилищам, измерение - распространенный термин.
взбугуртну, пожалуй
>2кило7надцатый
>нормализовать бд
>экономить место
>дип джоины
(мимо веб-дебилушка требует быстрых ответов от бд)
Если ты планируешь быть потом обычным девелопером, а не сидеть около базы DBA кодером онли. То посмотреть как работает LINQ to Entity Framework, что бы, как говориться быть в "тренде". И не обосраться как этот товарищ, когда перед тобой реальную задачу поставят >>110345, хотя он вроде справился тремя постами ниже.
если у тебя апдейтов нет, то можешь не нормализоывать.
Положняк изменился, теперь у меня Постгре удаленная и постгре локальная. И сейчас не могу через дблинк законектить.
>>113971
Конечно выгружается, но получается, мне придется выгружать 10 цсвх каждый день, а потом читать из них ради создания аггрегированых таблиц. Я то не против, но это точно самый удобный вариант и я смогу хоть как-то его автоматизировать?
Глубоко дрочить БД не собираюсь, поэтому талмуд Дейта с 1.5к страниц идёт нахуй.
Но мне норм если реляционная теория будет затрагиваться, даже если математически-строго.
Собирался читать "SQL и реляционная теория" того же Дейта, но в предисловии написано что она рассчитана на ОПЫТНЫХ ПОЛЬЗОВАТЕЛЕЙ СУБД.
Ещё пытаюсь осилить пиздоновскую ORM - SQLAlchemy, чтобы на самом Сикеле не писать. Но чтобы осилить её нужно Сикель базово знать.
Алан Бьюли, «Изучаем SQL».
нужно сделать бд с данными по макроэкономике и всякими данными по наебизнес показателям и прикрутить к этому лёгкий интерфейс, чтобы вбил в поиск показатель и/или год итд, и инфа выгружалась в эксель для дальнейшей работы.
От чего отталкиваться в плане выгрузки в эксель инфы и написания интерфейса? (На сервере стоит postgres)
Выбираешь юр фейворит ленгвич нейм. Пилишь на нем круд. Для выгрузки в эксель гуглишь юр фейворит ленгвич нейм эксель.
Делаешь.
Делаю так: переименовываю столбцы на лету, чтоб было одинаково (description).
SELECT count(*) FROM (SELECT block_content as description FROM text_blocks) as table1, (SELECT news_text as description FROM news) as table2;
SQL мне джойнит этим запросом небо и даже аллаха, и я получаю полмиллиона строк. Как их заджойнить последовательно, чтобы просто был столбец description, в котором сначала было бы содержимое text_blocks.block_content, а затем news.news_text?
Спасибо
Насколько я понимаю, со всем этим запросто справится SQLite. Но кванты со stackexchange запугали тем, что тикеры (как временные ряды) лучше хранить в MongoDB. Но ведь это для миллиардов тикеров.
Тобишь, покуда у меня не тонны данных, мне стоит просто использовать ту же SQLite и не привлекать внимания санитаров?
Единственный вывод, который может быть сделан из случайных данных — это что данные были случайны.
Нет никакой разницы, где их хранить.
>лучше хранить в монго дб
>лучше sqlite
Ты хоть поясни, что ты с этими данными собираешься делать потом. Если строить аналитику, то монга - не лучшее решение, если просто доставать по ключу и показывать, тогда монга, наверное, лучше. Ты же не собираешься хранить ПРОСТО ТАК?
Плюсы и минусы объектно- ориентированных БД
С меня как обычно большое спасибо
>DECIMAL и DOUBLE?
Дабл это расширеный FLOAT, то есть число с плавающей точкой. Если ты будешь сравнивать флоаты, есть неиллюзорный шанс соснуть, потому что вроде бы одинаковые числа не будут одинаковые по мнению БД.
Децимал потребляет больше памяти, но хранит точное значение числа, и с ним проблем при сравнении не будет.
Используй децимал.
float - тип данных для работы с приближенными числами при использовании с числовыми данными с плавающей точкой.
Пример
Мы помним случай, когда клиент использовал тип данных FLOAT для представления номе-
ров штрихкода продуктов и был очень удивлен, когда при сканировании он получал не тот
продукт. Также недавно мы получили запрос о конвертации величины с типом FLOAT в тип
NUMERIC, дающий на выходе не ту величину, которая была введена. Вот этот запрос.
DECLARE @f AS FLOAT = '29545428.022495';
SELECT CAST(@f AS NUMERIC(28, 14)) AS value;
Можете догадаться, что получилось на выходе этого кода? Посмотрите.
Value
---------------------------------------
29545428.02249500200000
Замени float на double, смысл останется тем же.
select lower('ЫВАПЫВ SDFSDF')
выдаёт
"ЫВАПЫВ sdfsdf"
куда копать?
текущая база:
CREATE DATABASE jnom
WITH OWNER = jnom
ENCODING = 'UTF8'
TABLESPACE = pg_default
LC_COLLATE = 'C'
LC_CTYPE = 'C'
CONNECTION LIMIT = -1;
кароч сделал резервную копию и переустановил постгре с collation 'Russian_Russia.1251'
Есть ещё хорошее расширение CITEXT. Можешь поставить его и забыть про все эти lowercase, uppercase
[
mark: 4.77,
timestamp: 1516785655,
{
question_text: 'some text',
answers_text: ['some', 'array', 'with', 'text', 'values'],
selected_answers: [0, 2],
},
{
question_text: 'some other text',
answers_text: ['some', 'other', 'array', 'with', 'text', 'values'],
selected_answers: [1, 2],
}
]
Сам бы сделал что-то вроде такого:
sessions(id: unsigned_bigint, mark: decimal[1,2], timestamp: timestamp),
questions(id: unsigned_bigint, session_id: unsigned_bigint, text: text),
answers(id: unsigned_bigint, question_id: unsigned_bigint, text: text),
selected_answers(id: unsigned_bigint, question_id: unsigned_bigint, value: unsigned_smallint).
Насколько пригодна в реальном мире предложенная мной структура?
Почему у тебя вопросы завязаны на сессии? Вопросы же это справочник, по идее. Селектед насверлил должны быть со ссылкой на сессию.
Не Бд подгоняй под входящие значения, а наоборот.
Базовые знания теории реляционных СУБД
Базовые знания языка запросов SQL
Знание основ сетей и технологий виртуализации
и где лучше брать материалы и почему готовиться, нужно к понедельнику вот.
sql-ex.ru
Если данные позволяют шардировать на уровне БД, то лучше так и сделать. Не придется внутреннюю логику хранения тащить в приложение.
Прошу помощи с одной ебалой.
Есть таблица [activites] с активностью по клиентам.
[date_] - дата, id - id клиента, cnt - количество действий совершенных клиентов.
Задача в том, чтобы запилить отдельный столбец который будет начинаться с каждого клиента заново, то есть partition by id и количество подряд идущих 0 в таблице между активностями. То есть если была активность (любое ненулевое в cnt) счетчик должен сбрасываться на 0.
То есть считаем нули между ненулями по cnt.
Как пример должно выглядеть как на втором пикрелейтеде.
Программач, выручай.
Тебе что конкретно надо. Сделать отчет в таком виде (столбец будет в отчете, а не в БД) или добавить столбец на рабочую БД (которая пополняется и там должен быть тот столбец с правильными значениями)? Отчет и программными средствами можно запилить. Текущую БД можно апдейтнуть скриптом. Если нужно чтоб при инсерте новой записи правильно заполнялся тот столбец - добавляешь триггер.
Сделать это в отчете, да. Прав на редактирование БД у меня нет. Поэтому надо выкручиваться агрегатными функциям и LAG-LEAD'ами.
Там у тебя чистый SQL или скриптец какой накидать можно? Скриптом без проблем делается, вроде как. Я просто бэкэнд-макака и в SQL настолько не силен.
T-SQL там, но надо выполнить в форме привычного запроса select/from/where
Есть два стула две даты.
Например, 01.01.2138 и 01.01.2139.
Или 01.01.2138 и 01.02.2138.
Есть частота дискретизации - неделька, месяц.
Как получить колонку с первыми числами каждого месяца или колонку с понедельниками каждой недели?
оракл
Огромное спасибо тебе, анон. Приду - запущу.
Обычно это решается предварительной генерацией таблицы с датами.
>колонку с первыми числами каждого месяца
это будет первое число, или что ты хотел? День недели?
Максимальное значение чего?
select * from [table] - это все записи
max([colName]) - это агрегатор для максимального значения
select add_months(to_date('2138-01-01', 'YYYY-MM-DD'), rownum-1)
from dual
connect by level <= months_between(to_date('2139-01-01', 'YYYY-MM-DD'), to_date('2138-01-01', 'YYYY-MM-DD')) + 1
order by 1;
С неделями пока лень возиться.
А не в епам ли ты собрался, а пидр?
Суть токова:
Есть много данных, данные побиты на кусочки. Количество кусочков - десятки/сотни тысяч. Кусочки могут иметь версии (~единицы - десятки версий).
Есть алгоритм. Алгоритм тоже может иметь версии (~десятки версий).
Алгоритм жрет кусочки данных и высирает результат - объект состоящий из нескольких массивов байт и списка интов, общим размером до 300-500 кб (часто намного меньше).
Хочется выбрать БД в которой я буду хранить эти результаты обработки и делать запросы вида:
"достать все результаты для такой-то версии алгоритма и такой-то версии данных для заданного множества кусочков данных"
Хочется чтобы выбранная БД
- легко поднималась на амазоновском облаке прям по хардкору на спот инстансах с автоподнятием убитых нод даже аутистом далеким от БД
- отдавала результаты пиздец быстро и с минимальной задержкой
- имелись SDK под кресты и пистон
- [опционально] была стильной модной молодежной
Пока смотрел только MongoDB, но я в бд нихуя не разбираюсь а потому это как пальцем в небо. Посоветуйте годноты, аноны.
Домен - ML и анализ данных.
Если кусочки между собой никак не связаны или это не имеет значения, то монга подходит.
Гугли Документоориентированная СУБД, Document-oriented database.
>ROW_NUMBER and RANK are similar. ROW_NUMBER numbers all rows sequentially (for example 1, 2, 3, 4, 5). RANK provides the same numeric value for ties (for example 1, 2, 2, 4, 5).
>>127221
Если в пределах одной секции у двух записей совпадает ключ сортировки, они получают один ранг. При этом следующий ранг после них может назначаться по номеру записи в секции (ф-ция rank()) — из-за чего в последовательности рангов могут возникать пропуски— или как инкремент последнего ранга (dense_rank()) — такое «плотное» ранжирование наращивает номера рангов последовательно.
Примеры у анона выше. Для dense_rank() соответственно будет (1, 2, 2, 3, 4)
В отличие от обеих rank-функций, row_number() гарантирует уникальность значений в пределах секции и просто нумерует строки согласно условию сортировки. При этом, если ключ сортировки у записей совпадает, ты получаешь вообще говоря недетерминированную нумерацию.
USER_CONSTRAINTS
или ALL_constraints,
структура у них одинаковая, только данные могут быть разными
чем отличаются выделенные столбцы между собой?
нет
Там же написано всё. R_ для ссылочной целостности, внешние ключи — вот это всё.
>select *, case when row_number() over (order by id) then max(value) over () else null end as max_value from t_table
такие дела, в первую строчку вставим это максимальное значение, а все остальные оставим пустыми, чтобы меньше данных передавать в dataset.
ms sql
declare @d date = getdate();
select format(@d, 'yyyyddMM') as FormattedDate
Ты студент что ли?
Какова максимальная длина выражения в execute immediate?
Хочу туда захуячить 'create or replace package body', но в варчаре это не вариант, пушто слишком дохуя
Можно clob туда делать? Такую пиздатую шнягу придумал эх.
Смотри, вариантов решить проблему несколько.
И все они мне не нравятся.
Эту задачу точно нужно решать средствами БД?
По-хорошему, я бы считал нужное тебе значение при попадании записи в БД, а не городил бы ебенячий запрос.
мненужно именно средствами БД, а именно оракла,
это на регулярки задачка
мне её прям сейчас очень нужно решить, поможешь?
спасибо
Для начала сойдет и просто описание краткое самых популярных бд, чтобы анон понимал, для чего конкретная бд используется чаще всего.
А то смотришь иногда вакансии, там тебе и монга, и постгрес, и редис, и рэббитмкью. Ладно первые две, но вот последние хуй знает для чего используются конкретно, с чем варятся, и как едятся. Плюсы, минусы какие-нибудь. Может поискать сравнительные статейки.
ПС: я бы тоже, может, поучаствовал, полезно в качестве самообразования
Я обычно использую для оптимизации своих отчетов. В отчете пару временных таблиц которые используются потом для подсчета. Так вот создаю кластеризованные индексы для того поля по которому потом обращаюсь.
Привет, анонасы. Больше года проработал разрабочиком отчетов под ms sql server. Есть хорошая аналогичная должность в одном банке, но там oracle. Вопрос: какие есть отличия в синтаксисе? Что можно использовать в oracle чего нельзя ms server и наоборот?
Уже понял что сама парадигма основного синтаксиса sql похожа, но различаются именно в диалекте t-sql / pl.
могу сказать главное T-SQL сосёт ХУИ.
Серьёзно. Диалект отличается, да, и стоит изучения, а так норм идея.
Погуглить-то что мешает?
https://stackoverflow.com/questions/7283828/what-are-the-major-differences-between-the-mysql-and-oracle-sql-dialects
Ебашь в банк, если место норм, а то так и будешь всю жизнь ключи подавать.
Может в сравнении с оркалом и не очень. Но у меня с базами мелкомягких проблем не было. Правда мне приходилось сидеть на 2005. Всё равно намного лучше, чем какой-нибудь мускуль пятый.
это другой анон
MySQL сервер такое себе. Если хочешь что-то на уровне ms или oracle то гляди в сторону постгре. Она топ.
Кто может пояснить за код прошивки? Тут всего 3 файла с охуллиардом строк. Код имеет вид:
08f0 9fe5 0a4e 6321 bca3 e220 a616 2a21 и таких строк просто до сраки.
Решил сменить вектор деятельности. Почитав форумы и поспрашивав понял, что многие советуют пидорить в бд, изучать pl и прочее. Насколько это грамотное решение?
SQL в любом случае спрашивают на собеседованиях.
Глубоко можешь не копать, поехавшие БД-админы иногда рисуют на бумажке таблицу из двух колонок, и требуют её джойнить/группировать с ней же самой, но в этот момент надо вежливо уйти с собеседования.
А вот запрос о количестве чего-либо в заданное время «от/до» с пустыми клетками — можешь мне не верить, но спрашивали даже там, где SQL вовсе не было.
Не вижу ничего плохого.
Prepared Statements были бы лучше, но у аффтара они не...
— Тяжело тебе, Данила-мастер?
— Ох, тяжелооооо
— Не выходит у тебя, Данила-мастер, каменный цветок?
— Не выхоо ооо оо ооооооо
ХЗ, детский сад какой-то. Что-то похожее писал будучи перваком. И вообще, клеить так запросы это bad practice, лучше уж какой-нибудь arg-list.
Спасибо, а как надо писать?
Анон, у кого-нибудь был опыт работы с распределенными файловыми системами (hdfs, ceph), как с бэкэндом для баз данных, поддерживающие тип LSM-tree(leveldb, rocksdb)?
Очень интересно узнать про какое-нибудь решениие, которое позволяет читать\писать в такие базы, но чтобы все в пиздец не скатилось.
Ради опыта решил проверить решение >>126287-анона - не работает. Если кому пригодится, у меня решить получилось так - https://pastebin.com/SNyNxBAW.
Правда думаю, что можно и оптимальнее сделать.
sql-ex.ru
Кто-нибудь уже запиливал трушные БД с точки зрения этой книги? Или везде SQL?
Мне интересно, как именно оно не работает. Синтаксическая ошибка, данные не те выводит (тут было бы неплохо фоточку).
И синтаксическая и логическая, т.к. скрипт не учитывает конкретного юзера.
Вставляются записи в таблицу А. На одном из столбцов ограничение по внешнему ключу, который ссылается на таблицу Б. Если такой записи в таблице Б ещё нету, то запись нужно создать, данных на входе достаточно.
Собственно как в приличном обществе поступают?
1. Перед записью в таблицу А всегда делать запись в таблицу Б если её ещё нет.
2. Как-то ловить неудавшуюся из-за ограничителя запись в таблицу А, и дальше уже что-то там делать.
3. Какой-нибудь особый паттерн специально для таких случаев.
4. Не выёбываться, потому что внешний ключ для того и сделали чтобы ограничивать всякое левое говно.
pg если это имеет значение
первое
В мускуле можно не ссылаться на строку, то есть вместо id записать NULL.
Попробуй, может тебе тоже так можно.
Я не могу селект написать...
Мне кажется, что я деградировал от алкоголя и теперь меня уволят
Есть таблица номер договора, дата, сумма просрочки (0 - просрочки нет). Упрощённо
По каждому договору на каждую дату есть запись
Мне нужно выделить из таблицы все непрерывные периоды просрочки, то есть получить историю:
Договор, дата начала просрочки, дата окончания просрочки
Спасибо!
> Всё, конец
>Я не могу селект написать...
>Мне кажется, что я деградировал от алкоголя и теперь меня уволят
>
>Есть таблица номер договора, дата, сумма просрочки (0 - просрочки нет). Упрощённо
>По каждому договору на каждую дату есть запись
>Мне нужно выделить из таблицы все непрерывные периоды просрочки, то есть получить историю:
>Договор, дата начала просрочки, дата окончания просрочки
>
>Спасибо!
max(), min() over (partition by docid), не?
Может быть больше одного периода по договору
То есть сначала есть сумма долга, потом нет, потом опять есть и ТД
Не знаю, как это обрабатывать
Где можно почитать про оптимизацию SQL?
MS SQL*
Очевидно же, что ты по тикерам потом захочешь строить себе графики. Однозначно надо SQL.
>>138323
Отвечу тебе вторым моим постом, эту задачу я уже решал по своим нуждам
Надеюсь не нужно совсем адаптировать, почти слово в слово всё то же самое
Это классическая задача "start of group"
Этапы такие:
1. Проставляешь 1 там, где у тебя разрыв в данных
2. Делаешь упорядоченное суммирование этого показателя по росту значения. Получится, что у первого диапазона 1, у второго 2 и тд
3. Потом делаешь обычную группировку по показателю из п2, находя минимальное и максимальное значение
Дано
Таблица A - начало и окончание линии(line_id; line_begin;line_end)
Таблица B - разрывы в линии (break_id; line_id, begin, end)
Все разрывы лежат внутри линии (т.е. линия не начинается и не заканчивается разрывом) и не пересекаются между собой. Разрывов может и не быть.
На выходе нужно получить отрезки, на которые распадается линия.
>lag можно заметить на селект в селекте (select max(value) from table t where t.value < table.value)
Еще можно с иерархическим запросом сделать.
А с оконными функциями можно и без суммирования сделать
>Прикольно, я подумаю.
Завтра напишу вторую часть задачи.
монго крашит с лимитом 32 мб
Существует.
Вопрос вообще некорректный.
Быстро - это сколько? На каком железе?
Какова природа и структуры данных?
А что значит сортировать?
Тебе ведь сортировка для чего-то нужна. Для чего тебе сортировать 1 Гб, да еще и быстро?
любая реляционная субд с поддержкой индексов.
Времени не было особо, сегодня вечером потуплю под винишко
Кстати, мой мертворождённый чатик в телеграме, заходите @database2ch
Давай внимательно разберем по частям тобою написанное.
Зачем тебе таблица, которая не хранит никакой информации? Если ты планируешь инсертить те же значения в какую-то другую таблицу, то сделай их первичным ключом в той таблице. А если ты планируешь инсертить значения типа "Я покакал" и важно тебе будет только количество записей в этой таблице, то и первичный ключ на ней не нужен.
Кстати, мой божественный 12 оракл умеет делать так.
Но в более ранних версиях так не получится, там как минимум нельзя делать значение сиквенса значением по умолчанию.
Разве что инсертить что-нибудь и обрабатывать через триггер before_insert, чтобы вставлялось значение сиквенса.
Но просто ответь НАХУЯ, заинтриговал.
Я делаю чатик. На сервере ведется количество всех бесед, чтобы каждая беседа была уникальна. Собственно, все, что мне нужно - только ее идентификатор. Каких-то названий, описаний, и т.д. у нее нет. Также на сервере есть таблица, в которой указано какой юзер в какой беседе участвует. Когда я отправляю сообщение, в нем указан ID беседы, сервер смотрит всех ее участников и каждому отправляет это сообщение. Именно поэтому и обязательно, чтобы ID был уникальным. Я хуй знает, как это сделать по-другому. Может, есть идеи упростить эту хуету?
В таблицу беседа можно добавить:
Тип беседы (открытая/по приглашениям/видимость для поиска и т.п.)
Дату создания
Дату удаления
Дату последнего сообщения
И еще кучу всего можно напридумывать
Так что смело делать т0бличку
>Чем тебе не понравился мой божественный код?
Да все ок, просто спросил, может, какие-то не очевидные с первого взгляда бонусы есть.
Сам на 11 сижу.
Так я и говорю, что на 11 нельзя сделать сиквенс значением по умолчанию. Поэтому приходится плодить тривиальные триггеры бефор инсерт, которые будут проставлять значение сиквенса в столбец
В 12 мега удобнее, потому что дефолтное значение ты сразу видишь, глядя на таблицы, а про триггеры ты и забыть можешь
Насколько я понимаю, никто не мешает вставить недефолтное.
Да и мест, где инсертится обычно не сильно много.
Но в плане того, что залез в табличку и увидел сиквенс для нее - удобно, да. Особенно в том случае когда не соблюдаются правила "одна таблица - один сиквенс" и "сиквенс называется префикс_таблица ".
Ты действительно считаешь, что общество будет тратить на ответ тебе больше слов, чем ты потратил на вопрос?
Иди на хуй. Спросить нормально не можешь.
Ты действительно не можешь понять? Мне в БД нужна таблица, по запросу которой, нужно выводить график загрузки определенного тренера. Как тут еще КОНТРЕТНЕЙ-то объяснить?
Я не обязан ничего понимать и помогать тебе. Ты просто ведёшь себя неуважительно
Глянул твою схему. Не понял, зачем отдельная таблица для загрузки тренера, если эту информацию можно брать из индивидуального расписания учеников. Как по мне, дублирование информации получается.
http://dbdesigner.net
>>143735
> Не понял, зачем отдельная таблица для загрузки тренера, если эту информацию можно брать из индивидуального расписания учеников
Да, я как раз решаю эту проблему. Спасибо.
Дрочи теорию, потом ищи задачи и ебошь. Можешь матан писать на сиквеле. За месяц в джуниора превратишься, если по 8 часов в день будешь уделять.
Для чего и на каком уровне?
ставишь postgres
решаешь 100 (даже 50 хватит) задач на sql-ex.ru
параллельно читаешь там же теорию и проверяешь её в postgres
и статью про джойны на википедии прочитай
за месяц точно можно успеть
Что именно вызывает сложности?
В ней два столбца
ID и Date
Задача: вывести оба столбца, но:
1) не выводя строке где Date c NULL
2) выводить только 2017-й год
С первой задачей справился. Остается вторая, но как только не писал. И date LIKE '%2017', и date BETWEEN '01.01.2017 AND '31.12.2017' - не работает. В чем может быть проблема? создавал БД сам, в Acceess
Дата у тебя скорее всего имеет тип Date, а ты пытаешься работать с ней как со строкой.
https://accesshelp.ru/funkcija-datepart-v-zaprosah-access/
YEAR([Date])=2017
Есть реляционный Postgres монстр на пятьсот таблиц. Ебаные джойны и CTE душат пиздец. Пол базы в оперативной памяти. Траффик кеша десять гигабит пробил.
Как это говно денормализовать? Как поддерживать консистентность потом при большом количестве апдейтов? Я просто закостеневший уебан, который не может перестроить свое мышление с реляцонных рельс?
Наставьте на путь истинный долбаеба.
Тебе нужен редис. или любая другая хуйня, которая позволяет делать 2 вещи:
1. хранить данные в памяти
2. складывать их в нужном формате на диск.
1. Че будет с редисом если память таки кончится? Есть вероятность свалиться в конский своп? Как редис из таких ситуаций выгребает?
2. Я так понимаю что если он приляжет, то тому что было в памяти пизда и нужно все-таки хранить данные еще и в более надежном хранилище.
3. Главный вопрос в каком виде хранить данные. Если есть ебическая выборка по которой матвьюшка строится десять часов и которая меняется от любого пердежа, то как такое хранить и поддерживать в том же редисе?
Обновлять все чего коснулись изменения сразу? Раз денормализовано, то и мест таких будет по идее больше. Redis выдержит такую напругу?
А если периодически, то чем вообще такие отложенные обновления производятся и в чем отличие от того же построения матвьюшки?
Как идея, взлетит?
>Недавно пришла в голову мысль запилить БД на файликах. Без мускула и каких-то серверов, всё хранить открывая/записывая/закрывая файлы. С форматом не опредился, yaml, json, xml, csv иили вообще свой придумаю.
> впизду твои костыли, уже есть sqlite
Ну там тип этих колонок, индексы-хуиндексы?
В оракле есть функция по взятию хэша. Мне нужно взять хэши процедур, пакетов, триггеров и вьюшек. Как это сделать легко и просто? Я помню что тексты процедур и функций хранятся в одном из представлений системных. А где триггеры и прочее? Или есть какая-то крутая фича, которая считает все сразу?
У меня не слишком их много?
Суррогатных ключей никогда не бывает много.
Что для этого использовать? Sqlite, SQL? До этого ничего общего с бд не имел. Использую сишарп если что.
Разобрался
Не понятно, что ты хочешь.
Какая у тебя СУБД? Используешь ли хранимые процедуры?
сделай структуру
Вот задание:
Перенести продукты из одной категории в другую.
То есть мне нужно в одной таблице присвоить запись другой категории записей. Как это сделать?
То есть, было "Chocolate, Desert", а стало "Chocolate, Beverages". Как это сделать? Я нихуя не могу понять, а в гугле нахожу только перенос из одной таблицы в другую. Мне же все надо сделать в единственной таблице.
Спасибо заранее.
Подойдет и просто пример того как должны выглядеть таблицы и связи между ними в идеале. Но если есть и mysql код -- тоже замечательно. Спасибо
Тред почитать? Загуглить? Совсем даун что ли?
sql-ex.ru
1. Как в ней устроные индексы? В виде сбалансированного дерева или нет?
2. Если есть составной индекс, но я ищу только по одному из полей, будет ли он работать и как быстро по сравнение с простым индексом на этом поле?
3. Чем, блять, скан от сика отличается?
Вскукарекну из-под шконочки:
1) Да, B/B+-деревья.
2) Работать он в любом случае будет, но вряд ли быстрее обычного индекса по конкретному одному полю (и в плане поиска и в плане вставки/удаления/обновления). Зависит от того, какие данные в полях составного индекса хранятся и в каком порядке поля указаны. Кмк, чем более уникальна комбинация, чем "легче" тип данных (int'овое значение быстрее ищется, чем nvarchar'овое), и какой порядок (есть разница между int-nvarchar или nvarchar-int), тем быстрее он будет работать. Ну и в вопросе не уточняется, кластеризованный или некластеризованный индекс.
3) Не хочу напиздеть, но scan вроде двух видов может быть, т.е. table scan - перебор всех строк в таблице (когда в таблице нет индекса и поиск идет по всем строкам), index scan - перебор всех значений / ссылок на значения на узлах дерева (индекса) (когда в таблице есть индекс и поиск идет по всем значениям / ссылкам на значения). (Index) seek же относится только к индексу - поиск идёт по конкретным узлам дерева (индекса) для поиска конкретных значений / ссылок на значения.
Есть викторины, есть игроки, есть вопросы и у вопросов варианты ответов (пока можно не смотреть даже).
Как приебланить ответы игроков
Прикрепляю схему, там вроде всё понятно по замыслу
Спасайте братцы
Таблицы Question_in_quiz и Players_in_quiz объединить в одну и добавить в неё ansrewId.
- есть в базе данных таблица, из которой надо ебнуть ненужные записи и оставить нужные. На данный момент мне удалось сделать DELETE FROM НАХУЙ, то есть выбираю ненужные записи и удаляю их
Чо мне надо: я хочу сделать наоборот - выбрать из таблицы нужные записи (их немного) во вспомогательную таблицу, потом ТРУНКАНУТЬ всю основную таблицу и догрузить в нее нужно из вспомогательной. Но скрипт типа SELECT * INTO <вспомогательная таблица> FROM не срабатывает, ошибку выдает какую-то (выполняю из сторонней программы скрипт подключением к внешней базе). Я так подозреваю, вспомогательную таблицу надо сперва создать, а потом в нее пердолить данные? А что, если я в душе не ебу, какая структура у этой таблицы и мне нужно как-то динамически создавать вспомогательную копию с той же структурой как и у основной, что для этого писать в запросе?
Делай инсерт а не селект инту.
Инсери инто бла бла селеки фром блаблабла.
Кайта чтоли прочитал?
Насчет создания второй структуры: бери ддл таблицы и создавай по ней новую. Вродн все норм программы для рабоиы с субд умеют вынимать ддл
С инсертом хуйня 100% не работает, потому что инсертит только в существующую таблицу. С селектом тоже.
>>155975
Да ты мне скажи конкретный пример чо писать английскими словами. В душе не ебу, как твой ддл брать. Нагуглить я могу и сам, было бы время. Мне бы щас просто написать, чтоб работало, а разбираться потом будем.
Ну сматри, у меня есть таблица с классами, у каждого класса есть расписание.
Расписание состоит из урока, дня урока и его номера за списком.
Кроме таблицы в таблицы и хмл был вариант записать все эти уроки в одну таблицу, привязав к им класс, но чет это не очень оптимизировано.
И ещё один вопрос: допустим, у меня есть таблица, в которой хранятся некоторые файлы. По какому то иденфикатору мне надо найти фотку. Как это лучше сделать, одной таблицей или двумя? Мне кажется, что в первом случае пикрл 1 при поиске фотки СУБД будет загружать в ОЗУ каждую фотку в таблице, а во втором случае пикрл 2 и 3 сразу выдаст нужную фотку.
Пока писал это, появился вопрос, как можно хранить лист фоток, которые привязаны к одному объекту, в бд?Этот лист будет состоять ну максимум из 5-10 фоток, чаще всего будет одна фотка или их вообще не будет.
Какая СУБД? У каждой есть синтаксис для селекта во временную таблицу, но у всех немного отличается.
На мускуле что-то такое:
https://stackoverflow.com/a/5859469
На ms sql просто селект.
Выбери в просмотрщике таблиц нужную таблицу, выгрузи ддл.
Либо ебашь адовую массу типа create table tablename select * from tablebasr where null; потом инсертишь в эту таблицу селектом. Insert into tablename select blabla from tablebase where blabka.
Если запрос с созданием не работает, то делает крейт тейбл tablename like tablebase
>просто селект
просто селект блять просто селектит, а мне надо во временную таблицу
>>156049
да какой впизду просмотрщик, у меня есть oledb соединение с базой и имя таблицы, а что на сервере творится, я не ебу, мне нужно прямым запросом очистить эту таблицу, но не всю. Короче я понял, тут базотред уровня /b. Попробую чистить без задней мысли, может прокатит.
>1156012
во вложенные таблицы стоит складывать не очень важные данные, по которым не будет поиска и джойнов.
Уроки - это самая важная часть, поэтому она должна быть отдельной таблицей. Количество записей тебя не должно смущать, для СУБД это семечки (при условии что ты правильно сделал индексы). Ну и про внешние ключи не забываем.
Если ты делаешь уроки полем какой-то таблицы ты создаешь себе офигенные проблемы - будет просто нереально с этим что-то сделать.
По второму вопросу второй вариант вообще бессмысленный, он никак тебе не поможет.
Насчет памяти не переживай, если для поиска ты не будешь поле LOB использовать, то оно никак не помешает. Если ты ищешь по ID, то там уникальный индекс, он вообще в таблицу не полезет при поиске, только когда данные будет отдавать.
>хранить лист фоток, которые привязаны к одному объекту
В табличке PHOTO есть колонка object_id, которая содержит ссылку на запись OBJECT. Для нее должен быть сделан foreign key и индекс.
Бля я тебе решение дал с креэйтом, хуле ты такой долбоеб, блядь?
Оледб хуе мое. У тебя значит есть логин/пароль, зайди в бд через какой-нибудь тоад и глянь свою таблицу, вот пиздец, ленивый обмудок.
Навскидку я бы так предложил.
Question quiz можно убрать, если в каждой викторине вопросы уникальные. Ссылка answer на question - для удобства поиска, ответ ведь не меняется, поэтому можно сразу сохранить все поля. Меньше джойнов потом будет.
insert into vspomojitelnaya (col1, col2 .. coln)
select col1, col2..coln from osnovnaya
where col1488 = %yoba_uslovie%;
commit;
truncate table osnovnaya;
insert into osnovnaya (col1, col2 .. coln)
select col1, col2..coln from vspomojitelnaya;
commit;
Я тоже так думал, но после
>Для СУБД количетсво данных семечки
Наверное так и сделаю: таблицу всех фоток, в которых будет содержатся ид хуйни, к которой они привязаны, и таблица всех уроков на все расписания для всех школ. Спасибо, анон.
а блять, у тебя нет вспомогательной, тогда вместо первого селекта
так: create table vspomojitelnaya as (select * from osnovnaya where ....);
Ну это если есть права на создание таблиц.
Ёбик, хули ты такой ограниченный, не программист что ли? Решение должно быть универсальным - подсунул любую таблицу, она обрабатывается. Из-за тебе сука походу придется читать структуру таблицы и криэйтом динамически заебенивать копию. Но мне лень, может есть какой-нибудь простой способ в три хода.
О, вот это заебочек. Только поясни, create делает прямо новую таблицу на диске, а не временную в темпдб? И че мне после последнего инсерта надо ее дропать? Алсо что за коммит, нахуя коммит? Нигде не видел чтоб его использовали, транзакции вроде нету же, или эта хуита как бы разделяет операции просто?
Да, дропнуть нужно будет вспомогательную.
Коммиты можешь убрать, что там у вас для запуска скрипта, GO? После каждого выражения тогда GO пиши.
create делает просто таблицу, в SQL Server вроде префикс # указывает, что ее нужно создавать в tempdb (т.е. create table #zzz создаст ее в темпдб). Дропнуть все равно нужно будет.
бля, немного читал тебя жопой ибо был в шкалке.
>Уроки - это самая важная часть, поэтому она должна быть отдельной таблицей.
Но само рассписание, которое мне надо получить, содержит только список уроков на неделю, в котором будет около 30 записей, в которых я могу разобратся, просто выгрузив все рассписание в свою програму.
И как делать "правильную" выборку по ид? Или SELECT * WHERE id = 228 будет достаточно, т.е оно не будет чекать каждый элемент и сравнивать его ид с 228?
как разобратся в этих йоба графиках на твоих пиках?
Не работает. И с # в том числе. Возможно действительно прав нет на создание таблиц.
Список уроков на неделю - это лишь частный случай.
Допустим, ты захочешь сгенерировать для каждого учителя его план занятий на четверть или посчитать количество часов по тому или иному предмету или увидеть наиболее или наименее загруженное время в школе.
В этом случае вложенные таблицы будут очень неэффективными.
Если ты захочешь сохранять информацию о перенесенных или отмененных уроках - тоже непросто будет. Или если класс на английский язык на две группы разделяется. Или если на физкультуре мальчики отдельно, девочки отдельно.
Проектирование схемы данных - очень важный этап, нужно предусмотреть очень многое и заложить потенциал для развития и расширения.
Схему читать очень просто - квадратики это таблицы, стрелочки означают что в таблице есть ключ из другой таблицы (на которую показывает стрелочка), вот кстати опечатка у меня - стрелка от lesson должна идти к teacher. Это значит, что в таблице lesson есть поле teacher_id (преподаватель, который ведет урок. Это решение подходит, если урок ведет один преподаватель. Если из больше, то нужно делать еще одну таблицу TEACHER_LESSON). Если стрелка на саму таблицу указывает, то это значит, что в таблице т.е. одно из полей ссылается на другое поле в этой же таблице.
> SELECT * WHERE id = 228 будет достаточно
Достаточно, если у тебя есть индекс по полю id. СУБД прошерстит индекс (он отсортирован, конкретный id найдется очень быстро), и из индекса возьмет информацию о физическом расположении записи.
Т.е. индекс как оглавление в книге (или предметный указатель), если его нет, то чтобы найти главу по названию, тебе придется последовательно пролистать все страницы, пока не найдешь нужную. А с оглавлением ты сразу знаешь номер страницы.
А ничего, я вслепую скрипты выполняю, они либо выполняются, либо нет. Походу надо на сервере логи смотреть.
Спасибо анон. Не ожидал, что на дваче мне-долбаебу все так грамотно розжуют
А в чем задача-то? Сеанс А и Б одновременно редактируют одни и те же данные? Если сеанс Б зафиксировал изменения, то все, фарш назад не провернешь, если только копия где-то не осталась.
У меня есть состояние t1 базы. Я хочу в любой момент вернуться в это состояние, только не ручным бэкапом. Само собой в момент возврата никто в базу ничего писать не будет, но соединения будут висеть. Нужно только сбросить все форшмаки, которые после t1 наделали.
Короче я заколхозил моментальный снимок базы, но при попытке восстановиться из него говорит = при помощи операции RESTORE не удалось выполнить обработку базы sladkiy_hleb, так как она используется в этом сеансе. Рекомендуется для выполнения этой операции использовать базу данных master. И че?
Мех, у тебя должны быть включены архивлоги, которые снимаются каждые 10-15 минут. И как бы ты понимаешь что у тебя разные scn поэтому ругается на данный момент на реплику.
Create or replace trigger blabla after create on schema
Or
Create trigger blabla on db for create_table
Кароч у меня есть таблица lykovie_oladji, я в нее буду писать 1 и база должна в этот момент выполнить нужную мне строчку кода. Базарь.
Create or replace triger schema( я хуй знает какая рна у тебя).lykovie_oladji_trigger after insert or update on lykovie_oladji
Описывай
Бегин
Энд
Но я тебе не на транзакте писал, я им 1 раз пользовался и ебал его в рот
Книгу 75-го года, вы серьезно? Я понимаю, что в России нет науки, и приходится читать переводы 50-летней давности, но неужели никто не владеет английским?
А ты серьезно не понимаешь сути теории? Мне Евклида с его геометрией в пример привести?
В базе есть запись ("дом1, номер2, улица3")
Если на вход подается запись ("дом1, номер2"), то отклонить.
Мол, первые два параметра (не знаю, какой термин подобрать) совпадают с тем, что есть в базе, то такое пропускать нельзя.
Я твой синтаксис не понимаю.
>("дом1, номер2, улица3")
Сколько полей в этой записи?
>("дом1, номер2")
А в этой?
Короче, либо unique constraint, либо trigger.
> Я твой синтаксис не понимаю.
В общем, есть три колонки, и, если данные с первых двух совпадают с теми, что подают на вход, то отклонить.
Пример записи -
"Пушкина" "Колотушкина" "12"
И, если подается на вход
"Пушкина" "Колотушкина" "4918"
То это вносить нельзя.
> Unique constraint делай.
Эх, если б я знал, куда его и как делать. Ну да ладно, спасибо, погуглю.
Вбиваешь в гугл название своей субд и рядом unique constraint.
Переходишь на страницу с документацией, смотришь там пример.
Я использую DB Browser, и за то время, что я там ковырялся, даже не смог понять как правильно создать триггер. Там есть окошко для ввода и исполнения SQL когда, но он постоянно ругался на синтаксис, хотя я тупо копировал с гугла и подставлял значения своей БД.
Вроде бы разобрался, спасибо еще раз!
Есть одна маленькая .db, значит, её трогать может одновременно неограниченное количество рыл?
Да, конечно. Ведь это же реляционная база данных. От слова relations множественные связи со множеством клиентов.
Тут главное, чтобы RAM хватало.
А, понял. Спасибо!
А можно еще узнать, от чего зависит требования к оперативной памяти? Если ~300 компьютеров сделают 2-5 insert запросов, сколько нужно RAM?
Пожалуйста. Обращайся. Здесь все твои друзья.
Если бы вы писали что-то вроде семантического рабочего стола\семантической оболочки ОС, то какую бы СУБД выбрали в качестве хранилища метаинформации? Считай это все семантические связи между типа объектов, аналитическая информация, статистика, и прочее. НО. Это десктоп. То есть объемы, а самое главное, нагрузка не серверная - клиенты лишь сами сервисы\демоны одного пользователя\может пары девайсов, с учетом шаринга информации между ними. При этом есть потребность хранить\отслеживать отношения (следовательно можно задуматься о рдбмс), в тоже время данные - это в сущности объекты ссылающиеся друг на друга и храняшие друг друга (можно задуматься о графовых бд), есть так же потребность в атомарности записей, а потом приходится сомневать насчет носкюл-решений, ведь придется городить ее поверх.
Есть кому что сказать?
SQLite?
Есть допустим таблица сообщений от пользователей.
id userId text timestamp
Какой селект написать, что бы выцепить по последнему сообщению каждого юзера? Желательно с пояснением, что бы я смог запомнить принцип работы и больше не тупить на этом, потому что уже второй раз сталкиваюсь с подобным, и совсем не помню как решал в прошлый раз :(
Спасибо, думал что там всё немного проще, а оказывается такие вот сложности для типовых решений.
Можешь сохранять дату последнего сообщения отдельно, например, колонку заведи в таблице пользователей. Небольшие издержки при вставке, но зато не надо лопатить большую таблицу.
Пиздец. У меня бугурт с твоей нормализации. 8 нормальная уровня pr, блядь
Делается по max(id сообщения). Индекс "user_id, id desc"
если твоя субд умеет в over, то
select select id, userId, text, timestamp from (
select id, userId, text, timestamp,
row_number() over (partition by userId order
by timestamp desc) as rn
from tbl_message
) m
where rn = 1
Если не поддерживает, тогда нужно вытаскивать через самоджойны, но это не гарантирует тебе того, что ты получишь по 1 сообщению на каждого юзера:
select id, userId, text, timestamp
from tbl_message tm
inner join (
select userId, max (timestamp) as max_ts
from tbl_message
) max_t on tm.userId = max_t.userId and tm.timestamp = max_t.max_ts
Как будто денормализация - что-то плохое.
Разумеется, можно и как ты говоришь сделать и еще другими вариантами. От контекста и условий зависит, от количества записей, которые он выгребает, какие у него джойны еще там есть.
Я подъебнулся, кстати, не дату, а id, конечно.
Если ему нужен текст или дата, то в твоем варианте ему два раза надо к таблице сходить, а в моем - один.
А так мне нравится вариант с not exists, сразу все поля из таблицы получаются.
Иногда аналитическая функция удобна, вариантов масса.
Есть где почитать, где стоит использовать денормализацию? А то то как с ооп, если все денормализовать, получится неподдерживаемая хуета вместо базы, если все нормализовать - тоже не есть гуд.
Я вот помню вкатился когда на первую работу, увидел там базу из несвязанных таблиц и с горящими глазами давай её связывать.
В итоге это всё было нахуй не нужно и когда ты пытался что-то из какой-то таблицы вычистить, то у тебя только сыпались эроры, что нужно вот еще вот то говно вычестить перед этим, потому что в том говне сидит id этого говна. И на этом собственно всё.
Полагаю что в огромных реально проектах это роляет, но когда у тебя простая система таблиц из: юзеры, сообщения юзеров, балансы, посты, картинки, объявления, лог_действий_юзеров ну и максимум еще пара таблиц, то там в принципе наплевать.
Кто-то на работе сталкивался с реальной необходимостью?
Суп, аноны. Думаю писать чатбота который будет анализировать сообщения в чате, потом сопостовлять по регексу с набором разнообразных заготовок вроде "[Заорал|Орнул в голосину|Проорал]" и другими условиями вроде время>22:00 и отвечать "Какого дьявола ты здесь ШУМИШЬ!", ну в зависимости от сообщения.
Имеет ли мне смысл изучать для такого базы данных?
Как вообще пишется бэкенд для всяких "умных" чатботов?
Для тебя есть монгодб.
Базы данных здесь вообще не нужны. У тебя всё равно будет линейный перебор по всем регексам с твоим алгоритмом. Ну разве что ты захочешь как-то хранить этот список регексов отдельно или не перезапускать бота. Тебе нужно будет просигналить как-то что обновление случилось чтобы бот заново из базы вытащил весь список.
Подскажите есть ли задачник для MS SQL Server?
sql-ex.ru
>пытался что-то из какой-то таблицы вычистить, то у тебя только сыпались эроры, что нужно вот еще вот то говно вычестить перед этим, потому что в том говне сидит id этого говна. И на этом собственно всё.
Я так понял в итоге все говно в таблицах и осталось.
https://technet.microsoft.com/en-us/library/ms186973(v=sql.105).aspx
Кешировать (сохранять) уже рассчитанные данные иногда хорошо (см. устройство хранилища 1с, например).
Но это противоречит концепции нормализации. Бай зе вей, хранить рассчитанный адрес "улица пушкена дом колотушкена" хуже червя пидора. Поэтому мы подходим к вопросу гуд практиз.
Ну можно линейно перебирать, а можно было бы взять тот же список строк, загнать в несколько потоков и уже их парсить, при этом не выгружая из памяти.
Например сходу разбить файл из 80 строк на 8 частей по 10 строк и уже эти 10 строк парсить в своих потоках. Сработает ли такой подход?
У пользователя есть поле 'coins', которое хранит кол-во монет. На сервере есть функция 'reward', которая даёт пользователю монеты (увеличивает значение coins). Нужно сделать так, чтобы нельзя было получать награду чаще, чем 10 раз в час.
Я так понял, нужно дополнительно два поля добавить. Одно поле будет счётчиком 'rewardCount'. Другое поле будет хранить дату и время 'rewardLastUpdated'.
Сработает. Но будет то же самое что и несколько независимых нод под лоад балансером, каждый из которых переваривает целые куски из 80 строк. Тебе лучше какой-то индекс построить, например разбить на слова и каждое слово искать в маппинге. Либо применить банальный парсинг с последовательным проходом по символам + префиксное дерево чтобы в один проход по тексту найти все нужные вхождения.
Тогда лучше логически отделить БД как source of truth и кэша, которые наверное лучше поместить в NoSQL. Транзакции и констрейнты вещи достаточно дорогие, но при этом необходимые.
Как разпарсить и селектнуть gender из строк?
На вскидку пробовал json_value - но не находит такую функцию. Халп.
Так как данные временные и некритичные, почему бы вообще не елозить диск понапрасну? Например если записывать в редис, можно установить определённый expire time для ключа, в твоём случае час. И просто обновлять число по этому ключу. Если больше 10, то не добавлять coins. Если ключа нет это равносильно 0. Фишечка в том что такое решение ты можешь закрутить ещё во много разных мест, например для защиты от брутфорса, и работать оно будет достаточно быстро.
Или я тупой или шутка такая. Попробую еще раз:
Есть база постгрес, в которой в одной из таблиц, кроме остальных полей редяционных таблиц есть поле в котором хранится строка json которая так выглядит:
{"age_range":{"max":57,"min":43},"gender":"male"}
Знатоки, вопрос: как мне из строки json селектом вывести в отдельную колонку (чтобы потом в цсв выгрузить) gender
Посоветуйте гайды по MongoDB и Mongoose
Ридонли права я АНАЛитик, хотя и локальная мини-копия есть, но не хочу перезапускать репликацию.
Челик, ебани пожалуйста на твиче стрим как вывести кеш на редис с рдмс.
Мы подонатим всем тредом если покажешь сиськи
http://000webhost.com/
и работайте оба с ней через phpmyadmin (у вас mysql база надеюсь)
Пускай друг порты откроет у себя.
В общем мне надо провести работу по документированию mysql базы, описав её структуру в doc (см пик).
Пытался сделать через HeidiSQL, но это зараза хоть и отображает то что надо (см тот же пик) , но при копировании вставке выдаёт блин опять таки структуру в виде "create table".
Прошу помощи - есть ли какие-то программные средства не вносить вручную в таблички doc структуру mysql таблиц?
1. https://dev.mysql.com/doc/refman/5.7/en/show-columns.html
2. Можешь попробовать экспортнуть в csv:
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'my_database' AND TABLE_NAME = 'my_table';
Потом открыть его экселем и копировать в ворд. Но имхо, гемороя только добавится.
Выгрузить ддл же. Ты получишь огромный sql файл. ( по хорошему выгрузи сначала таблцы) и в ручную замени величины на те, что есть в постгресс, потом так же делай с триггерами, и прочим.
Функции переделывать придется полностью скорее всего.
А потом комплияй и прочее.
В вики постгре есть тулзы для миграции, тебе не пойдут?
Да нет другого решения. Все крутится вокруг одного - выгружаешь описание схемы из MySQL (DDL - скрипт, анон выше про то же самое пишет) и загружаешь в postgresql. Другого глобуса у нас нет.
Можно поискать утилитки которая отрежет MySQL -специфичные штучки, чтобы получился максимально простой DDL. Можно самому написать выгрузку из словаря MySQL, можно найти готовые скрипты выгрузки и допилить их чтобы лишнее не выгружали.
Попробуй Navicat. Если веб макака, то у Jetbrains тоже есть инструмент для построения диаграмм.
Мне кажется твое рождение - это ошибка.
Так добавь туда пару миллионов записей и не еби нам мозги.
Попробуй Tutorial D.
Запусти приложение в поток двадцать, которое будет инсертитб, селектить, апдейтить какую-нибудь хуйню постоянно. И залей миллион записей.
В MSSQL можно через CROSS APPLY.
сначала попробовал через mongoose, но там запрос не отрабатывал как надо, потому полез в консоль руками пробовать.
но возникла проблема - монга не выполняет команду, будто она не завершена, хотя запрос полностью написан, но она только новую строку создает чтобы ввести символ. если введешь - ошибка лишнего символа
заметил что это только тогда, когда я использую $gte или $lt, вплоть до того что пытался выполнить следующий запрос:
db.collection.find({time:{$gte:"2018-03-26T18:38:00.457Z"}})
посоветуйте плз что сделать или ткните в ошибку
Очень годный тред, хотелось бы ваш совет.
Я уебываю со своей работы (аналитик) и хочу вкатиться к вам. Хуйня в том, что я не особо секу за направления. То есть я знаю, что разработчик бд-чаще всего пилит etl (надеюсь все верно), а еще есть администратор бд. У меня есть порядка пары месяцев на изучение документации и погружения. Знал когда-то неплохо sql и вот думаю про изучение tsql с установкой mssql и работы. Куда податься? Админ, разраб? Конечно, хотелось бы больше зп, но вангую, что на мне розовые очки и вообще хуй меня кто возьмет.
Спасибо!
У тебя каша в голове, братишка. Какое сообщение? Откуда вывоилось и куда? Сравниваются - это "равняется" или больше/меньше? А если не равны, то что? Хорошо сформулированный вопрос - залог успеха!
select
столбец1
, столбец2
, N'сообщение'
from таблица
where столбец1 <> столбец2
это если твои столбцы в одной таблице. Если в разных, надо использовать join.
Есть SQL база данных postgres и mysql вся хуйня, что требуется реализовать для двух баз данных, заказчик хотел ещё mssql но я убедил, что ему она не нужна. Выбора между двумя более чем достаточно
Есть таблица в которой есть три числовых поля условно A, B, C, есть и другие поля но они нас не интересуют.
Мы вставляем в таблицу данные при этом мы знаем значения для полей A и B, в C мы должны вставить инкрементальное значение. Сложность в том, что счётчик должен быть уникален для каждой пары A и B
то есть вставляем
(0, 0, ?) => (0, 0, 1)
(0, 0, ?) => (0, 0, 2)
(0, 0, ?) => (0, 0, 3)
(0, 1, ?) => (0, 0, 1)
(0, 1, ?) => (0, 0, 2)
(0, 0, ?) => (0, 0, 4)
(7, 9, ?) => (0, 0, 1)
(0, 1, ?) => (0, 0, 3)
(0, 0, ?) => (0, 0, 1)
Ну так вычисляй сам значение инкремента для пары, залочив перед этим таблицу на запись.
триггер позволяет обрабатывать данные для INSERT, через nvl ебашишь данные и всё.
гляди вот такая структура :new.stolb1 :new.stolb2 :new.stolb3 обрабатываешь через nvl, например.
create or replace trigger kartopler before insert on belorus_table
for each row
DECLARE
тут что-то объявляешь
BEGIN
if :new.stolb1 is not null ( или ебашишь обработку с nvl дабы ускорить перебор и точно не попасть в жопу)
then
if
then
belorus_kartopler1:= belorus_kartopler1 + 1;
и не забывай закрывать ветвления ENDIF
END;
Меня смущает момент генерации нового значения, так как инкремента должна расти, то нужно хранить информацию о последнем её значение в другой таблице или дёргать из этой, но в случае удаления записей счётчик может сбиться или повториться и второе насколько это будет медленно?
>>164297
Ну так это повод узнать что-то новое.
Зачем и как лочить таблицы.
Как делать триггер.
Как делать индексы на таблицу, чтобы было быстрее.
Насчет быстрее - ты ведь не финтех приложение пишешь, я надеюсь? Так что делай обычный селект для вычисления инкремента.
Насчет удаления - либо делай только пометку об удалении, либо действительно храни инкременты для пар в отдельной таблице.
Почитай теорию. Хоть не постгресс - Том Кайт с его томиком
А что с ним не так7
>>116460
Рынок же проебали.
ну пиздец, pragma ебани. Почитай про индексы. По сути ты можешь создать представление с индексами и ебашить их туда и назад, благо расширенный sql предлагает ебашить и не такое
В общем случае - никак.
В таблице нет как таковых номеров строк.
Ты можешь отсортировать таблицу по какому-нибудь критерию и взять уже в сортированном наборе строчку №5.
Топ ораклист, перекати тред.
Обнял няшу :3
не слушайте его. эти мудаки форсят и создают вокруг postgresql необоснованный хайп. только вот работать потом и семью кормить вам а не им. postgresql до оракла и mssql еще очень очень далеко технически. это во-первых.
кроме того (и что кстати куда важнее), 99% проектов с postgresql это дауны с нищеебскими задачами. не замечать этого, не догадаться логически - это надо быть идиотом. карьера постгресиста - это глупость, такого вообще бывает, (полтора инвалида на весь мир в расчет можно не брать). исключение те компании/инсталляции где покупают EDBPostgres, Citus или рашкенский PostgresPro.
> 99% проектов с postgresql это дауны с нищеебскими задачами
Проиграл с этого.
Нищеебские проекты как раз таки делают на дерьме простых субд на вроде майэскюэль.
А крупные проекты с миллионами+ записей делают на божественном постгресе. Скайп например.
Пфф, да ты, вообще, как СУБД-шник должен шарить и в мс скл, и в май скл, и в постгресе, хотя бы на уровне тех фич, которыми эти системы выделяются.
Вы видите копию треда, сохраненную 12 мая 2018 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.