Это копия, сохраненная 21 ноября 2017 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Тут мы решаем ультраважные вопросы о том, как правильно хранить динамические атрибуты сущностей: в полях или в строках,
Рассказываем, как работаем аналитиками и мечтаем стать разработчиками,
Строим АНАЛИТИЧЕСКИЕ отчеты в экселе, выгружая по миллиону строк, а потом фильтруя,
Дружно не понимаем, ЗОЧЕМ ЖИ НУЖИН ОЛАП, ЕСЛИ И ТАК ВСЕ РАБОТАЕТ ЗАЕБИСЯ,
Ищем ошибки в аббривиатурах 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к не получаем.
А так же:
Постгре или постгрес?
Май эс ку эль или мускуль?
Эс ку эль или сиквел?
В общем, это очередной баз данных тред, поехали!
120к
Анон, я вот шарю SQL(джойны, груп бай все дела), использую MySQL, и думал этого достаточно для погромиста. Но вот читал ресурсы некоторые и там к знаниям этим еще приписывают всякие нормализации, оптимизации, индексы - я не ебу что это все значит. Что почитать, чтобы расширить кругозор?
Скл.сру, там, в принципе, уже все давно разжевано:
http://www.sql.ru/articles/mssql/03013101indexes.shtml
Если ты вебер, а не разраб бд, то вполне достаточно, думаю.
Разрабу бд, как раз, все что ты написал, тоже желательно изучить.
Нормализации.
Коротко - Википедия (того, что там написано, действительно хватит для общего кругозора и вопросов на собеседовании), длинно - К. Дж. Дейт "Введение в базы данных".
Оптимизация, индексы - тут уже конкретно по интересующим тебя СУБД. Если Oracle, то это великолепный Том Кайт. Аналогов в других СУБД я не знаю. Кто-нибудь знает.
Топ вакансию вам принес. Даже интересно, сколько там платят, мне кажется заебись. Как жаль, что я не шарю ETL. А если бы и зашарил, нахуй я нужен без практического опыта работы. Похоже, мой потолок это всю жизнь писать sql-запросы.
Да просто почитай про средства ETL для оракл, и все. Если ты хорошо шаришь в БД и структурном подходе, то ты быстро освоишь.
Так и сделаю! Ща только Кайта дочитаю и буду ETL изучать специально!
Несмотря на то, что в аналитических функциях указываются v1 и v2, значение аналитической функции считается по v2.
Что за ебанутый косяк?
От функции не зависит, с sum та же история. Поодиночке отрабатывает нормально.
Для большего количества строк та же история.
Попробуй не юзать цте, положи сначала в табличку свои рандомы, а потом уже посчитай, что хочешь.
Да, спасибо. В общем-то это не самое важное в жизни.
Просто тупенько как-то выходит. Я бы ещё понял, если бы в каждом столбце свой рандом высчитывался, а так совсем фигня получается.
Кстати, если сделать прямую подстановку рандома в две агрегатные функции, он вернёт другое случайное значение, но одинаковое. А если функции разные, то и рандомы разные.
Использование хинта materialize в конструкции with заставляет отрабатывать этот вопрос так, как мне нужно. Этот хинт сохраняет результат запроса в конструкции with как временную таблицу и оперирует с ее значениями, не вызывая dbms_random в самом запросе. Жаль, что не догадался до этого сразу, только сейчас осенило.
Надеюсь, информация была кому-то полезной.
Платят одинакого зачастую.
Тут вопрос нн в том, что лучше, а в том, что интереснее.
Ну и добавлю еще, что разраб, все-таки, тоже должен уметь в администрирование.
Все вот это вот:
Фаервол-рулзы для субд,
Индексы,
Джобы
Юзеры и группы, права
Это, вроде как, дба-шная херь, но если ты, как разраб, это не умеешь, то и стоить будешь меньше.
Есть куча контор, где вообще дба, как таковой, отсутствует. Знаю, потому что сам в такой работаю.
Сам сколько в месяц в среднем зарабатываешь? Если не ДС, можешь не отвечать.
Насчёт знаний это понятно, конечно, я чисто по специальности интересуюсь, в моем понимании dba следит за тем, чтобы все работало, а разработчик реализует функционал
охуенный хинт, возьму на заметку, т.е. с ним и производительность должна подрасти, т.к. в CTE можно вынести тяжелый запрос?
Спасибо, а почему все-таки dbms_random.value выдает одно и то же значение? И как узнал про этот хинт?
Не знаю. Тонкости реализации оракла, не более. Не углублялся в вопрос. Как видишь, оракл считает, что где-то ему нужно посчитать новый рандом, а где-то воспользоваться уже просчитанным. Один хуй в реальной жизни никто не использует рандом, я тестил одну хуйнюшку и заметил случайно?
Как узнал? Хз. Один из топ используемых на работе хинтов. Не помню, что было раньше, прочитал ли я о нем где-то или пришел на эту работу и стал активно юзать.
>>1035575
Аккуратнее!
Хинт означает, что результат твоего запроса будет храниться в памяти. Если у тебя огромное количество записей, хранить его в памяти накладно. Только проебешь в производительности.
Если тебе нужно сохранить результат какого-то охуевшего запроса с охуевшим количеством строк, проще создать для него обычную временную таблицу.
Наверно, потому что это псевдорандом, во многих яп генератор рандомных чисел так сделан.
1. Банки. Это в основном отчетность и etl, зарплаты норм в ДС и ДС2. Из плюсов норм зарплата, предметная область и возможность роста.
2. Легаси-проекты, разработанные и поддерживаемые относительно крупными компаниями: системы биллинга, АБС и т.п. Возможно плюсом будет то, что заниматься придется все-таки разработкой, а не клепанием отчетиков. Из минусов - это легаси, возможно придется долго и нудно погружаться в предметку, ковыряться в говнокоде столетней давности.
3. Шаражки - все плюсы и минусы мелких компаний, проектов мало, о новых не слышал.
4. Мобильные операторы и торговые сети. Часто вижу вакансии разрабов у МТС, Мегафона, Магнита, Окей и т.д. Чем там придется заниматься? Есть предположение, что обслуживать то, что разрабатывают компании из п. 2 и отчетики как в п. 1. Подтвердите или опровергните.
5. Аутсорсеры, например Люксофт, тоже в основном легаси, но возможно есть и интересные проекты.,
Речь идет о секторе РСУБД, всевозможные nosql, key-value и прочие бд не рассматривались.
Какие перспективы видите у разработчика RDBMS?
Думал, что сначала выполняется запрос CTE, а потом результат его выполнения джойнится с другими таблицами. Дело в том, что у меня есть большая вьюха где в CTE находится рекурсивный запрос, который выводит даты начала каждого месяца начиная с текущего и до месяца двумя годами ранее, затем эта CTE джойнится в нескольких запросах, объединенных через union all.В моем случае будет выигрыш от помещения CTE в память, т.к. таблица по сути маленькая, как считаетt?
Канеш, будет, особенно, если у тебя там рекурсия, а результат мелкий - однозначно выйграешь.
Я не согласен по пункту 2. Мне доводилось заниматься поддержкой OLTP-системы. Не АБС, потому что дело было не в банке, но суть та же. Скажу, что у меня на отчетиках программирование более интеллектуальное, чем там. Обобщать на всё я, разумеется, не буду.
По пункту 4, я думаю, да, везде есть своя аналитическая отчётность.
Вспомнил про телеком. Ходил как-то на собеседование от одной днищной конторы-интегратора, которая мутит проект для топ3-оператора. Начальник, который меня собеседовал, закончил мой вуз, чуть ли не со старта сказал, что готов меня взять. А потом начал рассказывать, что проект нудный и хуевый, что карьерного и личностного роста я там не дождусь и все такое прочее. Хороший мужик.
Как попадать в аутсорс-компании мне неведомо. По ораклу все вакансии, что я находил, были в российских компаниях.
Какие перспективы тебе нужны? Психологические 100к везде можно зарабатывать, если чуть-чуть постараться. А дальше я не знаю.
Перспективы метнутся на 200к+ интересуют, подозреваю, что с такой узкой специализацией сделать это не просто. Ну и хотелось бы интересной работы, чтобы было место хотя бы немного изобретательству, пока сидел в треде, как-то пришло осознание, что sql в конкретных реализациях тоже весьма интересен сам по себе, хинты, планы запросов, оптимизация вот это все, а программирование на процедурном расширении по большей части в тот же sql упирается, только с циклами и if. Возможно стоит копать в сторону ETL и дальше развиваться как архитектор хранилищ данных, хз.
Полагаю, что только в узкой специализации можно метнуться на 200к+. А мастер на все руки, не являющийся охуенным спецом хоть в чем-то, вряд ли кому-то нужен.
Другой вопрос, насколько высок шанс поднимать такую зп, будучи разработчиком бд, по сравнению со всеми остальными специальностями. По моим наблюдениям больше 200к зарабатывают только на руководящих должностях, причем не начальники отделов, а повыше.
Впрочем, опыта у меня немного и, возможно, я просто попадал не в те конторы.
Посмотрим.
Хочу до посинения дрочить и углубляться в БД.
Да господи, только даун будет говорить про зп В Гросс, нахуя это нужно, вообще?
Я лично говорю всегда только о чистяее.
У тебя будет 120к чистыми? Респект...
Плохая идея. Не будешь ты иметь там много денег.
Помимо бд советую какой-нибудь бэк-енд базис иметь, если мс скл, то сисярп (асп нет), если оракл, то ява, если май скл, то пыха.
Вот с такими знаниями ты наверняка будешь дорого стоить.
Может быть я и двину в эту сторону.
Но у меня нет цели быть великим программистом, я хочу быть лучшим специалистом по базам данных в России.
Опа надо обоссать за создание колонки, фуллскан таблицы с ее заполнением, созданием индекса, удалением строк с этой заполненной колонкой и удалением колонки вместо одного простого dml с удалением строк.
Заниматься придется в том числе etl. На месте уже уточню, что конкретно будет и в каких пропорциях.
Сказали, что мои охуевшие зарплатные ожидания они не удовлетворят, но 130-140к(gross) максимум готовы дать. На 140 буду согласен, конечно, главное, чтобы это не вылилось в стандартное "давай ты сейчас да мелкий прайс повъебываешь и мы тебе через годик 140к дадим".
Там один хуй фуллскан таблицы при обновлении.
Есть таблица, в одной из колонок которой хранятся размеры файлов в байтах.
Суть в том, что надо вытаскивать данные о том, какое количество файлов имеют размер меньше заданного, причём делается это для большого количества границ. Например, если максимальный размер 10МБ, то надо вытащить <2, <4, <6, <8, <10.
Сейчас это сделано селектом в цикле со стороны приложения. Таблица большая (20к строк, на слабом железе) и это работает достаточно медленно.
Так вот, как можно оптимизировать эту операцию, анон?
Привет, расскажи, пожалуйста, подробнее, чем занимается контора и каковы твои обязанности, кроме etl?
Сап, т.е. в цикле примерно такой
запрос:
select count(id)
from table_name
where size_b < n,
где n с каждой операцией увеличивается?
Привет.
Контору не хочу деанонить, а о непосредственных обязанностят и работе я лучше расскажу после собеседования.
Да, прямо такой и есть.
>ного, причём делается это для большого количества границ. Например, если максимальный размер 10МБ, то надо вытащить <2, <4, <6, <8, <10.
>Сейчас это сделано селектом в цикле со стороны приложения. Таблица большая (20к строк, на слабом желе
>>1036096
или имеется в виду, что в цикле при заданном размере файла
считается отдельно количество файлов размером <2, <4, <6 и так до n
с шагом 2?
Шаг фиксированный, задаётся при старте приложения.
БД - MariaDB + H2 тоже должна работать.
>>1036100
Есть некий шаг, который задаётся в приложении. После чего считается количество файлов, удовлетворяющих <STEP, <2STEP, <3STEP, ... и так до тех пор, пока NSTEP будет больше максимального размера файла.
Если у тебя мало разбивок и они фиксированны, то
select sum(1), --всего
sum(case when value < 4 then 1 else 0 end),
sum(case when value < 6 then 1 else 0 end), sum(case when value < 8 then 1 else 0 end)
from t
Некрасиво, но как минимум один запрос, один скан таблицы, одна группировка.
Если много произвольных значений, то надо думать
Нахуй тебе множество < и or между ними? Делаешь индекс на размер файла и хуячишь каунт айдишника с размером меньше верхней границы.
Потом джой.
Это нихуя не отптимально по производительности (ну может только чуточку оптимальнее, чем N запросов), зато одним запросом.
Искренне ваш,
топ-ораклист
В одном конкретном обращении к бд всегда один < n? (без хуйни с < 2 < 5 < 10, как ты выше написал)
Делай индекс и обзапрашивайся - будет range scan по индексу.
>>1036102
вот решение для оракла, попробуй cte для maria db переписать
with tn as (
select 2level size_b
from dual
connect by 2level <= (select max(size_b) from table_name)
)
select
tn.size_b,
sum(case when t.size_b <= tn.sizeb then 1 else 0 end) files_cnt
from
table_name t inner join tn on t.size_b <= tn.size_b
олсо ссылка на рекурсивные запросы:
https://mariadb.com/kb/en/mariadb/recursive-common-table-expressions-overview/
Цикл не нужен для этого запроса, но тут может быть просадочка, если n большое, т.к. cte джойнится по условию, зависящему от n. Индекс на t.size_b будет не лишним, думаю.
Все бы ничего, но в твоем иерархическом запросе отсекается последняя нужная граница.
То есть если в таблице максимальное значение 9, то твой запрос посчитает значения меньше 8, а суммарное количество записей не посчитает.
Так что d коннекте меняй level на level - 1
не обратил внимание, но и с level-1 будет неверно, т.к при n = 9 и level-1 = 4, 2level = 10, т.е. посчитает больше чем нужно.
Можно оставить level в connect by и отедльно union all добавить хвост от 8 до 9
Расстрелять.
То есть ты приходишь в тред, люди тебе что-то предлагают, стараются, хотят помочь, а ты потом пишешь "похуй, не буду ничего делать, всем спасибо". Это нормально вообще?
Нахуй ты вообще свой вопрос задал, если тебя всё устраивает?
Почему не буду ничего делать? Повешу индекс и буду радоваться жизни, как посоветовал >>1036110
>>1036103 не подходит, потому что разбивка не фиксирована.
>>1036109 сам написал, что его решение неоптимально по производительности, да ещё и, судя по всему, под другую БД.
>>1036112 практически такое же решение, с теми же проблемами.
предпоследний пост сказал, что это в любом случае оптимальнее дохуилиона селектов.
последний пост тебе даже дал ссылку на иерархические запросы в твоей бд
НЕНЕ ПАЦАНЫ ХУЙНЯ КАКАЯ-ТО СПАСИБО ЗА ПОМОЩЬ Я ЛУЧШЕ БАЗУ ПОЕБУ ЩА ИНДЕКС НАВЕШУ ДЕЛА В ГОРУ ПОЙДУТ
Похуй, что синтаксис ОРАКУЛА вообще не Т-сКЛ ни разу, поебать.
>EXPLAIN SELECT cust_id, SUM(avail_balance) tot_bal
>FROM account
>WHERE cust_id IN (1, 5, 9, 11)
>GROUP BY cust_id;
просматривает все 24 строки таблицы, хотя без GROUP BY возвращает 8? Ведь если cust_id индексирован, он находит индексы этих восьми строк и работает только с ними.
Вот объяснение из книги:
После прочтения индекса ожидается, что сервер просмотрит все 24 строки таблицы account для сбора данных о доступных остатках, поскольку он не знает, что могут существовать другие клиенты, кроме клиентов с ID 1, 5, 9 и 11.
Зачем смотреть остальные доступные остатки, если уже выбрано 8 строк?
Потому что это не уникальный индекс, вот почему.
И все равно нужно просмотреть всю таблицу, чтобы убедиться, что больше нет полей с такими значениями.
понял, спасибо
Задание:
Exercise: 2 (Serge I: 2002-09-21)
List all printer makers. Result set: maker.
тлдр, есть дохуя таблиц, которые свзяанны фореин ки
Я пишу: SELECT DISTINCT maker FROM Product JOIN Printer ON Product.model = Printer.model;
Пишут что неправильно, предлагают писать так:
SELECT DISTINCT maker
FROM Product
WHERE model IN (SELECT model
FROM Printer
)
Естесна после кодакадеми я понятия не имею даже что так писать можно.
Что почитать и почему неправильно-то ?
Описание:
The database scheme consists of four tables:
Product(maker, model, type)
PC(code, model, speed, ram, hd, cd, price)
Laptop(code, model, speed, ram, hd, screen, price)
Printer(code, model, color, type, price)
The Product table contains data on the maker, model number, and type of product ('PC', 'Laptop', or 'Printer'). It is assumed that model numbers in the Product table are unique for all makers and product types. Each personal computer in the PC table is unambiguously identified by a unique code, and is additionally characterized by its model (foreign key referring to the Product table), processor speed (in MHz) – speed field, RAM capacity (in Mb) - ram, hard disk drive capacity (in Gb) – hd, CD-ROM speed (e.g, '4x') - cd, and its price. The Laptop table is similar to the PC table, except that instead of the CD-ROM speed, it contains the screen size (in inches) – screen. For each printer model in the Printer table, its output type (‘y’ for color and ‘n’ for monochrome) – color field, printing technology ('Laser', 'Jet', or 'Matrix') – type, and price are specified.
Задание:
Exercise: 2 (Serge I: 2002-09-21)
List all printer makers. Result set: maker.
тлдр, есть дохуя таблиц, которые свзяанны фореин ки
Я пишу: SELECT DISTINCT maker FROM Product JOIN Printer ON Product.model = Printer.model;
Пишут что неправильно, предлагают писать так:
SELECT DISTINCT maker
FROM Product
WHERE model IN (SELECT model
FROM Printer
)
Естесна после кодакадеми я понятия не имею даже что так писать можно.
Что почитать и почему неправильно-то ?
Описание:
The database scheme consists of four tables:
Product(maker, model, type)
PC(code, model, speed, ram, hd, cd, price)
Laptop(code, model, speed, ram, hd, screen, price)
Printer(code, model, color, type, price)
The Product table contains data on the maker, model number, and type of product ('PC', 'Laptop', or 'Printer'). It is assumed that model numbers in the Product table are unique for all makers and product types. Each personal computer in the PC table is unambiguously identified by a unique code, and is additionally characterized by its model (foreign key referring to the Product table), processor speed (in MHz) – speed field, RAM capacity (in Mb) - ram, hard disk drive capacity (in Gb) – hd, CD-ROM speed (e.g, '4x') - cd, and its price. The Laptop table is similar to the PC table, except that instead of the CD-ROM speed, it contains the screen size (in inches) – screen. For each printer model in the Printer table, its output type (‘y’ for color and ‘n’ for monochrome) – color field, printing technology ('Laser', 'Jet', or 'Matrix') – type, and price are specified.
Постгр и Мускл.
Не знаю кто тебе что там предлагает, я делал так:
select distinct maker
from product
where type = 'Printer'
Только что проверил, мой вариант остается правильным.
Насчет почитать, можешь по быстрому просмотреть https://www.w3schools.com/sql/default.asp
Да я в итоге тоже так написал, но почему с джоином-то неправильно ?
разве это не тоже самое, что и кодакадеми ? Спасибо энивей, проверю
Запустил твой пример, результат то у тебя верный, но они смотрят кол-во возвращаемых записей до DISTINCT. В таблице Printer не все связи с Product (есть принтеры без расширенного описания).
Если бы в Product был еще один maker с принтером, без описания в таблице Printers, то твой запрос бы не сработал.
Ты дурак?
select distinct maker from product where type = 'Printer';
> Естесна после кодакадеми я понятия не имею даже что так писать можно.
А хули ты там делал, если даже один простой селект написать не можешь?
>>1038046
> почему с джоином-то неправильно
А нахуй он там всрался? Там даже суррогатных ключей нету.
И у меня получается охуенно огромный список записей, которые надо ручками перебирать.
Хорошо, как мне разбить список topic сначала по user, а потом по category в циклах? Проверять на каждой итерации, не изменился ли id?
Откуда я знаю, пользуйся словарями, например.
Я придумал моднее, только результат не прошёл тест на проверочной базе. Наверное, этот прав >>1038049. Проверочная база содержит записи в Prodyct c type=printer, которых нет в таблице printer.
SELECT DISTINCT Maker
FROM Printer
LEFT JOIN Product
ON Product.model=Printer.model
WHERE Product.model IS NOT NULL
Он сам просил написать запрос с соединением.
Отменилось собеседование в пятницу, сегодня было.
НУ ТАКОЕ
Во-первых, сказали, что самый максимум по ЗП это 130к гросс. Но если учесть, что мы вообще обсуждали деньги, считаю, что все прошло успешно. Может и позовут, но на 130 я точно не пойду.
По непосредственным обязанностям тоже как-то мутно. Они хотят и разработчика dwh, и аналитика, и гей-шлюху в одном лице. Не знаю, что из этого выйдет, это может быть как очень круто, так и очень хуево.
В общем, если бы остро нуждался в работе, то пошел бы, конечно, ну а так я вспоминаю слова моей тёти "хуй на хуй менять - только время терять".
По ораклу мало спрашивали. Стандартная задача с актуальными зарплатами сотрудников. Выебнулся keep derse_rank, конечно.
Какие типы соединения таблиц знаешь? Hash join, nested loops. Как будешь маленькую таблицу с большой соединять? Маленькую в хэш.
Был задан философский вопрос, как я буду удалять дубли из очень большой таблицы? Без задней мысли возьму и удалю.
'username'@'localhost' identified
by 'xyz';
exit
mysql -u lrnsql -p;
xyz
ERROR 1045 (28000): Access denied for user 'username'@'localhost' (using password: YES)
Чому ?
ИМХО, но получение нового опыта сделает тебя куда более востребованным специалистом. Ты ведь работал только на отчетах, так?
По сути да.
Но 4 места работы за неполные два года это пиздец перебор, на меня косо смотреть будут.
Конечно, я бы ушел на какую-нибудь космическую зарплату хоть сейчас, но я и на текущей работе могу впоследствии получить и прибавку к деньгами и смену рода деятельности.
По совокупности факторов лучший вариант посидеть тут хотя бы годик, меня все устраивает.
PL/SQL
Из за NULL. Он добавляет некоторую троичную логику.
Выходит как-то так:
1. NULL = 'y' => NULL
2. NOT NULL => NULL
3. NULL != TRUE => строка не подходит
Можно написать NOT ISNULL(disabled, '') = 'y' (ещё есть COALESCE).
КОгда отправляю запрос тупо нихуя не происходит, то есть мне дальше предлагают вводить, как если бы я я точку с запятой не поставил
> SELECT emp_id, fname, lname, groups.name FROM employee
-> INNER JOIN (SELECT 'trainee' name, '2004-01-01' start_dt, '2005-12-31' end_dt
-> UNION ALL
-> SELECT 'worker' name, '2002-01-01' start_dt, '2003-12-31' end_dt
-> UNION ALL
-> SELECT 'mentor' name, '2000-01-01 start_dt, '2001-12-31' end_dt) groups
'> ON start_date = groups.start_dt
'> WHERE start_date BETWEEN groups.start_dt AND groups.end_dt;
Всё, сам разобрался, забейте
Ага, я переписал
Будто то, что ты написал, проще.
И все-таки как из большой таблицы удалить дубли?
Есть проблема. Система собирает данные по различным статистическим показателям (например, количество населения, количество преступлений и т.д). В целом, у таких данных три общих измерения: показатель, территория, календарь. Далее у каких-то показателей могут быть доп. измерения (например, вид преступления или, там, национальность правонарушителя). Соответственно, в одну таблицу фактов данные по всем показателям не уложишь. Получается, надо под каждую группу показателей, имеющих одинаковую размерность, создавать таблицу фактов? Или под каждый показатель создавать таблицу фактов (не нраица -- потенциально показателей очень много)?
Гугление наводит на теги Core / Custom Fact Table, но построить цельную картину не получается из-за отсутствия опыта.
Шарящий DBA съебал на другое место, приходится дорабатывать его начинания.
1. Почему ты считаешь, что в одну таблицу фактов нельзя все уложить? Просто берешь и кладешь без задней мысли, напротив тех измерений, которых нету у данного показателя, пишешь null, будет у тебя одна таблица фактов с кучей измерений и null-ов в них, ну и что? Советую вместо null класть -1 и в соотаетствующем измерению справочнике завести элемент id: -1, name: None
2. Далее собираешь из этого один или несколько кубов. Если один, то все показатели в него и запихиваешь, соответственно, на пересечении с измерениями, которых у какого-то конкретного показателя нет, у тебя будут стоять (-1)None, только и всего.
2.1. Можно собрать несколько кубов для разных показателей, тогда при создании куба просто исключаешь неиспользуемые измерения из модели, пользоваться проще, но сравнивать значения сложнее.
В общем, не понимаю, почему ты сразу сделал вывод, что в одну таблицу фактов все класть нельзя, если абсолютно у всех показателей есть несколько общих измерений.
Да, самое главное не написал, это немного другая концепция складирования, тут придется завести еще однл измерение самому - "Показатели", ну и соответствующий ему справочник в хранилище, так вот, id-шники показателей так же следует класть в таблицу фактов, а рядом с ними в еще одном поле "measure", класть значение этих показателей. В итоге у тебя получится до хуя строк, зато из них изи будет собираться куб. В мерах же в самом кубе нужно завести всего один элемент - Value, и все значения из таблицы фактов класть на него. Если не понял, могу нарисовать схему. Эта методология используется в финансовых системах, например в Prophix, так что это не моя говнокостыльная придумка.
>Почему ты считаешь, что в одну таблицу фактов нельзя все уложить?
Я так не считаю, просто мне не нравится такой подход. Вроде есть ограничение на количество столбцов? В итоге можно в него упереться, когда количество измерений перевалит за этот порог. В перспективе пока видится не так много измерений, конечно, но хочется от такого всё-таки обезопаситься. У нас система и так переживает уже, наверное, третье рождение, из-за того, что люди не смотрят в завтрашний день.
>Да, самое главное не написал, это немного другая концепция складирования, тут придется завести еще однл измерение самому - "Показатели", ну и соответствующий ему справочник в хранилище, так вот, id-шники показателей так же следует класть в таблицу фактов, а рядом с ними в еще одном поле "measure", класть значение этих показателей. В итоге у тебя получится до хуя строк, зато из них изи будет собираться куб. В мерах же в самом кубе нужно завести всего один элемент - Value, и все значения из таблицы фактов класть на него.
Я понял, т.к. прототип в таком виде сейчас и есть, от этого и отталкиваюсь.
>В общем, не понимаю, почему ты сразу сделал вывод, что в одну таблицу фактов все класть нельзя, если абсолютно у всех показателей есть несколько общих измерений.
Потенциально у нас тысячи показателей (аналог -- гос. система ГАСУ), многие из которых опираются на кастомные справочники. У этих данных в общем случае всего 3 общих измерения: справочник показателей, справочник территории, календарный справочник. Даже меры у них не всегда одинаковые, т.к. в одном случае у одного показателя аддитивная мера (например, кол-во родившихся за календарный период), а у другого -- нет (например, количество населения, зарегистрированное на календарный период). При таком раскладе я не вижу, как это всё можно сложить в одну таблицу фактов. Но, повторюсь, я не DBA ни разу, так что могу ошибаться.
>Я не DBA ни разу
А DBA и не должен в этом разбираться, если что, это вопросы к аналитикам.
>В перспективе видится не так много измерений.
Ну так и отталкивайся от задачи, не старайся уходить в максимальную абстракцию.
Я бы сделал, как написал в прошлом посте, если бы видел совсем различные измерения для показателей, то сделал бы разные таблицы фактов, что тут думать, надо брать и делать, а не сиськи мять.
>Тысячи показателей
Ну так ты же их и пишешь в 2 поля, а не в тысячу, так что все збс.
Делаешь, смотришь, как работает, если всех устраивает, то и збс.
Ну да, чувствую, что в итоге сделаем с минимумом таблиц фактов. Спасибо.
Ещё фишка в том, что BI-инструментарий у нас хотят свой. Точнее, давно уже есть некое его подобие над старой схемой, но оно говно, и не в последнюю очередь из-за того, что старая схема не позволяет строить гибкие запросы (шутка ли, из всего множества значений выбрать значения показателей, у которых в контексте есть, скажем, Москва и 2015 год -- это из разряда фантастики, т.к. по словам DBA для этого нужно провести какие-то транспонирования/перевёртывания и прочий БДСМ).
Конечно, не всё так плохо: аналитики используют SAS Visual Analytics, но там данные в другой, более феншуйной схеме. Но в целом вектор взят на отказ от вражеского ПО (гос. контора): опенсорс БД (досвиданья оракл, здравствуй постгре), свои аналитические инструменты и прочее. Поэтому для меня как для разработчика это всё больной вопрос, на самом деле, и вроде как и хочется быстрее с ним покончить, но, с другой стороны, если сделаешь хуйню, то потом переделывать весь стек (чем, собственно, мы сейчас и заняты).
>шутка ли, из всего множества значений выбрать значения показателей, у которых в контексте есть, скажем, Москва и 2015
Mdx же есть и функции фильтрации измерений.
А так же возможности создавать статичные Set-ы.
Зависит от степени vendor lock-in, которая складывается в основном из объёма логики, написанной на PL/SQL (хранимые процедуры, утилитные скрипты), и количества эксклюзивных фич в используемом инструментарии (BI tools, Administration tools). Для великовозрастных систем перекатиться может быть крайне сложно.
Вопрос о необходимости для каждого свой. Например, для гос. контор это скорее риторический вопрос -- сказали "Надо", значит, надо, и не ебёт.
Если ты имеешь в виду перекат из PL/SQL разработчика, то это вопрос изучения другого SQL-диалекта и сопутствующей инфраструктуры (те же самые инструменты администрирования). Думаю, тоже не особо приятное занятие.
Заебывает проверять каждый раз...
Если не найду, как это сделать, придется после каждого выполняемого куска писать себе отправку сообщения на почту...
>отправку сообщения на почту
Ты что, одновременно по миллиарду запросов пишешь?
И что за запросы такие, результатов которых ты ждешь настолько долго, что сворачиваешь окошко?
Что не так с этим запросом ?
You can't specify target table 'Person' for update in FROM clause
Это типа про сабквери или чего, я не понимаю
Да, я это уже изменил, думал тут вообще никого нет, я немного с заданием проебался
задание удалить всё повторяющиеся емейлы из таблицы, но так чтобы остались с меньшими айдишниками. И там блять на второй проверочной таблице сначала вставляют id=2, а потом id=1
Почему моя уебищная хуйня не работает, может кто объяснить ?
моя уёбищная хуйня вот
>>1049848
Не ебу что ты там в пейстбине насрал, но это элементарно делается с оконной функцией.
хуй знает что это, но я таки допилил свое говно до ума, а они решили через джойн самому себе
Есть таблицы epolis (epolis_id - первичный ключ), contracts (
contract_id - пк), transport(transport_id - пк).
В contracts - реквизиты договора на обслуживание, строго локальная версия. в epolis -
реквизиты страхового полиса, это таблица по сути - локальная версия данных из другой базы, в transport - параметры транспорта(год выпуска, цвет, объем двигателя, номер паспорта, регион регистрации и т.д.), может апдейтиться данными из внешней БД, значения параметров также передаются во внешку при необходимости, также может изменяться локально, без передачи данных. В текущей схеме на первой пикче связи с epolis и внешней информационной системой нет, историчность параметров транспорта не поддерживается, все параметры транспорта в одной таблице. Требования следующие: нужно реализовать историчность параметров транспорта и интеграцию с внешней ИС, таким образом, чтобы измения таких параметров как цвет и мощность двигателя (их больше, но не важно) можно было исторично закрывать в случае изменения и, по желанию, передавать во внешнюю ИС.
Аналогично с параметрами номера паспорта и региона регистрации, но для них есть ограничение, изменения во внешнюю среду передаются только при создании нового полиса или изменнении старого. Другими словами апдейт вступает в силу, только если данные, хранящиеся в epolis, успешно переданы во внешку. Т.е. эти параметры транспорта зависят от полиса, но являются параметрами ТС.
На второй пикче решение, подскажите, как это примерно реализовать или в чем ошибка? Тупо добавил start_date и end_date, из минусов то, что при изменении только лишь цвета придется закрывать всю запись.
Вообще там ебанутая ситуация, т.к. внешних источников два и они оба теребят одни и те же таблицы, при этом друг о друге ничего не знают. И еще проблема, например пользователь поменял номер паспорта транспорта, эти данные нужно сохранить локально, но внешняя ИС не приняла полис, а соотвественно и изменения сведений транспорта, и их нужно как-то откатить как это можно реализовать?
Есть таблицы epolis (epolis_id - первичный ключ), contracts (
contract_id - пк), transport(transport_id - пк).
В contracts - реквизиты договора на обслуживание, строго локальная версия. в epolis -
реквизиты страхового полиса, это таблица по сути - локальная версия данных из другой базы, в transport - параметры транспорта(год выпуска, цвет, объем двигателя, номер паспорта, регион регистрации и т.д.), может апдейтиться данными из внешней БД, значения параметров также передаются во внешку при необходимости, также может изменяться локально, без передачи данных. В текущей схеме на первой пикче связи с epolis и внешней информационной системой нет, историчность параметров транспорта не поддерживается, все параметры транспорта в одной таблице. Требования следующие: нужно реализовать историчность параметров транспорта и интеграцию с внешней ИС, таким образом, чтобы измения таких параметров как цвет и мощность двигателя (их больше, но не важно) можно было исторично закрывать в случае изменения и, по желанию, передавать во внешнюю ИС.
Аналогично с параметрами номера паспорта и региона регистрации, но для них есть ограничение, изменения во внешнюю среду передаются только при создании нового полиса или изменнении старого. Другими словами апдейт вступает в силу, только если данные, хранящиеся в epolis, успешно переданы во внешку. Т.е. эти параметры транспорта зависят от полиса, но являются параметрами ТС.
На второй пикче решение, подскажите, как это примерно реализовать или в чем ошибка? Тупо добавил start_date и end_date, из минусов то, что при изменении только лишь цвета придется закрывать всю запись.
Вообще там ебанутая ситуация, т.к. внешних источников два и они оба теребят одни и те же таблицы, при этом друг о друге ничего не знают. И еще проблема, например пользователь поменял номер паспорта транспорта, эти данные нужно сохранить локально, но внешняя ИС не приняла полис, а соотвественно и изменения сведений транспорта, и их нужно как-то откатить как это можно реализовать?
Я, к сожалению, ничего конкретного не скажу, т.к. не DBA.
Почитай про Dimensional Modeling и/или Data Vault. В случае с Dimensional Modeling (а на второй пикче -- это практически звезда по этой методологии) у тебя транспорт -- это slowly changing dimension. Нужно только определить тип исходя из условий задачи (надо ли хранить историю, насколько часто обновляются элементы измерения).
Неплохой обзор практик, связанных с Dimensional Modeling, можно посмотреть здесь: http://www.kimballgroup.com/data-warehouse-business-intelligence-resources/kimball-techniques/dimensional-modeling-techniques
В случае с Data Vault хуяришь изменяющиеся атрибуты в отдельный сателит/сателиты, а дальше я ещё книгу не дочитал. Но в целом, там архитектура располагает к ведению истории.
Это скорее задача девелопера - проектирование схемы данных, ок, спасибо, хотя у меня OLTP - база.
Триггеры не очень подход в данном случае, т.к. в приложухе повсеместно используется версионность start_date и end_date и вообще по рукам побьют.
>Ты ведь знаешь что такое транзакции?
Да, конечно, но смотри какая ситуация получается:
У пользователя есть форма с кучей полей транспорта, при этом есть скажем вкладки с прочей инфой о страховщике и т.д., все это представляет собой документ, который после заполнения передается во внешку. Поля транспорта, например, такие: цвет, мощность двигателя, регион регистрации, номер паспорта тс. Так вот задача в том, чтобы при сохранении промежуточных значений на форме параметров ТС во внешку уходили только данные о мощности двигателя и цвете. А остальные поля только при передаче всего документа.
Т.е. получается нужно какое-то время хранить черновик записей в БД, и только потом сохранить эти данные как новую версию, а старую закрыть, другими словами между транзакциями нужно сохранять данные (т.к. любые сохраенные на форме изменения коммитятся в локальной бд), а потом делать логический "коммит" - создавать новую версию.
Может забить и тупо версию открывать и закрывать при каждом апдейте таблицы, если меняются значения параметров? Без оглядки на то, что данные еще не передались. В конечном счете, мы храним у себя только историю изменений, т.е. актуальную локальную копию данных, которую потом используем в качестве подстановки в форму.
Посоветуйте, пожалуйста, может есть какие-то маст-рид книжки по интеграции между ис или проектированию схем данных, интересуют именно конкретные подходы, проблемноориентированные, анон выше советовал уже по dimensional моделлинг.
>Т.е. получается нужно какое-то время хранить черновик записей в БД, и только потом сохранить эти данные как новую версию, а старую закрыть, другими словами между транзакциями нужно сохранять данные (т.к. любые сохраенные на форме изменения коммитятся в локальной бд), а потом делать логический "коммит" - создавать новую версию.
юзай Read uncommitted, добавь флаг в табличку с записями: is_confirmed bit, как только ты считаешь, что юзер ввел все (типа нажал сохранить"), ставь is_confirmed = 1 и отправляй, куда хочешь.
Given a Weather table, write a SQL query to find all dates' Ids with higher temperature compared to its previous (yesterday's) dates
Таблица собственно состоит из id, date, temperature
SELECT b.id as Id FROM Weather b WHERE b.temperature > (SELECT c.temperature FROM weather c WHERE c.date+1=b.date)
Что блять не так я вообще понять не могу.
https://leetcode.com/problems/rising-temperature/description/
select
Weather.Id
from Weather
join Weather as Second on subdate(Weather.Date,1) = Second.Date AND Weather.Temperature > Second.Temperature;
А чому бы не
SELECT DISTINCT maker
FROM Product pd
WHERE EXISTS ( SELECT 1
FROM Printer WHERE pr.model = pd.model)
Явный left semi join же
Сап, программач. Джва года ждал этот тред. Сейчас работаю в мухосрани разработчиком отчетности. По факту пишу огромные sql запросы по внутренним процессам организации. Обычно это отчеты для внутреннего портала и запросы для единичных выгрузок.
Также пишу функции и процедуры для внутренних процессов. Оче редко занимаюсь архитектурой баз, пару раз всего проектировал несколько таблиц. Иногда занимаюсь оптимизацией сложных запросов. Смотрю немного план запроса и выстраиваю индексы. Иногда занимаюсь СКИПТРЕЙСИНГОМ.
Все это пилится на MS SQL.
Так вот у меня к вам несколько вопросов:
1) Я считаюсь программистом по факту если пишу на SQL?
2) 30к это норм для такой вакансии если я в мухосранях?
3) Есть возможность с подобными скиллами перекатиться в ДС на зп тысяч в 60 со старта? Еще могу c++/c# простенький класс написать. Есть вышка магистра матфака.
Ты считаешься разработчиком корпоративной отчётности. если ты не шаришь в архитепктуре, то разработчиком баз/хранилищ данных тебя назвать сложно.
В ДС можно перекатиться и на 100 тыщ с теми скилами, которые ты описал, если, конечно, ты все делаешь правильно, пишешь оптимальные запросы, а не такие, как в ОП-пике.
Если умеешь в оптимизацию, чтение чужого кода, чтение плана запросов, принципы работы индексов, то втройнемолодец.
Хотя у меня в конторе работают олухи, которые пишут говно, но сотку, всё равно, имеют. советую перебиратсья в ДС, снимать тут хату за 30 и искать работу в районе соточки, будешь в шоколаде, удачи.
Что можно почитать, чтобы научиться читать планы запросов и вообще оптимизировать?
Нет. Ты ничего не разрабатываешь. Максимум дата аналист.
Да. Ты разрабатываешь функции и процедуры.
Если при этом работаешь с контролем версий, делаешь код ревью и вообще няша, то можешь назваться разработчиком БД.
Олсо, топ-ораклист-кун на запросах 120к поднимает, делай выводы.
Прикол в том, что админить его сложно, искать спецов сложно, вот и все.
А так классная штука.
Да блин,что угодно, просто гугли "ms sql plan", находи хабру, msdn, разбирайся, дай бог, в гугле не забанен.
Сакральный смысл оп-пика в удалении самой ранней записи?
Аплодисменты!
Как говорится, если знаешь способ лучше, предложи, мы его рассмотрим всем тредом. Есть только одно условие, нужно, чтобы он был запоминающийся.
Ты имеешь в виду легкость в освоении или специфичный sql, который в BI применяется?
Имею в виду с упором на оперирование данными, без технических тонкостей о проектировании бд, и прочей подобной информации.
Это отличный совет! При установке я ставил en us utf а этот пидор мне поставил en us 1251. Вроде как можно создать базу с отличными настройками локали от дефолтных. Я пытался. Но мне сказали что такой локали не существует. Как можно посмотреть существующие локали? Напомню что у меня шиндоуз 8.1
Ну тип любой базовый курс по базам, если нашёл.
все зависит от объема, думаю в минимальном объеме нужно освоить селект, условие where, group by, having, join разных видов,операторы union, in, exists. Агрегатные функции: sum, min, max. DML зачем аналитику? оптимизация тоже мимо и архитектура.
Как думаете, триггеры в оракле запускают автономную транзакцию или нет?
Если у меня триггер висит на таблице бефор инсерт, в транзакции я делаю инсерт в эту таблицу, смогу ли я операторать в триггере с данными, которые появились в этой транзакции в другой таблице?
Привет, а ты хорош. Устроился на 100к, теперь сижу, чешу репу думая над вопросом. Автономку в триггере можно использовать, прозреваю здесь подвох в мутации таблицы - т.е. нельзя изменять данные в таблице, на которой висит триггер. А так вроде нет противопоказаний для автономок. В условии второго вопросаподразумевается, что в транзакции выполняется инсерт в две таблицы, и на одной из них висит триггер before? Думаю, если сначал происходит инсерт в таблицу без триггера, то эти эти новые данные уже можно использовать в триггере другой таблицы. Без гугла, если че.
ORA-06502: PL/SQL: ошибка числа или значения.
Чому так? Ведь в цикле берется часть клоба, не превышающая максимальный размер varchar2. База если что в utf-8.
В пограммировании я 0, так что строго не судите
Ребята хэлп.
Есть база SQLite 3 версии, есть там таблица и куча данных в ней, например
100.test.net
101.test.net
102.test.net
И тд
Как мне одним махом заменить test.net на test.org во всех строках? Руками редактировать не реально там более 3к строк, желательно в какой нибудь проге под винду. Пробывал в SQLite expert но нехрена разобраться немногу, получается только руками каждую строку отдельно.
Желательно что бы как в текстовом редакторе, типа: найти > заменить все
))
Где мне это вводить?)))
Я потому и просил прогу под винду или какие то подробные инструкции для ламеров
помогли в соседней теме, твоя команда должна была подойти, спасибо
Посмотрел пакет SYS.STANDART в нем SUBSTR перегружается для строки в CLOB и возвращает тоже CLOB, а utl_raw.cast_to_raw требует varchar2. Похоже в случае, если символов в p_env не больше 32767, то вызывается версия SUBSTR возвращающая varchar2, а для большей строки возвращается clob. Но тогда почему ошибка связанная с числом?
Допустим, я сделал таблицу и в ней столбец col1 - INTEGER
в него можно внести и целое число, и текст. Если в часть строк будет внесён текст, а в часть целые числа, может ли это вызвать какие-то ошибки ? Мне пока нужно только сумма подсчитывать, и функция SUM считает только сумму строк с числам, то есть работает так, как мне надо. Но мало ли что.
Использую Python и SQLite
Ты не можешь заполнить integer текстом,
Ты только можешь написать запрос на инсерт с цифрами в кавычках, типа '1'
Но инсертиться все равно будут числа.
На ресурсе http://sql-tutorial.ru/ru/book_simple_select_statement/page1.html
употребляются термины - "Вертикальная проекция таблицы", "вертикальная выборка". Что это означает? Не могу уловить суть.В других учебниках еще не рылся, может кто-то из анонов на понятийном уровне разъяснит, чем отличается вертикальная выборка от горизонтальной. А я пока пойду дальше теорию читать да упражнения делать
Судя по контексту, имеется в виду выборка без условия where. Т.е. "прореживаем" таблицу только по вертикали, указывая колонки в select. Может термин из реляционной алгебры.
>>1058645
>>1058776
Решил проблему, может пригодится кому. Нужно было уменьшить количество символов возвращаемой подстроки в substr(p_env, i, 32767), т.к. если символов было 32767, то длина строки в байтах могла превышать 32 кб. Подозреваю, что в p_env были символы занимающие больше одного байта, т.к. база в юникоде.
в mysql3 вставляется. Вопрос в том, какие ошибки из-за этого могут вылезти ?
--------
Query executed successfully: UPDATE total SET vsego='нет данных' WHERE ok=999 AND god='2014/2015' (took 1ms, 1 rows affected)
---------
Может все-таки происходит неявное приведение к чилсу? Это же вообще по пизде идет типизация данных при таком подходе
FIX это sqlite3
возможно дело вот в чём
https://sqlite.org/datatype3.html
------
Any column in an SQLite version 3 database, except an INTEGER PRIMARY KEY column, may be used to store a value of any storage class.
All values in SQL statements, whether they are literals embedded in SQL statement text or parameters bound to precompiled SQL statements have an implicit storage class.
Under circumstances described below, the database engine may convert values between numeric storage classes (INTEGER and REAL) and TEXT during query execution.
------
У нас препод поднимал университетский сервер (видимо на железе, которое стоит в универе) и всем студентам сделал аккаунты и базу данных, что бы они заходили туда и тренировались на них
Короче, мой аккаунт просрочен:
A database warning was encountered performing the requested operation:
ORA-28002: дата действия пароля ист
28002. 00000 - "the password will expire within %s days"
Cause: The user's account is about to expire and the password
needs to be changed
Action: change the password or contact the DBA
Vendor code 28002
пытаюсь выполнить элементарную команду,
мне выдает:
ORA-00942: таблица или представление пользователя не существует
Сами таблицы я могу спокойно просматривать, но манипулировать с данными не могу
Не хочу писать преподу, да и ответит он только когда я лично подойду и спрошу его.
Есть ли способ как-то скопировать все эти данные и создать на локальном хосте точно такую же базу данных, что бы с ней тренироваться?
Конечно есть. У препода дамп базы просишь.
Напиши преподавателю, придурок, и не мучай мозг и клавиатуру.
Возможно, что никак не отличается. В нормальной СУБД вроде MS SQL будет оптимизировано. Какой-нибудь MySQL вообще по оптимизациям слаб, можно с каким-то запросом промахнуться в этом плане.
Одна хуйня, и то, и то подзапрос, оптимизатор будет их одинакого воспринимать.
Просто у подзапроса есть свои фичи, например, использование его в outer apply в мс скл, а в сте можно юзать рекурсии.
Оп, поясни позязя, а зачем столько лишних телодвижений выполняет на оп-пике? Разве это быстрее будет, чем просто удаление по фильтру?
Когда пользователь оставляет сообщения с яблока или андроида содержащие в себе, так называемые emoji смайлы , то текст сообщения сохраняется( в бд и сответсвенно нормально выводится другим пользователям ) , a emoji смайлы вырезаются из сообщения и не сохраняются в бд. Понятно что нужно менять,кодировку-сравнение соеденения и таблиц БД на utf8mb4_unicode_ci учитывая что индексы по полям типа VARCHAR ИЗМЕНЯТ СВОЮ ДИННУ С 255 НА 191( ибо символ станет занимать 4 байта вместо трех) и прочие прелести?
Оп-пик для привлечения внимания:3 в нем наитупейший запрос для демонстраци того, насколько неоптимально иногда пишут люди.
Бро, это не так просто, т.к. еще нужно определить, какая именно программная единица запускается, я судил по тому, что выполняется в данный момент в сессии и это был апдейт таблицы, сессия лочила другие. Мне тут даже важнее знать, правильно ли я понимаю принцип работы блокировок.
Окей, принципы работы блокировок зависят от уровня изоляции транзакций, по умолчанию стоит read committed в реляционных транзакционных субд. Можешт почитать про него и понять, какие операции какие уровни блокировок вызывают.
Например, update будет лочить всю таблицу, если на ней нет кластерного индекса. Если же он есть, то лочиться будут только те строки, которые этому апдейту подлежат.
>программу для баз данных
>выебываются
Скачивай database.exe, тут в треде только понты разводят.
Вот ты иди нахуй.
Скачай MS SQL Server минимум 2015 версии и не спрашивай: 'почему?'
в го и шахматах тоже правила не сложные
Сап /pr, есть одна лаба.
Нужно из цитаты выделить предметную область, построить инфологическую модель, в общем полностью реализовать базу данных, имеющую +- 10 сущностей и как минимум одну связь многие ко многим. Офк использование той или иной сущности всегда должно быть оправдано. Мне нужна помощь с инфологической моделью, собственна сам сабж:
Первые данные оптических наблюдений поступили спустя несколько минут после сообщения "Леонова"; непосредственные контакты начались уже через считанные часы. Бывший биржевой клерк прогуливал своего бульдога по Йоркшир-Мурз, когда рядом с ним приземлился дисковидный космический корабль и энлонавт, выглядевший - если не считать заостренных ушей - совсем как человек, осведомился, как попасть на Даунинг-стрит. Представитель человечества был поражен настолько, что смог лишь махнуть тростью в направлении Уайтхолла. Истинность происшедшего подтверждал тот факт, что бульдог теперь отказывается от пищи.
Пикрелейт - моя уебищная модель, желтым выделена сущность, которую я бы хотел прицепить, но не особо понимаю как это сделать правильно, и момент в котором кажется проебалсявся модель
Возможно, лучше стержневой сущностью делать не контакт, а улицу и переделывать все ? Покидайте идей пожалуйста, что тут можно пофиксить
язык - postgre
На что тебе срок 2 дня? Модель придумать? Ты откуда такой взялся?
Обстоятельства контакта - звучит как таблица, в которую вообще всё можно запихнуть, что связано непосредственно с контактом. Связи с действующим лицом может и не быть. Например, в городе шёл сильный дождь (разве что ты в действующее лицо город вставишь, что не совсем так). Так что это скорее всего 1 контакт - много обстоятельств.
Не понятно, зачем таблица значение (контакта?) к улице. Я думаю, что это по сути тоже самое, что последствия контакта.
У контакта несколько действующих лиц, у разных контактов могут быть одни и те же действующие лица, на лицо связь N:N. В промежуточной таблице можно хранить состояние действующего лица на момент данного контакта (то, что ты хотел в обстоятельства контакта вставить, по сути это и есть обстоятельства контакта в твоём смысле).
SELECT
Таблица1.ФИО,
Таблица1.ДатаРождения,
Таблица2.Адрес
FROM Таблица1
JOIN Таблица2 ON Таблица1.ID = Таблица2.ID
table1.id, table1.fio, table1.dr
table2.id, table2.address
SELECT table1.id, table1.fio, table1.dr, table2.address FROM table1, table2 WHERE table1.id=table2.id AND table1.id=...
(или table1.id IN(......))
или
SELECT table1.id, table1.fio, table1.dr
FROM table1
INNER JOIN table2 ON(table1.id=table2.id)
WHERE table1.id=.......
Из классики - erwin.
Помогите понять как в Оракле числа прибавляются к датам.
например
сейчас 15.09.17 18:08
SELECT SYSDATE + 5
FROM DUAL
результат будет 20.09.17
а вот если
SELECT SYSDATE + 5.5
FROM DUAL
Там единица считается за 24 часа и в зависимости от того сколько сейчас времени будет прибавляться +5 дней и +12 часов, то есть 21.09.17 ???
А позволь поинтересоваться, где у тебя в таком случае будут физически храниться данные?
На компуктере же. Ну может, там надо будет указывать адрес-имя-пароль, чтобы типа как в настоящей бд.
Ну значит у тебя будет localhost, в чем проблема-то?
Не всегда можно все данные иметь на своём кампутере, представь, что объём данный настолько велик, что для его хранения нужен целый датацентр с кучей серверов
Посмотри через консоль кто занял порт, который ты указываешь и отключи потом эту службу
библиотека sqlite3, должна быть для всех основных языков. База создаётся в файле или памяти.
1521 порт, никто его не занимает.
Ну и как результат
15.09.2017 18:08 + 5.5 = 21.09.2017 06:08
а вот если
select trunc(sysdate) + 5.5 то будет 20.09.2017 12:00
Орнул
>>1062220
1.Обстоятельства контакта, это то при каких событиях произошла встреча человека и нло. там написано же, что это. ( красный текст) Про независимые природные явления в цитате не говорится, собствена поэтому я не понимаю, почему ты считаешь, что связи с действующим лицом может не быть, эта таблица по сути то, как лица столкнулись вообще.
>Так что это скорее всего 1 контакт - много обстоятельств.
Не совсем понял, о чем ты. (?)
2. Таблица значение - значение улицы в контакте.
Йоркшир-Мурз - место встречи
Даунинг-стрит.- цель контакта
Уайтхолл - результат контакта
Думаю теперь понятно, что это не одно и то же
Но вот тут меня как раз смущает, что возможно, место, цель и результат как раз нужно пилить отдельными сущностями, но тогда модель вообще другая будет, да и у меня не получилось ее так запилить
3. Годно, спасибо Пикрелейт, так? Тогда к чему лучше прицепить последствие контакта? К обстоятельствам?
>>1062396
https://go.gliffy.com/go/html5/launch
>1.
Я воспринял эту таблицу масштабнее, как контекст.
>3.
Если ты последствия относительно действующих лиц берёшь, то можно туда же запихнуть. А можно в параллельную таблицу. Тогда появится какое-то место для манёвра. Например, последствия имели влияние на других людей. Или с собакой было всё нормально, никаких последствий.
>2.
Место встречи ты уже слил в контакт. Текущая цель контакта явно зависит от времени и места, что однозначно определяется контактом. Обстоятельства контакта хорошо подходят, можно опять же отдельную таблицу сделать, которая будет зависеть от обстоятельства или непосредственно от контакта и лица.
Результат аналогично, только от последствий цепляться.
Даже если отличается- не похуй ли? Все реляционки одинаковые +\-. Знаешь одну, разберешься и с другой.
Тебе зачем? Миграция бд или просто оракл ставить не хочешь, да на орм надеешься?
В оракле по иному обрабатывается null, свой набор функций в sql-движке (nvl2, decode..), есть свой синтаксис для джоинов, который некоторые уникумы даже используют. Также всякие мелочи, вроде аналитических функций, rownum, rowid, и это я не коснулся pl/sql, aq, pipeline-функций, хранимок на джаве, xmldb и кучи dbms_*. Имхо, даже на db2 при всей его совместимости с ораклом не всё может быть гладко.
Но в целом, пока держишься в рамках стандарта, больших проблем быть не должно, помни только про null и rownum
Третья таблица с композитным ключом пользователь+мероприятие, там твои значения цифровые.
Классика- связь 'один- ко- многим'. Две таблицы:
1. Users
Колонки.
Id bigint
Name varchar 128
Comment varchar
2. Meeting
Колонки.
Id bigint
Userid bigint
MeeteengDescr varchar 256
Связь по user.id = meeting.userid
Поясни, почему, я теоретик полный в БД, мог и в лужу пердануть
Хотя я кажется понял. У меня же интернет через роутер подключен. Может быть в этом проблема?
Хотя если напрямую подключить, ничего не меняется. Блядь. Никак с локалхостом не получается соединиться.
Я не умею тыкать библиотеки. Сейчас поставлю MySQL, там-то уж точно все просто.
Оракловый клиент установлен? в tnsnames прописан локалхост?
Пацики, кто-нибудь работал с языком PL/PLUS? Если кто не в курсе, то это встроенный язык для АБС, на основе pl/sql. Что из себя представляет ваша работа?
>Оракловый клиент установлен? в tnsnames прописан локалхост?
Нет, но я уже понял, что я просто не установил все, что нужно. И даже мигратор с оракла на MySQL нашел.
Подчеркну: только SELECT * FROM <table>. Без продолжения, без условий, сортировки и прочего.
Это тротлинг или ты тупой?
Ты ж всю таблицу выбираешь при таком запросе, а при фильтрации - не всю.
Это не троллинг. Вообще-то кроме самого синтаксиса есть еще схемы, кеширование и много разной хрени. Например, а что если MyISAM лучше InnoDB для конкретных типов запросов? Вот и спрашиваю у спецов
Мнрго факторов:
1. Размер таблицы (типы данных каждого поля)
Например, если у тебя в таблице куча полей nvarchar(4000), то выбираться будет долго жлементарно из-за твоей скорости инета
2. Скорость соединения - селект будет идти до хуя долго при скорости 0.00001 кбит/сек, а индексация происходит на сервера, там важна только скорость записи и чтения на диске, она зачастую в разы выше скорости инета
3. Однозначно не могу сказать, но бывает, что сортированные данные выбираются быстрее, чем просто куча - гугли index scan vs table scan
4. Хочешь быстро выбрать и уверен, что со скоростью инета у тебя все збс? Тогда выбирай в несколько потоков внутри приложения, например, в таблице 20 тыщ строк, в одном потоке выбираешь 10 тыщ и одновременно с этим во втором потоке - тоже 10 тыщ. Если же у тебя отчет, который каждый раз селектит все из таблицы, у меня для тебя плохие новости. Пользователю не нужны сразу все данные, параметр зуй запрос и заставь юзера выбирать данные только по срезам.
Собсна, все.
А, ну и коннектор, хз, что ты там юзаешь, надеюсь, не OLEDB (мы ж про дот нет говорим), адо.нет общепризнанно работает быстрее.
Конкретной бд никакой ещё нет, просто пришло время перекатываться с сохраняемых на диск json'ов, поэтому если хранить один большой массив это не круто, готов поменять.
Сгенерить запрос, который кладет айдишники из массива во временную таблицу, а потом переджойнить реальную таблтцу с временной по айдишникам, ну или просто взять except-ом записи из реальной таблицы и временной.
Звучит как-то громоздно создавать-джоинить-удалять таблицы. (Или нет, я вообще понятия не имею.) Мне это не один раз сделать, а при каждом открытии страницы / запросе пользователя. "Большой" это я, возможно, преувеличил, там не миллионы элементом, а тысячи. А маленький несколько десятков/сотня.
>просто взять except-ом
В смысле intersect'ом? А то иначе совсем не то будет.
Есть, например, категория "Жесткие диски". В ней подкатегории: "Seagate", "Toshiba", "WD". Пользователь из общего каталога товаров переходит в категории "жесткие дески", из нее в категорию "WD" и там видит полный список всех жестких дисков производителя WD. А также панель фильтров, например: "Серия", "Емкость", "Интерфейс". Поставив галочку на "2Тб" в фильтре ему будут показываться жесткие диски производителя WD с емкостью 2Тб. Поставив дополнительную галочку на "Black" ему будут показываться жесткие диски производителя WD, емкостью 2Тб и серии Black. И так далее. Какую наиболее простую структуру БД для этого составить? Пока из вариантов следующие таблицы: "Категория", "Товар" и по одной таблице на каждую подкатегорию со своим набором характеристик.
Но входные данные ("маленький массив") у меня не в базе данных. Мне, получается, нужно:
1. создать таблицу
2. заполнить её новымы данными
3. заджоинить её с основной
4. достать все оставшиеся значения из этой получившейся
5. удалить всё лишнее (я не в курсе, создаётся ли на третьем шаге третья или изменяется одна из двух)
Это норм?
Что мешает хранить данные в базе? Поддерживать одновременно таблицу и файл?
Ну раз уж на то пошло, то проверь этот метод. Может тебе будет как раз.
Да, все верно расписал, я бы так и сделал.
Бамп
А как правильно организовать? Дайте статью хотя бы, нагуглить не могу.
Есть таблица юзеров, на каждого юзера нужен список им созданных задач( каждая из которых тоже список ключ-значение), например.
Ну так и сделай в таблице с задачами ссылку на пользователя, шо ты, в самом деле
>task_id
>user_id
Работаю в п.2. Хуячу ETL(обычно помесь Informatica PowerCenter, shell скриптов, самописных хранимых процедур), документирую их.
Также решаю более "аналитические" задачи - нужно через мутные разговоры с аналитиками, разрабами и менеджерами всех мастей разобраться, где что лежит в определенной удаленной БД и как получить оттуда нужные данные, которые бы удовлетворили заказчика. ПОдробнее описывать лень и получится слишком уж конкретно...
Тем, что в коррелированном подзапросе ты обязательно указываешь связь с данными из внешнего запроса, то есть, у тебя для каждой строчки внешнего запроса могут получиться различные результаты, возвращаемые подзапросом.
А некоррелированный всегда возвращает одно и то же.
Нет, в реляционной базе данных каждая таблица состоит из строк, такая хуйня возможна только в объектной - документной бд путем укладывания туда json-a, xml-a или чего-то подобного.
Другое дело, что некоторые реляционные субд уже прддерживают такую фичу, например, ms sql, постгрес там.
Под поддерживают я имею в виду не просто возможность положить строку в формате джейсона, но еще и набор функций для того, чтобы что-то конкретное оттуда потом достать.
Есть достаточно большой опыт етл дева, оркл, инфа, пл скл, оптимизация, отчетики сап бо.
Не так давно начал перекат в бигдата - мапредюс, Спарк и прочее. Пишу говнокод на Ява-скала.
Какой вариант развития лучше?
какой уровень ЗП можно получить в том же дс как реляционщику,, каковы перспективы, потолок?
По личному - от скл и информатики тошнит, все время считал это зашквар и комплексовал что не программист.
Заодно, что посоветуете?
Так иди в тред про машобчик, там тебе посоны за все пояснят, нас ты уже перерос, думаю.
Спасибо, анон
Ошибки не выдает, однако ожидаемых действий (изменения в столбце description таблицы products) нету.
Что я делаю не так? Пробовал вместо pdata делать массив - выбивает ошибки.
CREATE OR REPLACE PROCEDURE DescPrice(idMFR IN NUMBER, point_price IN NUMBER )
IS
str_cheap VARCHAR2 (50);
str_exp VARCHAR2 (50);
pdata NUMBER(4,0);
BEGIN
str_cheap := 'Дешевый товар';
str_exp := 'Дорогой товар';
SELECT PRODUCT_ID INTO pdata FROM PRODUCTS WHERE MFR_ID = &idMFR AND price > &point_price;
UPDATE PRODUCTS SET description = str_exp WHERE PRODUCT_ID = pdata;
UPDATE PRODUCTS SET description = str_cheap WHERE PRODUCT_ID != pdata AND MFR_ID = idMFR;
dbms_output.put_line(pdata);
END DescPrice;
При попытке написать при обьявлении return collection_name пишет, что нельзя использовать необьявленный тип.
Окей, нашел список литературы в ISBN (https://www.books-by-isbn.com/cg-russian_federation_and_ex_ussr.html), может ли кто подсказать, как оттуда можно выкачать весь этот список и как-то засунуть их в БДшку?
Нужно писать скрипт на каком-нибудь ЯП и потом из него вносить данные в БД.
Толкните меня в нужную сторону или расскажите в чём проблема.
Почему то что я написал выдаёт ошибку на втором пике?
сделать таблицу, с которой можно было бы совершать команды DML, например, как соединить эти 2 строчки на пике
>Приведи кейс и описание фрагмета своего приложения
Приложение это решение задачи:
В 1845 году в США была установлена традиция, согласно которой выборы президента проводятся во вторник после первого понедельника ноября в год, делящийся на 4 без остатка. Определить, дату ближайших к заданной дате президентских выборов в США.
Я не буду приводить весь код, что бы не сбивать с толку,
а дам только неработающую ветку в операторе ветвления
я предусмотрел все варианты, кроме одного - когда пользователь введет дату с нулывым годом ,
в принципе, нулевого года не существует по григорианскому календарю,
в оракле он тоже судя по всему не проходит,
поэтому я пытаюсь отловить этот год на этапе ввода данных, но не знаю как мне вычленить из вормата 'DD.MM.SYYYY' год SYYYY и сравнить его с нулем и выбросить строку 'NEPRAVILNO'
https://pastebin.com/m8zwMSna
какой же неудобный синтаксис, какие же костыли, я бы эту задачу на си в секунду бы решил, логика-то решения ясна, а как это записать в ебанутом синтаксисе непонятно
>>1065888
а если я так напишу
CREATE TABLE MY_EMPLOYEE
(ID NUMBER(4) CONSTRAINT MY_EMPLOYEE_ID_NN NOT NULL,
LAST_NAME VARCHAR2(25),
FIRST_NAME VARCHAR2(25),
USERID VARCHAR2(8),
SALARY NUMBER(9,2)
);
это временная или обычная?
чем они отличаются вообще кроме названия
>Приведи кейс и описание фрагмета своего приложения
Приложение это решение задачи:
В 1845 году в США была установлена традиция, согласно которой выборы президента проводятся во вторник после первого понедельника ноября в год, делящийся на 4 без остатка. Определить, дату ближайших к заданной дате президентских выборов в США.
Я не буду приводить весь код, что бы не сбивать с толку,
а дам только неработающую ветку в операторе ветвления
я предусмотрел все варианты, кроме одного - когда пользователь введет дату с нулывым годом ,
в принципе, нулевого года не существует по григорианскому календарю,
в оракле он тоже судя по всему не проходит,
поэтому я пытаюсь отловить этот год на этапе ввода данных, но не знаю как мне вычленить из вормата 'DD.MM.SYYYY' год SYYYY и сравнить его с нулем и выбросить строку 'NEPRAVILNO'
https://pastebin.com/m8zwMSna
какой же неудобный синтаксис, какие же костыли, я бы эту задачу на си в секунду бы решил, логика-то решения ясна, а как это записать в ебанутом синтаксисе непонятно
>>1065888
а если я так напишу
CREATE TABLE MY_EMPLOYEE
(ID NUMBER(4) CONSTRAINT MY_EMPLOYEE_ID_NN NOT NULL,
LAST_NAME VARCHAR2(25),
FIRST_NAME VARCHAR2(25),
USERID VARCHAR2(8),
SALARY NUMBER(9,2)
);
это временная или обычная?
чем они отличаются вообще кроме названия
>на этапе ввода данных
в приведенном коде этого нет, это просто моя догадка)
можно сделать еще один case для первого столбца,
но проблема все та же, как вычленить число SYYYY из DD.MM.SYYYY при вводе данных
я ведь ввожу как бы строку?
Не помогло.
Сделал просто через:
SELECT * FROM packets
WHERE parse_time >= '23:03:06'
И всё ок, мне в принципе подходит такое решение.
Но всё же странно что оно так вот работает.
меня от SQL не тошнит, но в биг дату получше влиться тоже желаю. Сейчас по англоязчным туториалам развернул себе одноузловый "кластер" и потестил его. Сейчас смотрю как на питоне map-reduce джобы писать. Наверное на джаве тоже придется научиться.
По мне так это наверное будет не перекат, просто расширение навыков. А роль похожа - ETL, оптимизация "запросов"(которые за кулисами - мапредьюс) и т.д.
Вангую, что в тайм есть еще милисекунды, которые лежат в табличке, но в результате твоего первого селекта не выводятся.
Только придется еще в матстате и эконометрике прошариться, потому что чел, который занимается багдатой, но не умеет исследовать данные, нахуй никому не нужен.
Ну, тащемта, на это есть датасаенс и датасаентисты, не? Или ты единорогом хочешь стать?
Сужу по опыту, вижу, что те, кто занимается анализом бигдатыи машилернингом, как раз и выступают в роли разработчиков, у меня в конторе так, больше скажу, ходил на конференции мейл.сру, так дела обстоят точно так же.
Просто делюсь инфой, если хотите, учите спарки с мэпредьюсами без математики, никто ж не запрещает.
Я в большой телеком компании; на мой взгляд всё же есть тенденция всё же к разделению труда, где есть более-менее четкие роли санетистов и инженеров.
Мне в принципе пох, мне интересны обе стороны медали. Спасибо за информацию
Разделение у меня тоже есть. Писать етл и модели - все таки разные вещи. По вакансиям вроде где как. Где то хотят мл где то нет. Конечно не лишним будет.
p.s. Я глядул код, в принципе что-то такое есть. Только я передаю БД строку формата datetime и она уже её делит на дату и время. Но всё равно там милисекунд нет. Странно.
Привет, котоны. Есть база товаров, нужно составить к ней запрос, который возвращал бы что-нибудь вроде этого:
1. Количество портов
1. 12
2. 24
3. 48
2. Производитель
1. Cisco
2. SNR
3. Asus
3. Скорость коммутационной матрицы
1. 48 Гбит/с
2. 64 Гбит/с
Запрос, который я составил возвращает следующее:
1. Количество портов 12
2. Количество портов 24
3. Количество портов 48
4. Производитель Cisco
5. Производитель SNR
6. Производитель Asus
7.Скорость коммутационной матрицы 48 Гбит/с
8. Скорость коммутационной матрицы 64 Гбит/с
Используя данную выборку я буду составлять панель фильтрации товаров на сайте в идеале двумя циклами:
Цикл по характеристикам
{
Имя характеристики
Цикл по значениям
{
Значение характеристики
}
}
Как мне правильно составить запрос, аноны? Пишу на PHP +Laravel.
Привет, котоны. Есть база товаров, нужно составить к ней запрос, который возвращал бы что-нибудь вроде этого:
1. Количество портов
1. 12
2. 24
3. 48
2. Производитель
1. Cisco
2. SNR
3. Asus
3. Скорость коммутационной матрицы
1. 48 Гбит/с
2. 64 Гбит/с
Запрос, который я составил возвращает следующее:
1. Количество портов 12
2. Количество портов 24
3. Количество портов 48
4. Производитель Cisco
5. Производитель SNR
6. Производитель Asus
7.Скорость коммутационной матрицы 48 Гбит/с
8. Скорость коммутационной матрицы 64 Гбит/с
Используя данную выборку я буду составлять панель фильтрации товаров на сайте в идеале двумя циклами:
Цикл по характеристикам
{
Имя характеристики
Цикл по значениям
{
Значение характеристики
}
}
Как мне правильно составить запрос, аноны? Пишу на PHP +Laravel.
Структуру результата прозрачнее представь. У тебя есть строки и столбцы, у каждой строки есть свой уникальный номер, как во втором результате, а не 1,2,3,1,2,3... Тогда может быть ты сможешь сам решить.
Очевидно, там есть пустые значения в исходных данных, посмотри просто их и фильтрани, там дрлжно быть где-то пусто.
Понту юзать PowerQuery, если честно, никакого не вижу, больше респектую стандартное подключение к ms sql.
а где commit?
тебе нужно создать тип на уровне Бд, т.е. как объект схемы, тогда можно в скл запросах использовать эту функцию как таблицу. Ассоциативные массивы таким образом использовать нельзя.
Так, ладно. С этим я разобрался. Теперь мне нужна помощь в другом. Нужно составить следующий запрос:
Допустим клиент в фильтре выбрал свойство 1 и значения для него 1 и 2, свойство 2 и значения для него 3 и 4. Как составить запрос, который вернул бы записи всех товаров, у которых в свойстве 1 есть значения 1 и 2, а в свойстве 2 есть значения 3 и 4? У меня запрос какой-то кривой получился, записи дублируются.
Кстати, умник, какой смысл в left join'e, если накладывается условие на таблицы, которые джойнятся? Конкретно в этой записи записи запроса inner будет эквивалентен left'у!!!
Да пофиг, все равно ничего не изменилось. Может еще какие варианты есть? Разгребать выборку в коде как-то не хочется.
Ты дибил блядь?
У тебя радные строки, одна строка по одному параметру, другая по второму
Какой груп бай бля дибил
А вообще нет, нихрена я не решил. Если свойства разные, то идет выборка по каждому из них и товары нормально не фильтруются. Как правильно зделость-то, а?
Тебе бля конечный вид какой надо
Имя / параметр 1 / параметр 2
-------
Имя / значение 1 / значение 2
Так бля?
Гугли короче pivot table, если хочешь красиво
Если некрасиво то ебись с case, group by и прочим
Смотри какая у меня штука.
Если я выбираю в параметре "скорость коммутационной матрицы" значение "48 Гбит/с", то должны отображаться только те товары, у которых этот параметр имеет это значение. Соответственно, если помимо этого параметра я еще выбираю в параметре "емкость таблицы MAC-адресов" значение "16к", то должны отображаться только те товары, у которых скорость коммутационной матрицы = 48 Гбит/c и емкость таблицы MAC-адресов = 16к. В пределах одного параметра сейчас отображается все правильно, но если выбрать другие, то все смешивается.
Ну ведь это логично.
У тебя сейчас каждой строке в таблице соответствует две строки в дополнительных таблицах, отсюда и задвоение.
А так как у тебя в запросе OR, он тебе вернет не только строки, которые удовлетворяют обоим условиям, но и те, которые удовлетворяют одному условию.
В то же время, замена or на and на первый взгляд нихуя тебе не даст из-за своеобразной структуры.
Какой формат вывода тебе нужен, только сами товары, без наименований и значений параметров?
В таком случае тебе лучше использовать здесь конструкцию exists:
Select * from goods
Where exists (select по первому параметру из тех таблиц, которые ты джйнишь)
And exists (select аналогично по второму)
С уважением,
топ-ораклист-120к
Общая, тебе нужно джойнить дополнительные таблицы столько раз, сколько у тебя параметров
И писать условия через And
Это же блядь логично, не правда ли?
Что OR значит ИЛИ и выдаст тебе все продукты, у которые удовлетворяют условию 1 ИЛИ условию 2.
Так, подожди, сейчас я разгребу что ты мне написал и попробую. А то я ж не топ-ораклист-120к.
Видимо я вообще не понял как работать с EXISTS и у меня запрос достал вообще все записи из таблицы goods.
Ух бля дебил
Почитай про экзист
Нахуй ты ровно свой запрос туда пишешь, это бля как 1=1 написать
Скинь текст, могу отредактировать
Нет, не могу
Короче у тебя в запросе должно быть условие связки твоей основной таблицы с дополнительными, но джойнить её ещё раз не надо
Бля ты можешь просто прочитать как работает экзист? Сложно?
Ты с телефона что ли капчуешь, что злой такой? В общем, взгляни на этот запрос - он выдает то, что мне нужно. Но я сейчас как обычно обрадуюсь и поспешу, так что мне нужно твое мнение как профессионала.
Обращайся.
хуево тебе
Либо в разных базах по-разному, либо ты ебаный дебил, потому что в оракле нужно писать
Insert
With
Select
В таком порядке
тогда я не понимаю, что ты хочешь сделать. Можешь объяснить еще раз нормально?
У нас кластер монгос. Зависимость есть, брат жив.
то есть
select from t1 join t2;
по идее долдно работать, но не работает в оракле, что к этому надо добавить,
старый синтаксис работает
select from t1, t2;
это и есть декартово произведенте
как сделать то же самое но без клбчегого слова cross, но с join?
>Что вы думаете про монгу (только без траллинга, пожалуйста)?
что в ней транзакций и хранимок нет, вот что.
В ней есть хранимки в виде джаваскрипт-кода.
А она самая популярная и библиотеки под нее есть.
Полез смотреть дальше, вроде как следующая популярная это OrientDB. Но под нее уже с либами все гораздно хуже и язык запросов у них какой-то мутный.
В общем, что хотел спросить - может еще чего-нибудь посоветуете? Какие решения выбирают для продакшена?
А язык какой? У нас, гоферов, есть cayley и dgraph. Кайли умеет в graphql, gizmo и mql, dgraph - graphql. Но если ты раньше не работал с графовыми базами, то любой язык запросов тебе покажется ебанутым потому что ебанутый сам язык, а логика запросов.
>Подскажи какую книгу по дороге в метро можно читать про БД (именно теорию, потому что практические задания/команды нормально изучаются только за ПК)?
An Introduction to Database Systems (8th Edition)
by C.J. Date
Link: http://a.co/frmPMxS
* в екселе
Кароч, замес такой. Мне 20, законченная вышка (да, круто, еее). Вышло так, что на 3 курсе случайно нашлась работа и слово за слово работаю полтора года с оракловыми бд и иже с ними.
Какие исходные на данный момент: Pl_sql, reports, forms это вот все на таком средненьком (в силу опыта) уровне ну и все, что дал универ (то есть много чего, но крайне слабо).
Задумываюсь о том, стоит ли оставаться в этой сфере или перекатиться во что-то другое, более трендовое и распространенное. Есть ли резон сидеть в этом всем. Ну и как обычно, что надо добавить к своему резюме, чтобы было больше шансов считаться нормальным спецом.
А что такого? Это самый простой способ построить отчет. Если нету системы управления отчетностью, то почему нет?
>cayley
А что значит, что она в качестве бекенда может использовать другие БД (sql, cassandra, mongo). Это как вообще?
Просто расскажу как дела обстоят на рынке. Со знанием только sql и pl/sql выбор не велик: либо отчетики, либо легаси, где логика в БД. Еще можно вкатиться в администрирование Oracle, деньги там есть, а развитие хз. Если знаешь java, то вакансий становится в 10 раз больше, тут уже можно выбирать, есть и легаси, есть и новые проекты. Плюсиком тебе будет то, что ты продвинут в области БД. Короче сумбурно пишу, но я бы на твоем месте выучил распространенный язык и дальше в его экосистеме развивался бы. В случае чего, всегда можно найти говнопроектик для разраба БД. Ну а раз ты такой вундеркинд, то думаю без труда осилишь ту же джаву.
Лол, делал такое, только с ораклом и еще в vba раскидывал данные по документам.
Туалетную бумагу передай.
Спасибо за хороший ответ.
В таком случае начну копать в этом направлении. Все-таки можно выучить минимум, а потом на работке дотянуть. Плюсик в карму.
Либо процедуру напиши, либо триггер на одну из таблиц повесь. А вообще изи задача.
Ну типа не сильно ли зашкварно в 2к19 году этим заниматься, и если макаки будут до обморока запрашивать данные, не сильно ли это загрузит бд. Да, я понимаю что всё от размеров и запроса зависит.
Не совсем понял. Ты точно правильно понял что я хотел сделать? Мне нужно для всех записей в таблице СТУДЕНТ, которые имеют ключ в таблице ПИДАРАСЫ, изменить поле 'пидарас'.
Ну вроде.
Если уже есть все таблицы, то пишешь процедуру.
В цикле по всем айди студентов :
Если селект из пидараса возвращает не пустое значение, то инсерт в студенты крестик, где айди студента такое то. Если вылетит эксепшн, что данных нет ( студент не пидр), то не делай нихуя.
Запускаешь процедуру.
Профит.
Не забудь комиты ставить после инсертов.
https://openedu.ru/course/spbstu/BIGDATA/
Я проходил в прошлом году 2 курса.
И прямо сейчас 3 прохожу.
Еще штук 11 в очереди (за все сразу не берусь, т.к. не осилю), там обычно перезапуски курсов в феврале и сентябре.
Прохожу для расширения кругозора, для себя.
Еще нравится stepic.org
Бесплатный да.
Раньше их давали везде.
Год не заходил, сейчас где-то только платные дают, где-то как и раньше осталось.
Сертификат студентам надо, мне так, бумажка. Я сейчас на трех курсах за которые бесплатные сертификаты вроде не дадут.
Бамп вопросу
Сделай там set transaction isolation level read uncommitted, пусть хоть обчитаются.
пок пок грязные данные, ога
Суть - устанавливается связь по сети между двумя разными инстансами, потом можно к примеру селктить из таблиц удаленной БД и вызывать хранимки.
Не за что, еще есть как вариант быть разрабом на платформах, которые являются надстройкой над Oracle Db, например платформа для банков ЦФТ со своим PL+. Но это уныние и крайне узкая специализация.
резон есть.
тырпрайзные БД со своими хранимками и репортами всегда там, где есть, _что_ считать и за _что_ отчитываться. это не веб-макакинг никому не нужных приложений (пусть даже сегодня за это платят сжигая деньги, хотя уже не платят). тырпрайзная БД параша никуда не исчезнет никогда. со временем будет только еще больше данных, больше хранимок, энтерпрайза, хардкора. тырпрайзные
> PostgreSQL
Когда 1,5кк срок накапливается - вообще хуй дождёшься вывода.
Аноны, что почитать за оптимизацию постргреса и вообще про него?
Учил его по документации.
То есть увидев объект на который надо создать синоним он сначала ищет объект среди таблиц, потом среди предсиавлений итд
Может ли быть PUBLIC синоним с таким же именем как PRIVAT синоним, если да, то как пользователь в своей схеме будет к ним обращаться?
Что в доках написано? Если узнаешь, то отпишись. Откуда вы такие вопросы берете? На OCP что-ли готовишься? По логике, private перекрывает public.
Приоритет всегда имеет твоя собственная схема, то есть если у тебя есть таблица с именем T1 и существует PUBLIC синоним с именем T1, то приоритет будет отдан таблице
в доках не нашел, но увидел упоминание на каком-то форуме и проверил опытным путем
Нет, просто на учебе задали такой вопрос
Сам в этой теме абсолютно ни фига не шарю, поэтому может моя проблема покажется вам тупой.
Попросили запилить сайт на Вордпрессе по-быстрому, я в этом практически нихуя не секу, но решил попробовать. Накатил ЦМСку, залил шаблон (скачал с ТемплейтМонстра), вроде все путем.
Потом залил файл БД через ПхпМайАдмин - и пиздец. Не могу зайти в админку Вордпресса. Сам шаблон вроде накатился, все адекватно, но вот что происходит:
1) При поптыке войти в админку сайта через "sitename.com/wp-admin" происходит какой-то ебаный редирект на страницу с УРЛом http://sitename.com/wp-admin/sitename.com/wp-admin/upgrade.php?_wp_http_referer=/wp-admin/
И, понятное дело, выдает мне 404 страницу
2) Если вдруг это поможет определить симптом: при попытке перейти с любой страницы сайта на главную он начинает прибавлять к урлу страницы "sitename.com/". То есть, было: sitename.com/contact, стало sitename.com/contact/sitename.com/, попробуешь еще раз - станет sitename.com/contact/sitename.com/sitename.com/ и т.д.
Шо делать, где и как что можно поправить, дабы избежать ебаного редиректа и спокойно попасть в админку? Кстати, на sitename.com/wp-login.php заходить получается, но после того, как залогинюсь, в админку один хуй не пускает
>cayley
Посоны, что значит, что она в качестве бекенда может использовать другие БД (sql, cassandra, mongo). Это как вообще?
MySQL Workbench какой-то уебанский, залезла панель у меня куда-то, и не перетаскивается, не могу её выдвинуть. Забагованный короче. DBeaver тоже сыпет Exception'ами, и с ним не очень удобно работать, не поддерживает автокомплит (пишешь seri он подсказывает, мол, serial? жмешь ентер - ошибка, жмешь таб - ошибка, кликаешь - ошибка)
сам отвечу, наткнулся вот на что: https://sqldbm.com
вроде бесплатно, зарегался, можно сохранить прямо там в облаке. в принципе, то что нужно, жаль что не десктопный софт, структура будет большая, не хочу чтобы на 14 день мне выскачило сообщение об оплате, чтобы открыть доступ.
P.S. Если есть такое же удобное но десктоп - сообщите.
>Ну использует другую субд для реализации части функционала
Вот непонятно, как это. Реализация хранилища же сильно зависит от функционала. А тут графы, такая штука, с которой нельзя эффективно работать в обычных СУБД. И вдруг их используют в качестве хранилища. Интересно как?
У меня была мысль, что может они именно данные хранят в БД (ну типа как эластик хранит лексемы или типа того), а для хранения графа используют свою систему.
Анон, зря забраковал Воркбенч, он годный и пожалуй самый лучший из бесплатных (а еще он умеет в реверс-инжинеринг). Иногда глючит это правда, но не часто.
Другой годный, открытый и универсальный вариант - https://www.draw.io/.
Может и можно. Есть же в sql базах всякие модные штуки вроде recursive сte.
Есть таблица сотрудников и там дата добавления результата этого сотрудника. То есть сотрудников добавляет результаты, но добавляет не каждый день. Нужно вывести статистику по сотрудникам, НО те дни когда сотрудники результаты не добавляли должны быть нулями. То есть должны быть все даты. Если через count стату собрать то будут даты только когда были проставлены результаты. Смотрите пик.
То есть, есть таблица result (int id, type_result int, id_user int, date_add datetime).
Можно сделать таблицу со всеми датами подряд, но как джойнить потом?
Джойнить по ключу. А вообще- изъебство, сделай проще. Поле DT определи, как Null. А далее обновляй по необходимости.
Добавление индексов избавит бедненькую СУБД от необходимости шерстить таблицу строка за строкой.
Нужно собрать табличку или подзапрос с датами за указанный период, а потом к нему(ней) лефт джойном присобачить твою таблицу с результатами по полю cal_d
При использовании кластеризованного индекса строки таблицы сортируются на физическом уровне. Поэтому у таблицы может быть только один кластеризованный индекс. Кластеризованным индексом в таблице является первичный ключ.
Вставка/изменение/удаление строк может производиться сравнительно долго, но поиск будет очень быстрым.
Некластеризованный индекс хранится отдельно от таблицы в виде двух столбцов, где первый столбец - это сортированные значения индексируемых полей из таблицы, а второй столбец содержит указатели на соответствующие строки из таблицы. Вставка/изменение/удаление строк производится быстрее чем при использовании кластеризованного индекса, но поиск будет чуток медленнее.
Да, не забывай еще, что некластерные индексы не будут работать, если нету кластерного, потому что ему (некластерному) нужно ссылаться на какой-та адрес строки в таблице.
У нее есть ключевое поле и некоторый набор других полей. Среди них одно ссылается на некоторую сущность. Нужно удалить все старые записи по каждой этой сущности, оставить только 5 последних. Как это можно сделать? Поиски в гугле предложили курсор и top 3 id desc
После пары часов работы отменил запрос. Нужно что то более быстрое.
Как такие задачи решают настоящите администраторы баз данных?
Нужно разбить запрос: запустить несколько запросов, которые будут обновлять таблицу по кусочкам, например, по 10тысяч записей, так ты сможешь увидеть результат быстрее, да и, самое главное, сможешь запустить несколько таких запросов параллельно.
Само задани на удаление не осень понял. Тебе нужно удалить записи об этой сущности из логов или удалить абсолютно все записи о ней из всех мест, где она упоминается?
Задание довольно простое. Есть лог, в котором фиксируются изменения сущностей. Там все подряд и товары и услуги и сотрудники. У всех есть id. Этот лог рос и никому не мешал. Сейчас во стал мешать. Поэтому решили что последние 5 записей по каждой сущности это вполне норм. А остальные под нож. Но что то вот не выходит очистить базу. Все пиздец как медленно в курсоре.
Обновлять по кусочкам это как? Когда запускаю два запроса на разных вкладках, то одна крашится, мол таблица залочена или типа того.
Пиздец даунич! Вместо того, чтобы подумать над архивацией лога, решили нахуй его удалить. Нет лога - нет проблем, заебись!
А лично автор этого вопроса даже в России никому не нужен.
Сейчас буду плакать после плохого собеседования.
А ты можешь себе представить, что я всё знал? Вообще все.
Просто общался как чмо и в заданиях с мутными формулировками, не качающимися эскуля, я обосрался.
Позовут на второй этап - будет чудо. Но вряд ли.
Двачаю, логи на то и нужны, чтобы в любой момент спорный поднять историю и пояснить вопрошающему.
Основы знаю и могу придумать запроектировать таблички типа customers, orders, products, но хочется больше развить свое мышление, чтобы мыслить абстрактно, чтобы слышать какую-то тему проекта и в голове или на бумаге рисовать сущности и связи между ними. В данный же момент когда сталкиваюсь с незнакомой задачей, то поначалу образовывается каша в голове и хочется больше просветленности.
Что посоветуете? Может какую-то книгу или методики
В PostgreSQL таки можно
create table t1 (id int, tarray text[]);
insert into t1 (id, tarray) values (1, array['line1','line2','line3']);
select * from t1;
если я использую подзапрос как ЦЕЛЬ в INSERT е
INSERT INTO(SELECT R1, ID FROM T1 WHERE ID = 50)
VALUES ('VASYA', 100);
Вставится ли у меня эта строка в таблицу T1 ???
Есть ли какой-нибудб CHECK OPTION для этого случая?
Потому что кто-то говорит, мол, вставится, но вроде хотели ввести чек оптион.
как же меня бесит манера составлять лекции: сначала написать "неправильно", потом отвлечься на другую тему, потом дать пример как "правильно"
Срочно.
В иерархических запросах oracle есть connect_by_root. Возвращает значение верхней строчки в иерархии.
А мне нужно значение второй сверху строчки.
Как это сделать?
Красиво или хотя бы говнокодом.
Спасибо.
Похуй, скорее всего SYS_CONNECT_BY_PATH подойдет.
Проверил в https://livesql.oracle.com
Вставилось.
IDR1
50Max
100Vasya
Про чек опшины хз. Я даже не знал что оно вставится так (смысл правда не понял, зачем мне так вставлять).
Вопрос про обращение к STORED PROCEDURES через бажесвеный DAPPER, а именно с передачей параметров.
Примеров для M$ SQL Server много и как бы все работают. Мне надо для MySQL
Так не работает. Выдаёт ошибку синтаксиса. Сама рутина экзекьютится в phpMyAdmi-е, то есть с ней всё в порядке
connection.Execute("InsertPerson(@firstN, @lastN)",new{firstN = firstName,lastN = lastName});
Работает только тогда, если передаваемый параметр один.
Где я проебался с синтаксисом????
Пока ничего конкретного.
Позже буду перекладывать в VB6+Access на .NET+[Firebird, MySQL, Ms SQL Server]
Сделать красиво
Это и так понятно. Мне нужен пример из жизни
В одном примере под MS SQL Server было так
Execute("some_proc @param", new { param = Param})
но для MySQL надо было со скобками просто перебрал и попал
Execute("some_proc(@param)", new { param = Param})
а с двумя и больше выкидавает ошибку
Сап. Вот есть удаление из двух табличек postgres, все ок
DELETE FROM orders o USING users u WHERE o.userid = u.id and u.firstname = 'Sam';
DELETE FROM users u WHERE u.firstname = 'Sam';
но, если надо удалить много записей, Sam, Inan, Anon1 etc. Как сделать красиво и просто?
рили, во я тупой
Что вы думаете о mydataexpress ?
Выгорит? Или лучше не браться?
Нужна база на систему авторов-статей, чтобы главред большого журнала мог кроссреференсить кто уже скоко писал.
Очень большое количество объектов парсить из плейн текста по разделителям быстрее, чем сделать один элементарный запрос в базу?
Почему бы его не "сериализовать" в байты и не вытаскивать из байтов?
Спасибо, помогло!
Кстати, у MySQL всё ещё может глючить, не находя явно существующие рутины, если имя базы не прописано маленькими буквами в connectionString
как проверить, что primary key поставлен на AUTO_INCREMENT
Вроде, соответствующая заява (AUTO_INCREMENT = 1) исполнялась без ошибок, но при попытке сделать INSERT кричит, что duplicate entry '0' for key PRIMARY
Надо сделась SELECT записи в 5 полей (id, Firstname, Lastname, email, phone)
Нужно, чтобы поиск работал как минимум по одному критерию и/или по комбинации из заданых. Например, по фамилии или имени и мылу. %%нувыпонели
Понимаю, что должно выглядеть так:
SELECT FROM people WHERE...
и тут собственно проблема с пустыми полями
Как сделать красиво, чтобы в WHERE игнорились пустые строки.
И как сделать красито, чтобы искало по отрезку строки. Например,
искать всех Jack, Jacob и James через Ja
Опять я. Забыл приписать, что делаю черех STORED PROCEDURE
Пойдёт так? обоссыте меня пожалста
WHERE (Firstname=_fistName AND _firstName != "") AND (Lastname=_lastName AND _lastName != "") AND ...и так далее
если через процедуру, и условия будут параметрами процедуры, то я бы делал не != "", а is not null.
И чтобы запрос работал нужно предусмотреть варианты null и не null.
Если так, то можно переписать условия типа:
((Firstname=_fistName AND _firstName is not null)
OR (_firstName is null))
Либо
Firstname=coalesce(_fistName,Firstname). Но это если строго равно.
Если через Ja выводить всех то лучше через первый способ: ((Firstname like '_fistName%' AND _firstName is not null) OR (_firstName is null))
Спасибо! Помогло!
Я поспешил радоваться. Как на пике 1 работает
как на пике 2 - не работает. ни по части, ни по полной
насчет like name||'%' нужно соединить параметр и процент. Если || не заработает, пробуй CONCAT(name, '%').
По первому скрину он на твое поле в таблице ругается, есть там такое firstname? Задай таблицу с алиасом или пиши people.firstname.
Да и как бы не совсем понятно использование в процедуре
select * и что с этим делать собираешься.
Но это походу какой-то mysql я с ним не работал. Может там так норм.
Firstname = name and name is not null? Что блядь? Ты хочешь чтобы у тебя домен не был бы равен null?
PS Если новые записи добавляются по несколько раз в секунду, целесообразно ли использовать индексы?
Вот например у меня такой текстовый файл
https://pastebin.com/6JMEbZV4
и я создаю вот так
https://pastebin.com/aUtAHnCx
Если учесть, что названия файлов 100% правильные, то что может быть не так,
еще что делать, если в текстовом файле последняя строка пустая (пробелы)? как её читать?
Зависит от субд, если она умеет в оконные функции (over), тогда есть, гугли row_number()
СУБД - PostgreSQL 9.6, оконные функции умеет.
Предлагаешь что-то типа:
with lv as (select id1, id2, value, row_number() over (partition by id1, id2 order by date desc) rn from test)
select * from lv
where rn=1
Что-то сразу не додумался. Хотя по плану выполнения одинаково выходит. Но выглядит лучше.
Не может это по плану одинакого выглядеть, так как оконные функции работают без самоджойнов. Это всегда будет работать быстрее и очнее, так как твой старый способ не гарантирует уникальность полученных строк после джойна.
Есть маска в черырмя полями
- имя
- фамилия
- пол
- возраст
искать по любой комбинации известных данных, которые задаются. Все пустые искать как any, а не сравнивать, например, gender =""
Хуяришь вычислимое поле на эту таблицу
Alter table t_kaka
Add full_user_info as
coalesce(name, '')+coalesce(second_name, '')+ coalesce(cast(gender as nvarchar(50)), '')+coalesce(cast(age as varchar(50)), '')
Далее херачишь на него full text index
Весь тред перечитал, но так и не нашёл этого вопроса.
Как вкатиться в разработку (аналитику) БД. Что качать понятно что SQL, что еще?? Какие вопросы на собеседованиях меня ожидают? И какие подводные в вашей работе?
Я третьекурсник, думаю начать искать стажировку или продолжать читать книги по БД. SQL знаю на уровне проделывания всех упражнений и зубрёжки из книги Ицыка Бен-Гана.
Знаю реляционную теорию на базе курса в универе уровень - могу дать определения третей нормальной форме и называю таблицу - отношением.
В рамках курсового проекта спроектировал БД через oracle developer.
Куда мне двигаться дальше?
Можно ли с моим уровнем начинать искать стажировку?
Как мне получать 100к через год?
А если я вполне ебу что все это значит, как использовать и имею маленький опыт применения этого на практике , но при этом почти не шарю в других языках, можно ли с такими знаниями на стажировку или джуна вкатиться ? Смотрел вакансии по дс-2, дбд если где и нужны то с опытом от года - 3 разработки и приличным прикладным багажом.Есть вакансия в БИЗНЕС ТЕХНОЛОГИЯХ, младшего разраба, вроде почти по всем требованиям прохожу, но вот отзывы об этой конторе в интернете - сугубо негативные
Знать надо не только реляционки, вроде оракла, но и nosql, вроде монги и редиса. Сейчас угорают по бигдате, а там без хадупа/редиса/кафки- никуда.
Sql тяжко учить?
Думаю начать задротить.
В городе маленьком появилась вакансия на 45к, но хуй они тут найдут даже за 100 к, разве что из Москвы выпишут им.
Хочу попробовать через пару дней хотя бы стажором или помощником за 30к. Каковы шансы?
Лучше С++ выучи за 21 день и получай 300кк
Ты хотел сказать СУЛЬвилась?
Тоесть получить выборку которая будет содержать table1.table1_ID и table3.table3_ID
Смысл такой: несколько инсертов в разные таблицы, потом объединение этого всего и открытие курсора.
Работает медленно, поэтому пара вопросов:
1. Я не пишу commit после каждого инсерта, так как далее сразу идёт truncate следующей временной таблицы, а он, как известно, сам по себе делает инсерт. Так вот, разницы между явным и неявным коммитом нет? Если я пропишу commit, работать быстрее не станет?
2. Сейчас у меня обычные таблицы, пока я тестирую, потом сделаю global temporary. Это даст прибавку в скорости работы?
Сами запросы тяжёлые и ебанутые, их я оптимизировать ещё больше вряд ли смогу.
Руками за минуту отрабатывает, а процедура час висит.
Я ебать не хотел эту РАБоту.
Когда взяли, был год опыта pl/sql разработчиком, согласился на 80к. Теперь, спустя несколько месяцев, на хедхантере предлагают 100+.
а какая ошибка-то вылезает?
В Москве.
А 100+ это сильно + или просто чуть-чуть?
Так-то 100 с копейками у меня есть, но мне бы уже 130 хотелось бы.
Ну я поставил 120к как желаемое и звонили, говорили что цифра очень даже устраивает. Мне кажется, что поступают неплохие предложения в основном потому, что я ещё Informatica PowerCenter умею юзать. Я вообще специально пошёл на текущую должность чтобы научиться, ибо просек, что это ценится на рынке. Правда обернулось это тем что эта хуйня меня пиздец заебала и тепреь охота слезть не то что с Информатики, но и с чистого SQL-ля вообще. Это реально скучно когда хоть немножко научишься.
Я двачую, понимаю прекрасно твой кризис.
Я хуже, я не работаю с ETL, я просто делаю отчёты. ХХ скролю регулярно, на таких как ты спрос больше, чем на таких как я.
Работа заебывает, дрочить на оптимизацию запросов, передрачивать отчёты по 10 раз из-за глупых требований заказчиков. Запускаешь хуйню и ждёшь пока отработает. Долго ждёшь. Заебало, движухи хочется.
Соскочил бы куда-нибудь поинтереснее, чай где-нибудь нужен oracle, я ведь его пиздец как люблю и запросики писать нравится
Отчётность заебала, отчётность скучно, банк скучно.
Но мне же хочется ещё и с выгодой по деньгам перейти, потому что никто не знает, понравится ли мне на новом месте, а так хоть деньги в виде бонуса.
они не связаны через третью
Дисковые операции + i/o данных.
Вопрос в другом, нахуя так делать, зачем выбирать все 60к строк. Если высрать в отчет - то лучше уж rownum добавить
Пошел нахуй, вкатывальщик ебливый.
Сука, черт ебаный, как же я с тебя горю.
Откуда ты блядь знаешь, каково это работать тем, кем работаю я?
Ты думаешь, что если апнешь 100к сразу счастливым станешь? Я тоже думал.
Но тебе я желаю разочароваться в профессии, никогда в жизни не апнуть 100к и сдохнуть от синьки.
Потому что нехуй пиздеть о том чего не знаешь.
Постоянной нет.
В понедельник пойду на вилку 130-150 в руки, поддержка АБС.
Будет круто, если возьмут, деньги так-то космические.
даже в /rf/ хикканы по 4-5к даларов поднимают с видео на ютубе, при этом не светят еблом, деньги сами в банк приходят
Можно ли создать представление на основе иерархического запроса (или вообще ОТВ) в MS SQL.
Что за иерархический запрос?
Ты можешь сделать представление в мс скл на основе любого запроса, написанного на т-скл.
>Что за иерархический запрос?
https://habrahabr.ru/post/43955/
>Ты можешь
Например у нас есть запрос :
WITH REC AS
(
SELECT id, pid, title
FROM test
WHERE title = 'Воронеж'
UNION ALL
SELECT t.id, t.pid, t.title
FROM REC AS r
INNER JOIN test AS t
ON r.id=t.id
)
SELECT id, pid, title
FROM REC
Как реализовать его в виде представления?
Блять, что нужно добавить то в этот ебучий файл pg_hba.conf
psql: FATAL: no pg_hba.conf entry for host "::1", user "postgres", database "postgres", SSL on
FATAL: no pg_hba.conf entry for host "::1", user "postgres", database "postgres", SSL off
Сейчас он выглядит так
host all all 192.168.0.1/32 md5
host all postgres 127.0.0.1/32 trust
host all postgres 192.168.0.1/32 trust
Весь люд кличет такие конструкции рекурсивынми запросами, лул.
>как же нам реализовать такое, ой, ой, как же это сделать то?
>>1083150
CREATE VIEW dbo.view_kaka
AS
WITH REC AS
(
SELECT id, pid, title
FROM test
WHERE title = 'Воронеж'
UNION ALL
SELECT t.id, t.pid, t.title
FROM REC AS r
INNER JOIN test AS t
ON r.id=t.id
)
SELECT id, pid, title
FROM REC
Но это еще не все.
Если ты реализуешь рекурсию в представлении, то тебе придется писать в каждом запросе, использующем это представдение,
>орtiоn (mахгесuгsiоn = x)
где х - это число допустимых циклов в рамках твоего запроса, в самой вьюхе ты это написать н сможешь. (Только если х превышает установленное по умолчанию значение, конечно же)
Такие дела. Не лучший способ. Лучше функцию написать или процедуру, в ней можно явно задать эту опцию раз и навсегда.
П.с.: писал в 3 поста, потому что Уродское слово МАКСРЕКУРШН в спам листе, ой лол, абу, что, от скл инъекций так защищается?
А что не так с этим словом?
Делаю аналог livelib/goodreads/myshows(про книжки) для семестровки по инфе. Как хранить статус книги у юзера? Читает он ее сейчас, прочел ее или собирается прочесть? Что-то совсем не втыкаю.
У БД не финальная версия, многое добавить еще необходимо.
Я бы предпочел заместо таблицы book_rating сделать таблицу user_books, в которой помимо id юзера и od книги будет статус книги (читаю/прочитал/планирую) и для прочитанных будет оценка.
Так тут по пизде идет какая-то нормальная форма. И что тут будет primary key?
Либо я тупой, либо что-то еще, но я не могу придумать такую связь между таблицами, чтобы не шла по пизде первая нормальная форма. Всегда будут повторы либо по user_id, либо по book_id. Что делать, помогите
Он будет двойной, по книге и по юзеру. Это уникальное сочетание.
Первая нормальная форма не идёт тпл пизде вообще никогда. У тебя по одному значению каждого атрибута.
То есть, это нормально, если значения id повторяются и встречаются в нескольких строчках?
Да
У тебя будет уникальная комбинация из двух id
Первая нормальная форма пойдет у тебя по пизде, если ты будешь допускать хранение нескольких оценок в одной ячейке через запятую
Вторая пойдет по пизде, если комбинация ид книги и ид пользователя не будет уникальной и можно будет сохранять в таблице несколько оценок одного пользователя по одной и той же книге
У тебя неправильные представления о нормальных формах. У меня, возможно, тоже
Да проебывал пары по БД, вот и хуевое представление. Если что, доебусь еще до препода, а так спасибо, вроде все понял.
У тебя они хотя бы были...
А я всё сам, всё сам...
А теперь мне даже ссаные 150 тыщ платить не хотят, ненавижу всех.
А ведь мог бы в универе нормальный язык изучить и нормально работать. Но в универе предпочёл проебываться, а потом пошел работать SQL-макакой.
Создать хранимую процедуру для быстрого получения всех наименований тем заданий домашних работ выполненных заданным студентом (fio) и их оценку за заданный период с даты 1 по дату 2.
Создать хранимую процедуру для быстрого получения количества сданных домашних работ, их минимальной, максимальной и средней оценок в разрезе по группам.
Первую работу я сделал наполовину, при выборе оценки за заданный период у меня вообще нихуя в столбцах не выходит. Где косяк?
Во второй нужно подсчитать количество домашних работ по каждой группе. Как это сделать? Я знаю, что нужно использовать COUNT(*), но вот как мне вытащить каждое поле столбца name_tgroups и посчитать домашние каждой группы? Через id? Но каким образом вытаскивать каждый из них? Я не знаю.
В задании ещё говорится, что в некоторых задачах нужно создавать VIEW. Напишите эти ебучие запросы, аноны, которые эксперты в базах данных. У меня вообще нихуя не получается. Я уже пробовал и локальные переменные, подзапросы, вьюшки...нихуя не получается, нихуя не помогает. Может это из-за того, что я не до конца врубаюсь в хранимые процедуры, не понял всех их тонкостей. Вот тут все таблицы http://dbdesigner.net/designer/schema/123097 .
Спасибо заранее.
>Вторая пойдет по пизде, если комбинация ид книги и ид пользователя не будет уникальной и можно будет сохранять в таблице несколько оценок одного пользователя по одной и той же книге
Переменная отношения находится во второй нормальной форме тогда и только тогда, когда она находится в первой нормальной форме и каждый неключевой атрибут неприводимо зависит от (каждого) её потенциального ключа
У него не была бы там вторая нормальная форма, если в таблице бук_рейтинг находился бы возраст пользователя (типо ключ составной, а аге зависит только от одного ключа)
Более того, отношение тут даже в 3НФ. Т. к. все функциональные зависимости не транзитивны..
5к. 2,5 сейчас, 2,5 после выполнения.
А где лежат даты? Может в первой косяк из-за того, что ты вместо даты использовал время? Алсо, какая связь JOIN у тебя?
Ты бы хоть показал что ты вызываешь и как.
А почему бы тебе не перекатить, если тебе это надо?
Пидорас.
Знаешь, что базовики самые злые и неудовлетворенные жизнью специалисты? Ну ладно, только я. Но сука не нервируй меня.
Я не оп.
А у меня циклотимия, прости, пожалуйста.
Какое у тебя образование? Так-то на приличных вакансиях требуют техническое образование, на средних - любое высшее.
Закончить тех вуз и самостоятельно подрочить sql в свободное время - отличный старт в этом направлении, лучше и не придумаешь.
Вот только нужно ли тебе это скучное говно для старперов? Ты не будешь программистом, ты будешь мусором, клепателем отчетиков, аналитиком и прочей швалью. Почему ты не можешь выучить нормальный язык программирования, как все? Чего тебе не хватает?
Мимо sql-макака с двухлетним стажем.
у меня неоконченная юридическая вышка) уже пару лет на пхп и сисадмин галере. вот хочу на мат.фак поступать и влиться в аналитику - интересно вообще как в этой сфере относятся к вышке
Конечно, нет, но есть очень близкие: аналитик данных, разработчик корпоративной отчетности, там еще нужно пару систем изучить, в которых отчеты рисуются, и научиться собирать требования к ним. Не поверишь, но даже на таких специальностях можно овер 100к в дс делать.
Я разработчик корпоративной отчётности.
А тянка предлагала мне быть риск-аналитиком, говорит заебись тема. Похуй, что я ничего не знаю, говорит там главное вышка хорошая и sql знать.
Ну посмотрим, если до собеседования у работодателя дойду, будет здорово.
ora-01843 not a valid month и не понятно почему.
Возможно в этой строке что-то не так с ограничениями:
Bday Date check (Bday < ‘01.01.1996’)
?
Анон, помоги тупому.
Лучшая методичка - это я и мой жизненный опыт.
Обращайся!
А мне даже ссаные 150к никто не хочет платить, видишь как плохо!
Ууууу, суки.
Позвонили с одного места, где 100 на испытательном и 120 после него. На руки. На текущем месте были те же цифры в гросс. Менять ради прибавки в 15% - быть дауном. Но тем не менее самый выгодный оффер в моей жизни.
Пока писал этот пост, мои начальники вызвали на разговор и предъявили мне, что я ищу работу. В отрицалово идти не стал. Но в целом обсудили все вопросы и пришли к понимаю, посижу тут ещё, даже денег потом прибавят.
Простите, что сделал бложик из треда, но в бамплимите можно
Да вот что странно, я от своего банка скрыл резюме. То есть видно оно компаниям, зарегистрированным на хедхантере, кроме моей. Скорее всего, просто спалили, что я чаще чем нужно выхожу поговорить по телефону. Ну это правда подозрительно.
Господи, хорошо быть молодым и перспективным, другого может и пидорнули бы за такое. А меня уверили, что все нормально, и попросили сразу подходить и говорить, если что-то не устраивает. Но наверное компания всегда заинтересована сохранять своих сотрудников.
Какую прогу скачать? MySQL не слишком навороченным для меня будет? А то я скачал его, установил, а там серверы, коннекторы и т.д., мне это не нужно.
Смотрел этот рейтинг: https://db-engines.com/en/ranking
Дурень. Открой hh, в списке выбери "резюме", в поиске введи "sql". Ты охуеешь от числа тебе подобных.
Говно выше высрал не для того, чтоб меня пожалели, а скорее оценили мои шансы. За всё это время я почти ничему (ну кроме уж совсем прям какой-то базы в математике/информатике) не научился, хотя возможности были, просто я их практически все проебал. Отсиживаю геморрой в одной конторке уже почти 2 года, в ИТ департаменте, но не программистом или тестером, а аналитиком данных (по сути пишу запросы на t-sql, анализирую данные на корректность и соответствие ТЗ, делаю описание всех баз, т.к. их дохера, и по сути мало кто знает, где какие данные лежат, если они вдруг внезапно кому-то нужны, и т.п.). СИКВЕЛ освоил на базовом (как мне видится) уровне, ну т.е. DML и DDL-запросы могу писать.
С одной стороны, у меня всегда была и есть низкая самооценка, и у меня всегда работает установка, что я ничего не могу, ничего не знаю и вообще самый тупой дегенерат в мире. И перед устройством на эту позицию мне казалось, что SQL - это пиздец сложно и я не смогу освоить. Но в итоге получилось, что освоить что-то, да смог.
С другой стороны понимаю, что всю жизнь работать на этой позиции будет невозможно, потому что работа сводится к рутине. Зп мне хватает в целом на жизнь, но на что-то большее нет, т.е. вынужден копить по пол года.
Соответственно, вопрос. Есть ли у меня шансы параллельно освоить какие-то ещё технологии/языки/инструменты?
Из языков сейчас начать изучать C#, т.к. надеюсь, что он мне поможет в решении некоторых проблем, которые я встречаю при решении некоторых задач. Например, нужно проверить данные в гигабайтной XML'ке, и чтобы её вручную не открывать и не сканить через поиск, написать простой парсер и т.п. + хочется изучить Enitity Framework и понять, как наши девелоперы работают с данными, как хранимые процедуры вызываются. Ну и также мечу взгляд в машобчик и нейроночки. Т.е. хочу ещё вкатиться в Python/R. И тут у меня дикий бугурт от себя, потому что в универе у меня был курс интеллектуального анализа данных , и освещались различные алгоритмы, но я нихера не понимал.
Соответственно, второй вопрос. Если шансов нет, и если мне не имеет смысла пытаться изучать языки/инструменты выше, куда можно дальше двигаться? В разработчики/архитекторы баз данных? Сложно ли освоить Sphinx? Имеет ли смысл изучать другие другие СУБД, либо NoSQL? Сложно ли вкатиться в MongoDB + ElasticSearch? Буду благодарен, если кто-то обратит на меня внимание.
Говно выше высрал не для того, чтоб меня пожалели, а скорее оценили мои шансы. За всё это время я почти ничему (ну кроме уж совсем прям какой-то базы в математике/информатике) не научился, хотя возможности были, просто я их практически все проебал. Отсиживаю геморрой в одной конторке уже почти 2 года, в ИТ департаменте, но не программистом или тестером, а аналитиком данных (по сути пишу запросы на t-sql, анализирую данные на корректность и соответствие ТЗ, делаю описание всех баз, т.к. их дохера, и по сути мало кто знает, где какие данные лежат, если они вдруг внезапно кому-то нужны, и т.п.). СИКВЕЛ освоил на базовом (как мне видится) уровне, ну т.е. DML и DDL-запросы могу писать.
С одной стороны, у меня всегда была и есть низкая самооценка, и у меня всегда работает установка, что я ничего не могу, ничего не знаю и вообще самый тупой дегенерат в мире. И перед устройством на эту позицию мне казалось, что SQL - это пиздец сложно и я не смогу освоить. Но в итоге получилось, что освоить что-то, да смог.
С другой стороны понимаю, что всю жизнь работать на этой позиции будет невозможно, потому что работа сводится к рутине. Зп мне хватает в целом на жизнь, но на что-то большее нет, т.е. вынужден копить по пол года.
Соответственно, вопрос. Есть ли у меня шансы параллельно освоить какие-то ещё технологии/языки/инструменты?
Из языков сейчас начать изучать C#, т.к. надеюсь, что он мне поможет в решении некоторых проблем, которые я встречаю при решении некоторых задач. Например, нужно проверить данные в гигабайтной XML'ке, и чтобы её вручную не открывать и не сканить через поиск, написать простой парсер и т.п. + хочется изучить Enitity Framework и понять, как наши девелоперы работают с данными, как хранимые процедуры вызываются. Ну и также мечу взгляд в машобчик и нейроночки. Т.е. хочу ещё вкатиться в Python/R. И тут у меня дикий бугурт от себя, потому что в универе у меня был курс интеллектуального анализа данных , и освещались различные алгоритмы, но я нихера не понимал.
Соответственно, второй вопрос. Если шансов нет, и если мне не имеет смысла пытаться изучать языки/инструменты выше, куда можно дальше двигаться? В разработчики/архитекторы баз данных? Сложно ли освоить Sphinx? Имеет ли смысл изучать другие другие СУБД, либо NoSQL? Сложно ли вкатиться в MongoDB + ElasticSearch? Буду благодарен, если кто-то обратит на меня внимание.
Спасибо!
Обратил, прочитал, а спросить ты что хотел?
Хватит ли тебе знаний на разработчика БД? Сходи на собеседование, узнай.
Что тебе изучать? Что тебе самому нравится, то и изучай.
Это искусство высрать пост на весь экран и ничего не написать по делу.
Спасибо, что прочитал. У меня есть проблемы с формированием мысли, поэтому я часто расписываю ненужную хуйню, так и не объяснив самое основное в сухом остатке. Спрошу точнее, надеюсь так будет понятнее.
Имеет ли смысл изучать C#, как приложение к уже имеющимся знаниям в MS SQL? Т.е. можно ли какие-то крутые вещи пилить, когда имплементируешь SQL в C#? Например, сложные регулярки пилить или какие-то библиотеки прикручивать или выньформу запилить с прикруткой в базе, ну и т.п. И более общий вопрос, к которому клоню. Куда можно двигаться в этой области (работа с данными)? В первую очередь не с точки зрения бабла, а перспектив. Ну т.е. нужно понимание, что вот такой-то стэк технологий условно в ближайшие 5 лет будет актуальный, поэтому имеет смысл двигаться в этом направлении и при этом не быть бесполезным куском дерьма на рынке труда. Соответственно я и спросил про машин лёнинг/проектирование бд/сфинкс/носиквел и т.п. Что из этого востребовано сейчас на рынке и во что из этого реально вкатиться?
Да, например, в моем отделе пишутся интерфейсы на sharepoint под БД. Это и есть C#. То есть от разработчика требуется как SQL, так и C#. Но я не такой, к сожалению, обычная отчётная макака.
В любой непонятной ситуации скролль хедхантер, sql в связке с C# я вижу довольно часто.
По профессиям.
Архитектор - моя влажная мечта, но нужен колоссальный опыт и знания, думаю годам к 30 им стану, когда за плечами будет почти 10летний опыт работы с БД. Если, конечно, не поменяю резко направление работы.
Для МЛ ты староват и туповат, судя по всему. Да и зачем там SQL я не очень понимаю, там важно прежде всего быть хорошим программистом, питон, вся хуйня.
Если есть потребность в модных словах в названии профессии, то попробуй биг дату, hadoop, хуе-мое. Меня на такую вакансию могли взять без опыта в бигдате, да один скуль и сообразительность. Но то ли тупанул, то ли прайс большой заломил. Не сложилось, короче.
https://2ch.hk/pr/res/1086747.html (М)
Да, я полностью скопировал этот тред.
Хотите лучше - делайте сами.
Это копия, сохраненная 21 ноября 2017 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.