Этого треда уже нет.
Это копия, сохраненная 10 августа 2018 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
И снова это неиндексированный баз данных тред! /sql/ ЕДИНЫЙ БАЗ ДАННЫХ ТРЕД 1167018 В конец треда | Веб
И снова это неиндексированный баз данных тред!
Тут мы решаем ультраважные вопросы о том, как правильно хранить динамические атрибуты сущностей: в полях или в строках,
Рассказываем, как работаем аналитиками и мечтаем стать разработчиками,
Строим АНАЛИТИЧЕСКИЕ отчеты в экселе, выгружая по миллиону строк, а потом фильтруя,
Дружно не понимаем, ЗОЧЕМ ЖИ НУЖИН ОЛАП, ЕСЛИ И ТАК ВСЕ РАБОТАЕТ ЗАЕБИСЯ,
Ищем ошибки в аббривиатурах MDX DMX XMLA,
Доебываемся до эс - ку - элей наших же потенциальных конкурентов

>Select id from tbl_table_with_id where id = (select max(id) from tbl_table_with_id)


>ЧТО НЕ ТАК-ТО У МЕНЯ?


Удивляемся, как за знания, приобретаемые за 4 месяца на sql-ex, могут платить по 100к, и бугуртим, что ниасилили и 100к не получаем.
А так же:
Постгре или постгрес?
Май эс ку эль или мускуль?
Эс ку эль или сиквел?

В общем, это очередной баз данных тред, поехали!

Награда светит не посмертною медалью, отнюдь
Это храм старого формата, так предали огню
И скоптили небо старики, что слышны с Невской реки
Мы видим дым от костра - "Да здравствуют базовики!"

ПРЕДЫДУЩИЙ: >>1086747 (OP)

#sql #бд #базы данных
2 1167037
>>167018 (OP)

>сиквел


Это баттхерт-тред?
3 1167228
>>167018 (OP)
Найс блядь обосрался с перекатом. Не умеешь - не берись.
4 1167277
>>167228
Иди нахуй.
sage 5 1167322
>>167228
Хуль тебе не нравится? Даже теги поставил. Оп - не хуй. А ты - пидораха.

мимо
6 1167325
еее, перекот!
7 1167358
И вот снова классический перекато срач в БД-треде, когда уже нормальный перекат будет с новой тупой шапкой, ммм?
8 1167388
>>167322
Вот это взрыв :^)
Для начала чекай тему, а потом свою мать.
9 1167416
Аноны, посоветуйте книжечек по постгресу. Сложно его в питон интегрировать? Я поставил сервер + накатил DBeaver чтоб в консоли не пердолиться
10 1167693
>>167416

>Сложно его в питон интегрировать?


SQLAlchemy
11 1167809
Также по постгресу вопрос, версии 9.3. Нужно что-то вроде отказоустойчивого кластера. Есть два сервера В идеале один из их будет мастером, данные автоматически будут сливаться на слейв. В случае недоступности мастера (как и где вообще эту недоступность проверять?), слейв берет на себя все его обязанности и, когда мастер становится доступен, сливает свежеполученные данные на него (и передает управление?).
Короче, второй день читаю информацию на эту тему, сравниваю варианты репликации и уже реально запутался. Кто-ндь наставит на путь истинный?
12 1167843
>>167809
Вдогонку: есть ли способ относительно безболезненно обновиться с 9.3 на 10 без промежуточных этапов?
13 1167880
>>167809
Это называется StandBy. Гугли книги администратора postgres на рутрекере. Настрой сначала архивлоги, а потом с этого пляши. Научись эти логи синмать раз в полчаса, например, а после дополни конфиг на стэндбай.

Чтобы безболезненно перейти на новую веосию читай ман про апгрейд, или делай бэкап и разворачивай потом на десятку
image.png37 Кб, 800x410
14 1168008
Есть одна группа и в ней много студентов.
Как мне сделать таблицу эту по нормальному? Но если я сделаю как на пике, мне придется каждый раз писать insert into Группа - и вводить каждый раз имя группы, каждый раз количество и менять только айдишник студента.
Это нормальный подход?
15 1168009
>>168008
И еще каждый раз айдишник группы.
У меня будет одна и та же группа с разными айдишниками.
16 1168049
>>168008
Это ты так не смешно шутишь?
17 1168065
Че правда есть отдельная профессия, где платят за построение запросов к базам данных? Я думал, это задача бэкендера.
18 1168073
>>168065
кек. Data Science какой-то вроде.
19 1168164
запощу и сюда заодно
Продолжаю вкатываться, хочу устроиться для начала джуном в бекенд на Питоне. Дошел в своем обучении до баз данных. Что прочитать по ним? Database systems Сиджея и Learning sql ? Или это не то совсем? Что тогда надо?
20 1168185
>>168164
Алан Бьюли, Том Кайт.
21 1168224
>>168008
Связь студент-группа должна быть в отдельной таблице, в этой таблице также должны храниться дата начала членства студента в группе и дата окончания оной (null - если дата окончания неизвестна)
postgresql-94-funktsii-tekhnologii-vozmozhnostixx38.jpg13 Кб, 300x188
22 1168243
Поясните за PostgreSQL.
Чтобы добавить ограничение на колонку нужно выполнить такой запрос:
ALTER TABLE products ADD CONSTRAINT some_name UNIQUE (product_no);

(источник: http://postgresql.ru.net/manual/ddl-alter.html )

Как я понял product_no является названием колонки или нескольких колонок для которых мы добавляем ограничение, а чем тогда является some_name ?
23 1168256
>>168243
Название ограничения же. Нельзя же без имени же.
24 1168280
Как в БД на физическом представлен null? Есть поле integer, как СУБД определяет лежит там значение или это null?
25 1168291
>>168224

>Связь студент-группа должна быть в отдельной таблице,


Как она выглядит эта связь?
26 1168320
>>168291

Как-то так:

student_group_id number
student_id number
group_id number
student_group_date_start date
student_group_date_end date

Это самый простой вариант. Можно добавить ссылки на документы, на основании которых осуществлялось включение/исключение в группу, добавить комментарий.

Кстати, количество человек в группе хранить в таблице не надо.
Оно рассчитывается в зависимости от даты.
Например, на первом курсе было 20 человек, к пятому осталось 8. Тебе нужно узнать, сколько человек отчислилось на третьем курсе, или сколько пришло из академки на четвертом. С такой промежуточной таблицей-связью это легко сделать.
15220886918390.jpg97 Кб, 640x640
27 1168368
Посоветуйте GUI для MySQL
29 1168489
Посоветуйте норм гуй для постгреса, чтобы там были вкладки как в dbForge
30 1168520
>>168256
Но ведь при создании таблицы я могу сделать вот так:

CREATE TABLE products (
name text,
id integer UNIQUE
);

Так вот, где здесь указывается имя ограничения?
31 1168576
>>168320
Точно! Спасибо тебе большое, что уделил на меня время.
32 1168648
Привет, бродяги. Кому задачек порешать по sql?
33 1168670
>>168648
ну го
34 1168671
>>168670
Дак давай, бля.
35 1168680
36 1168682
>>168680
Взял
image.png28 Кб, 1256x139
37 1168765
>>168648
Ну, если впадлу делать что, можешь мою взять с триггерами.

Нужно разработать и реализовать триггеры для операций INSERT, UPDATE, DELETE для проверки сложных ограничений, накладываемых на схему предметной области (не менее двух триггеров для каждого типа операции).

Не менее трех триггеров (любого типа) должны выполнять действия компенсирующего типа в связанных таблицах.

По одному триггеру для каждой операции должны быть триггерами instead of (триггеры должны содержать логику обработки данных - например, выполнение компенсирующих операций, расчетные данные, обработку сложного удаления или обновления данных).
image.png239 Кб, 1791x955
38 1168766
>>168765
проебался с пиком.
39 1168815
>>168765
Зачем?
Это не задача, это упражнения
40 1168900
>>168765
Но это есть в книгах по Ораклу, не проще ли посмотреть там?..
41 1168918
>>168520
В этом случае имя генерится субд и оно не очень удобное. Не знаю как в постгресе, а в Оракле это что-то вроде sys_12343123.

По ссылке, которую ты выше приводил:

Чтобы удалить ограничение, вам необходимо знать его имя. Если вы сами давали ему имя, то все просто. В противном случае, СУБД назначило автоматически сгенерированное имя, которое нужно найти. В этом может помочь команда \d tablename в psql; другие интерфейсы также могут предоставлять способ инспектирования подробностей таблиц. Затем выполняется команда:

ALTER TABLE products DROP CONSTRAINT some_name;
(Если вы выполняете команду с указанием такого имени ограничения как $2, не забудьте, что вам понадобится заключить имя в двойные кавычки, чтобы имя было воспринято как правильный идентификатор.)
42 1168938
>>168918
понял, принял. Спасибо
43 1169044
>>167880
Благодарю. Обновление уже сделал, проблем вроде не было.

Насчет StandBy не нашел ничего толкового, логи и бекапы есть, как я понял все-таки нужна потоковая/логическая репликация.

Помимо этого, наткнулся на вариант кластера высокой доступности средствами самой винды: https://www.postgresql.org/message-id/006c01cd8c6f$bd274ba0$3775e2e0$@devshock.com (правда слабо понял, как это реализовать, сейчас усилено гуглю).

Что думаете об этом? Стоит ли пробовать (учитывая, что серваки надо было запустить уже на этой неделе, а я - простая вебмакака без опыта администрирования чего либо)?
44 1169450
Есть в треде кто работает ETL разрабом? Как вообще направление? Работаете из-за денег или реально интересно чистить данные от закачиков?
45 1169462
>>168489
DataGrip
46 1169548
>>168489
DBeaver.
47 1169622
>>169044
Ты серьёзно? Твои друзья вот эти три дядьки:Bartolini G., Ciolli G., Riggs S.
Есть же годные доки на сайте postgresql.
Первым делом читай про Wall-Ahead Logs ( они же archvie logs) параграф 29.2. Если ты не разберёшься с технологией Standby то можешь налепить скрипт, который на второй машине будет применять эти логи. Да и приятно, когда у тебя бэкап каждый день, а архивлоги делаются каждые 15 минут. Это позволит восстановить сервер если упадёт стэндбай и кто-то повредит базу например на 18:06(а бэкап у тебя в 00:00)

Сама технология Standby основана на передачи redo-журналов по сети другой машине, и там уже применение. Standy это 25.5.

Есть краткий ман по настройки Standby вот тут : https://wiki.postgresql.org/wiki/Hot_Standby

но по сути настроив wal ты вполне легко настроишь standby. Чтобы понять как всё работает и посмотреть все настройки тебе нужно postgresql.conf , и забэкапь этот файл, чтобы если сломаешь его, то сможешь восстановить.
По сути если у тебя есть виртуалка, то просто копируешь машину, а потом делаешь из одной main сервер, другой standby. И выпроси хранилище для бэкапов, даже если кто-то заебашит raid-5 тебе будет это нужно.
48 1169652
>>169450
Работаю ETL-разрабом в развитии DWH полтора года. Oracle + Informatica. Мне норм, как тебе будет хуй знает. Лично мне платят хуево, собираюсь в ближайшее время перекатываться в другое место.
E4HxU.gif12 Кб, 479x395
49 1169938
>>168280
В оракле, если не ошибаюсь, NULL определяется как строка в блоке с значением длины 0.
50 1169943
>>168065
>>168073
Есть такая профессия, даже не обязательно Data science. Если ты делаешь хуйню для который нужна база, то это типичная задача бэкэнд-разработчика на язык-нейм.
Если ты делаешь с нуля или развиваешь ебическую, нетривиальную по объему и нагрузке базу на основе которой будут работать разные хуйни, то это отдельная профессия.
tomkyte.jpg8 Кб, 198x255
51 1169944
Посгрес сосатб.
52 1170047
>>169943
у меня вторая есть как отдельная задача, лол.
Проектировка БД. Причём приходится всасывать дохуя документации и иногда недокументируемые возможности, но я вообще программист-архитектор по профессии.
53 1170057
>>170047

>я вообще программист-архитектор по профессии



О!
54 1170156
>>168900

>Но это есть в книгах по Ораклу, не проще ли посмотреть там?.


Что там есть?
55 1170251
кто есть?
56 1170263
>>170251
есть
image.png15 Кб, 771x175
57 1170273
>>170263
Как мне создать триггер на удаление всех записей у которых одно поле равно удаляемому значению?
58 1170502
>>170273
У тебя каскад получается, ты в курсе?
не проще удалить через where без триггеров.
59 1170504
>>170156
Прибыл, Фейербах, Кайт. Читай.
60 1170505
Собираюсь написать СУБД-engine на js.
61 1170648
>>169622
Спасибо, анон, за подробное разъяснение! Вообще с английским не очень дружу, то есть читаю, понимаю, но это занимает раза в 3 больше времени и сил, чем та же инфа на русском. Но книга реально крутая, буду разбираться.

Была мысль поднять по виртуалке на каждом сервере, основа - Дебиан, гостевая - Windows Server 2012 R2, но идея мне кажется дико костыльной, причем хз, можно ли ОЕМ-ключи к винде использовать на виртуалке.
62 1170707
Аноны, поясните мне за оптимизацию SQL запросов в MS SQL. Чо это такое, как это работает? Во допустим у меня есть обычный select * from hui.dbo.vruke where DateTime = ""
ну вот мне надо таких запросов послать 12 штук за один раз, при этом разница в них будет только в DateTime - по два часа, то есть первый запрос с DateTime равным 00:00:00, второй 2:00:00 и так далее. И вот чего, как это можно оптимизировать?
63 1170745
>>169652
Не в зеленом госбанке случайно?
64 1170750
>>170707
Ну эта, сморя чо те надо сделать.
Запросы-то не ради самих запросов отправляются, верно?
Если ты хочешь получить какую-то информацию за сутки, тебе и надо отправлять один запрос на сутки плюс группировка по 2 часа.
65 1170758
>>167018 (OP)
Планирую начать использовать MongoDB, чтобы объединить в одном месте несколько больших наборов данных со множеством столбцов, где в случае SQL пришлось бы делать много таблиц.

Вот тут пишут, что из MongoDB неудобно делать запросы по типу SQL
https://habrahabr.ru/post/222083/

Если это так, то что, кроме упоминаемого Asterix, можно взять в качестве No SQL базы, чтобы можно было использовать команды, схожие с SQL ? Желателен модуль для Python.
66 1170826
>>170504

> Фейербах, Кайт. Читай.


Нихочу.

>>170502

>У тебя каскад получается, ты в курсе?


Да, я решил проблему.
67 1170869
>>170707
Используй динамический sql
Безымянный.jpg147 Кб, 629x901
68 1170991
Надо вкатиться в базы данных, с чего начать? Я не про учебник, а про само написание кода. Скачал с официального сайта MySQL, он требует .Net framework 4, скачал его с официального сайта, а он уже установлен, но на самом деле нет, и MySQL не хочет ставиться и .Net Framework не хочет ставиться, а я хочу ставиться по вене, анон помоги.
69 1171012
>>170745
Нет, в зеленом госбанке заебись платят, говорят.
70 1171015
>>170991
Попробуй поставить 4.5.2, а не 4.5
Сам базами не страдаю, так что сказал навскидку.
71 1171047
Только что узнал про дистинкт и чет не понял, нахуя он нужен если есть джойны? Когда его надо использовать?
72 1171074
>>170750

>Если ты хочешь получить какую-то информацию за сутки, тебе и надо отправлять один запрос на сутки плюс группировка по 2 часа.


Да неужели получить результат за сутки, а потом выколупывание данных за каждые два часа будет быстрее?
>>170869

>Используй динамический sql


Это что такое? Как мне поможет?
73 1171081
>>171074
это например такая конструкция
yoba:=ti

select * from you.pidor where you.youba=:yoba

когда ты делаешь это динамично, то план составление и исполнения запроса выполняется 1 раз на дохуя данных. То есть ты берёшь и меняешь yoba на что-то другое, например yoba:=mamka. Время на данный select тратится в разы меньше, ведь ты уже делал такую же выборку, анон, да ведь?

Дальше каждая норм СУБД имеет расширенный sql, можешь написать функцию или materialezed view.

Вообще если ты регулярно делаешь такие вопросы, то почему ты не подумал ещё о partition table?

>>Да неужели получить результат за сутки, а потом выколупывание данных за каждые два часа будет быстрее?



Ты не поверишь, но да. Можешь сделать вьюху с этими данными, а потом из перебирать. Вьюха это не только удобство, но и скорость.
74 1171087
>>171081
блин, это интересно, но мне не ясно, сработает ли в моем случае, я просто задачу упростил, дабы анонов не грузить. Я на шарпе пишу отчеты и тащу данные вот таким запросом
SELECT * FROM OPENQUERY(INSQL, 'SELECT
aL1_1_2\value, aL1_6_2\value, aL6_1_2\value, aL6_2_2\value, aL7_4_1\value, aP1_1_1\value, aP1_2_2\value, aP1_6_1\value, aP11_1\value, aP2_1_1\value, aP2_1_13\value, aP2_1_3\value,
aP2_1_5\value, aP2_2_1\value, aP2_2_13\value, aP2_2_3\value, aP2_2_5\value, aP3_1\value, aP7_8_7\value, aP7_8_8\value, aT1_2_1\value, aT2_1_12\value, aT2_2_12\value, aT24_4\value,
aT3_2\value, aT7_8_6\value, aV2_1_7_1\value, aV2_1_7_2\value, aV2_2_7_1\value, aV2_2_7_2\value
FROM WideHistory
WHERE DateTime = ""FinishTime""');
где в цикле заменяю FinishTime на нужное мне время 12 раз. Вот такое говно как то можно оптимизировать?
75 1171151
>>171087
Мм, вьюху делай
76 1171212
>>171074

>Да неужели получить результат за сутки, а потом выколупывание данных за каждые два часа будет быстрее?



Зависит от структуры базы(особенно индексов) и природы данных. В общем случае так лучше и правильнее.
Если же мелкие запросы предпочтительнее, так тоже может оказаться, то их надо делать с bind переменными.
77 1171214
>>171087
Даже если не дойдешь до вьюшки или хранимки, сделай bind переменные. Сейчас у тебя самый хуевый вариант из возможных.
78 1171220
>>171214

>bind переменные


а чо, а как? я просто в ms sql не очень (только на уровне простых запросов и Entity Framework). В двух словах с небольшим примером можно? А то в гугле только про mysql нашел биндинг.
79 1171262
>>171220
Если ты используешь bind-переменные для запроса , который вызвается несколько раз, то СУБД гораздо, гораздо быстрее разберет и выполнит второй и следующие запросы, используя данные из кэша. Если ты формируешь запрос простой строкой, то с точки зрения субд каждый запрос - уникальный и возникают дополнительные расходы на парсинг и построение плана, кэш не используется. Если таких уникальных запросов много, то ДБА тебе руки не пожмут.
Если ты используешь openquery, то там нельзя просто так использовать bind-переменные, вот же говно, не ожидал.

На твоем месте я бы попробовал сделать хранимую процедуру и вызывал бы ее с подставленным в цикле значением (но сначала попробовал бы все-таки группировки. Опять же, зависит насколько часто твой отчетник дергает базу)

https://social.msdn.microsoft.com/Forums/en-US/5da9950d-c526-4afe-a6d7-30488db2fb26/calling-sp-using-open-query-in-sql-server?forum=transactsql
80 1171299
>>168489
Aqua data studio, на рутрекере есть крякнутая
computers.gif8 Кб, 471x307
81 1171317
>>167018 (OP)
Задание: 1 ($erges: 2008-06-21)
Дима и Миша пользуются продуктами от одного и того же производителя.
Тип Таниного принтера не такой, как у Вити, но признак "цветной или нет" - совпадает.
Размер экрана Диминого ноутбука на 3 дюйма больше Олиного.
Мишин ПК в 4 раза дороже Таниного принтера.
Номера моделей Витиного принтера и Олиного ноутбука отличаются только третьим символом.
У Костиного ПК скорость процессора, как у Мишиного ПК; объем жесткого диска, как у Диминого ноутбука; объем памяти, как у Олиного ноутбука, а цена - как у Витиного принтера.
Вывести все возможные номера моделей Костиного ПК.

Есть идеи как такое решить?
82 1171439
>>171317
изи же. Но знаешь, sql-ex и ты идут на хуй.
83 1171520
>>171317

>Есть идеи как такое решить?



А у тебя? Хоть строчку написал? Где твои собственные соображения? М?
84 1171584
Анон, поясни за базы данных на графах, например neo4j. Правда, что с ними быстрее селектить джоины? Вообще какие у них практические преимущества перед реляционной классикой?
85 1171661
>>171584
Джойнов нет, селектов нет.
Там используются RDF, RDFS, SPARQL, OWL, SWRL, ну и CYPHER.
Что это такое - смотри в интернете. Логика совершенно другая.
Возьми OrientDB и попробуй, првда там sql даже очень далек от 92. Но есть возможность запилить граф.
Если хочешь область применения - социальные сети. Там это оптимально в отличии от реляционной, и вот подумай почему.
86 1171884
Сап. Посмотрел полторы лекции про индексирование и на вики просмотрел статью. Ничего не понимаю. Можете в двух словах, простым языком объяснить, что это?

Индекс (англ. index) — объект базы данных, создаваемый с целью повышения производительности поиска данных.
Что это за объект? В каком формате хранится? Как связан с таблицей?
87 1172042
>>171884

>Что это за объект


СУБД содержит разные объекты - таблицы, индексы, хранимые процедуры, триггеры, вьюшки. Т.е. индекс - это объект, отличающийся от таблицы.

Самая простая аналогия - предметный указатель терминов в конце учебника.
По этому указателю ты можешь быстро найти нужную страницу. Например, мануале по автомобилю написано: Топливный фильтр, стр. 30, 55, 100. Если такого указателя нет, то тебе бы пришлось просмотреть все страницы, а с индексом-указателем ты сразу получаешь конкретные номера.

В СУБД одна таблица может иметь много индексов - для разных колонок, содержать внутри функции от содержимого колонок. таким образом есть возможность быстро выгребать записи по самым главным атрибутам. Быстрее всего работают уникальные индексы - для одного значения индекса существует ровно одна запись и СУБД находит такую запись очень быстро. Индексы, для значения которых существуют много записей, работают медленнее (очевидно). При создании индексов нужно учитывать природу данных, примерное количество записей и характер джойнов, чтобы создать ровно столько индексов, сколько нужно, т.к. индексирование полей по которым никогда не будет поиска или джойна - пустая трата места на диске и времени на обновление этого индекса при операциях вставки, удаления, редактирования.

>В каком формате хранится


На данном этапе (да и на следующих) тебе это без разницы. Напрямую с индексами при написании запросов не работают, максимум, ты можешь указать индекс в хинте, чтобы СУБД его точно подхватила (может и не подхватить, если он по ее мнению не нужен)

>Как связан с таблицей?


Индекс создается на одну или несколько колонок определенной таблицы.
88 1172076
>>169622
Короче, сделал Hot Standby, слейв льет данные с мастера и доступен на чтение. Но как, и, главное, когда делать слейв мастером и наоборот! Читал про варианты с pgpool, достаточно удобно, но третий сервер для него мне никто не даст. Остается вариант постоянной проверки на слейве доступности мастера и, в случае его недоступности, продвижения слейва до мастера. И наоборот. Пока думаю решить это с помощью наколеночных батников, но вообще не уверен, будет ли это решение приемлимо работать. Очень большое желание вообще забить на все и уволиться, ибо знаний катастрофически не хватает, а процесс настройки затянулся уже более чем на две недели. Есть ли выход из тупика?
89 1172096
>>172076
Есть система мониторинга в фирме?
Просто пилишь в нее тесты, и когда сервер 100% падает, тл перекатываешься на другой. Напиши батники для переключения серверов и кинь на каждую машину. На всякий случай научись быстро отключать слейвы и мастеры, если один из них накроется. И настрой бэкапы на слейве, но не юзай их без необходимости.
90 1172118
>>172096

>Есть система мониторинга в фирме?


"А что это?" Серьезно, только 2 сервака с Windows Server 2012 r2 на борту. Ну там pgAdmin, но не думаю, что он чем-то поможет.

Основная проблема: ок, слейв переключился в мастер. Но когда мастер вновь поднимется, неизвестно же. То есть на момент запуска сдохшего мастера у нас параллельно два мастера. Как его вовремя задемоутить, чтобы не похерить базу? Запускать при загрузке службу только после проверки роли второго сервера? Это за гранью моего понимания.

Бекапы есть на мастере. Настроить на слейве точно так же, вроде, не проблема, это пока даже не горит.

Вообще это моя первая сколько-нибудь серьезная работа в IT, до этого только писал сайтики на вордпрессе и админил локалхосты в гос. учреждении. К понедельнику надо уже предоставить готовый отказоустойчивый кластер, и у меня все сильнее поджимает. Это вообще нормально тупить по 2 недели на таких задачах?
91 1172178
>>172118
Выпроси сервер на который ты поставишь Zabbix тебе нужно сделать пару вещей, поставить модули забикса на эти серваки, и заставить их общаться. Если понимаешь, что один сервер ебанулся и не отвечает минут 5: то лезешь на машину и включаешь батник, чтобы слейв стал мастером. В это время, если у тебя есть доступ к мастеру, то гасишь деятельность сервера и переводишь его уже в слейв( обычно такое не работает, так как у тебя сеть/отказ системы/подыхание хардов) .

Далее план таков: система мастера воскрешается, если разницы в redo мало, и какой-то уебан не переключился на него во время его отключки и не внес изменения - догоняешь его со слейва, если внес - ищешь scn переключения, откатываешься на него и дожираешь redo со слейва.)

Если все очень плохо - ты же делаешь бэкапы? )
Тебе надо будет восстановить до слейва( поэтому я и написал про включение wal+backup на слейве), а потом поменять их с мастером.
92 1172179
>>172042
спасибо
93 1172184
>>167018 (OP)
База данных postgresql 10.
Делаю селект в psql, получаю такую ошибку.

>[22021] ERROR: invalid byte sequence for encoding "UTF8": 0xf0 0xe5 0xec 0xee



При выгрузке дампа и попытке его импортировать та же самая ошибка.

Посему несколько вопросов:
1) Как non-utf8 текст вообще попал в базу? Postgres при вставке не проверяет кодировку или не конвертирует в server_encoding?
2) Как это можно исправить на текущей бд?
3) Как это можно воспроизвести? Как вставить non-utf8 байты в базу? Я нихуя не понимаю. Это нужно будет чтобы протестировать исправление.
4) Как сделать так, чтобы это больше не повторилось?
94 1172194
>>172178
Спасибо. А без внешнего сервера - никак? (сервер не выделят, потому что их просто нет, будет мифическая "циска", о которой никакой информации пока нет). Слейв сам может мониторить доступность мастера? Я вижу это так: тот же батник с автоматическим пингованием сервера (или проверкой доступности бд на нем, но это сложнее). Если пинг не проходит некоторое время, то все - становимся мастером. На клиенте (или на "циске", если такое возможно) можно тупо обращаться ко второму серверу, если первый не отвечает. Конечно, он может быть пока еще слейвом и не принять запрос, но это лучшее, что я пока придумал. В общем, мозгов у меня решительно не хватает, походу так и передам начальству.
95 1172205
>>172194
Ну, клиенту надо как-то проверять доступность. У тебя нет брокера, поэтому есть системы мониторинга, которым можно прописывать сценарий.
Вот клиент ебашит на бд, а потос как он узнает, что бд упала и перешла на слейв? Поэтому ставят либо брокера, либо систему мониторинга.

В оракл к примеру на клиенте есть tnsnames в который можно писать куда конектится, если мастер упал.
И то у тебя должна быть недоступность мастера, чтобы кто-то не нашкодил. Если есть такой механизм, то все гуд и тебе лишь надо ловить момент когда падает мастер.
96 1172230
>>172205
Как клиент проверяет доступность: пишет запрос, если он не выполняется, пингует сервак (или что-то там еще), если тот не отвечает, пишет запрос на другой сервак (сервака два, айпишники захардкожены). Это я сам только что придумал, но, думаю, реализовать будет несложно.

Насчет недоступности мастера не понял. Механизма такого, скорее всего, нет, если это не описанный мой выше бред.

Огромное спасибо, что тратишь время на меня. Но, походу, проебу я все-таки эту работу. Не помещается все это у меня в голове.
97 1172273
>>172230
Мастер не должен пинговаться, дибо он должен усиленно всем показывать что он не мастер.

Чувак, нахуй ты за это взялся? Ты там на должность администратлра бд устроился?
98 1172294
>>172184
Помоги с етой хуйней, Анон
99 1172300
>>172273
Инженер-программист официально ) Месяц назад пришел, ну и скинули на новичка то, что сами не знают, как делать. В любом случае, поговорил с начальством, если вообще не будет получаться, наймем какого-ндь крутого ДБА для настройки.

Вот, кстати, на такую интересную штуку наткнулся:
https://habrahabr.ru/post/308950/
Там даже исходник есть. Надеюсь, завтра это решит все мои проблемы )
100 1172308
>>172184
Set client_encoding to unicode
По умолчанию стоит.
Просто не копируй селекты из интернета в консоль. Он просит у тебя юник, а ты, блядь, кидаешь ему поганный 1251
101 1172316
>>172308
Если и не так, то никакая база не декодирует в свою кодировку.
Смотря какой язык юзаешь, чтобы не мучаться в винде есть ATL конвертеры.
У тебя просто какой-то чувау может вводит данные в вин1251
В базе есть функции ascii, decode , encode. Последние для битовых данных.

initdb -E encodename

Автоматическая конверсация из пскл \encode win1251

Если есть прослойка то настрой libpq в приложении
102 1172335
>>172042
а можешь привести пример?
есть таблица - id, имя, фамилия, отчество, год рождения и т.д. и она привязана через id к таблице техника сотрудника, где поля такие:
id техники, тип, модель, марка, серийный номер, номер ЦСО. Как индексация здесь может, что либо оптимизировать?
103 1172419
>>172335
Сотрудников у тебя, положим, будет десять тысяч человек.
У каждого будет по десятку девайсов - итого в таблице девайсов 100 тыс. записей.

Допустим, у тебя есть условный сотрудник Сычев. Ты хочешь найти для него всю технику.
Без индекса тебе придется перебрать все 100 тыс. записей в поисках техники именно Сычева.
100 тыс. ради 10 записей. А если базу постоянно теребят даже несколько десятков человек, то все будет очень медленно. А если нужно получить список сотрудников с девайсами, то будет еще медленнее. А если таблица не помещается в память, то добавятся издержки дисковых операций.
Теперь создаем индекс для техники по ид сотрудника.
В общем случае строки в таблицах хранятся неупорядоченно, а индекс отсортирован (обновление происходит при каждом изменении автоматически).
На отсортированном наборе данных поиск происходит очень быстро.
Например, чтобы найти двоичным поиском на отсортированном наборе из 1000 записей одну, нужно просмотреть не более 10 значений, а на 100000 - не более 17.

Т.е. вместо просмотра n записей ты просматриваешь log (n) записей.

В СУБД используются более сложные алгоритмы, чем двоичный поиск, но они тоже работают за логарифмическое время.

Итак, мы нашли кусок в индексе, который отвечает за технику Сычева. Теперь СУБД перебирает найденные значения индекса и вытаскивает оттуда указатели на физическое расположение строк в таблице девайсов. Т.е. не нужно перебирать 100 тыс. записей, а берем конкретный блок данных и берем конкретные записи в нем. Доступ к данным проходит на низком уровне, очень быстро.

Так же индекс помогает при удалении Сычева из таблицы сотрудников - нам ведь надо удалить или пометить null все его девайсы и других операциях с изменениями данных.

Воте еще очень простой пример, есть дом на 250 квартир и тебе нужно найти квартиры, в которых есть белая собака. Ты можешь обойти все квартиры, спрашивая, есть ли у вас собака. А с индексом у тебя изначально есть список квартир, в которых есть собака допустим их 20 (это если у нас индекс только по виду животного, кошка-собака-крыса-хомячок-попугайчик, а еще можно добавить в него цвет). Среди 20 квартир ты довольно быстро найдешь белых собак.
103 1172419
>>172335
Сотрудников у тебя, положим, будет десять тысяч человек.
У каждого будет по десятку девайсов - итого в таблице девайсов 100 тыс. записей.

Допустим, у тебя есть условный сотрудник Сычев. Ты хочешь найти для него всю технику.
Без индекса тебе придется перебрать все 100 тыс. записей в поисках техники именно Сычева.
100 тыс. ради 10 записей. А если базу постоянно теребят даже несколько десятков человек, то все будет очень медленно. А если нужно получить список сотрудников с девайсами, то будет еще медленнее. А если таблица не помещается в память, то добавятся издержки дисковых операций.
Теперь создаем индекс для техники по ид сотрудника.
В общем случае строки в таблицах хранятся неупорядоченно, а индекс отсортирован (обновление происходит при каждом изменении автоматически).
На отсортированном наборе данных поиск происходит очень быстро.
Например, чтобы найти двоичным поиском на отсортированном наборе из 1000 записей одну, нужно просмотреть не более 10 значений, а на 100000 - не более 17.

Т.е. вместо просмотра n записей ты просматриваешь log (n) записей.

В СУБД используются более сложные алгоритмы, чем двоичный поиск, но они тоже работают за логарифмическое время.

Итак, мы нашли кусок в индексе, который отвечает за технику Сычева. Теперь СУБД перебирает найденные значения индекса и вытаскивает оттуда указатели на физическое расположение строк в таблице девайсов. Т.е. не нужно перебирать 100 тыс. записей, а берем конкретный блок данных и берем конкретные записи в нем. Доступ к данным проходит на низком уровне, очень быстро.

Так же индекс помогает при удалении Сычева из таблицы сотрудников - нам ведь надо удалить или пометить null все его девайсы и других операциях с изменениями данных.

Воте еще очень простой пример, есть дом на 250 квартир и тебе нужно найти квартиры, в которых есть белая собака. Ты можешь обойти все квартиры, спрашивая, есть ли у вас собака. А с индексом у тебя изначально есть список квартир, в которых есть собака допустим их 20 (это если у нас индекс только по виду животного, кошка-собака-крыса-хомячок-попугайчик, а еще можно добавить в него цвет). Среди 20 квартир ты довольно быстро найдешь белых собак.
104 1172423
>>172335
Мех. Немножко не так. Будет у тебя 100 сотрудников - будет 100 таблиц?
В таблицу техники добавляется айди того, кому она принадлежит.
Это проще апдейтить.

Чтобы запилить индекс тебе нужны уникальные айди, которые часто вызываются, но не равны 70% таблицы.

Давай такой пример.
У тебя есть таблица с документами и есть битовый признак обработки документа(1). Допустим у тебя 70% обработано и 30% нет.
Как ускорить таблицу? Инвертируешь признак обработки, то есть 0 - обработан, а индекс делаешь по оставшимся 30% .

То что ты описываешь скорее всего предпологает индекс-таблицу. Т.е. ты сортируешь данные по ключам. В твоем случае лучше делать ключи связанные с айди техники. Это лучший вариант, да и по айди техники тоже.
Но то что ты описал похоже на вложенную таблицу. То ест столбцы , а потом связанный по айди список техники, аля ообд.
Либо просто сделать первичный ключ по айди сотрудника, во второй бд первичныц по айди техникт, вторичный айди сотрудника
105 1172584
>>172419
извините, что туплю. Белая собака в моем примере - это как определенный вид техники, да? То есть будет разумно создать индекс, например, для принтеров LaserJet p9313, чтобы узнать у кого такие принтеры?
106 1172593
>>172308

>Просто не копируй селекты из интернета в консоль.


Ват.

>Он просит у тебя юник, а ты, блядь, кидаешь ему поганный 1251


Я нихуя не понел почему ты подумал, что я что-то откуда-то копирую. Просто делаю выборку на рабочей базе. Сама база на серваке под CentOS 7. Подключаюсь по ssh.
>>172316

Алсо почему вы думаете, что это именно win1251?
107 1172652
>>172593
Типичная ситуация.
Всегда найдеься хитрый сотрудник решивший залить clob например
108 1172750
>>172584
Да, это как определенный вид техники.
Если говорить о второй части вопроса, то индекс создается для колонки, а не для ее конкретных значений. Т.е. если у нас в колонке есть принтеры, сканеры, ксероксы и ноутбуки, то индекс будет содержать все эти типы. Можно, конечно, сделать функциональный индекс вида case when device_name = 'LaserJet1488' then 1 else 0 end но это довольно редкий прием - на каждый вид девайса индексов не напасешься.

Может помочь индекс по виду (принтер, ноутбук, сканер), по фирме-производителю, а можно сделать индекс по модели девайса (точнее, по upper(device_name)) или составной по нескольким полям, поставив более селективные поля вперед. Тут уже нужно смотреть по месту, как и что у тебя хранится и какие запросы наиболее характерны.

Допустим, сделали индекс по upper(device_name), тогда в запрос будем передавать введенную строку поиска в верхнем регистре и получаем набор записей для владельцев девайсов. А чтобы быстро расшифровать ид владельцев в их фио, поможет индекс по ид сотрудников - он будет уникальным и поэтому очень быстрый.
109 1172804
>>171262
спасибо, друже, просветил
112.png19 Кб, 584x175
110 1172906
Анонче, помоги составить запрос.
Есть таблицы на пикриле. Допустим в таблице users такие записи:
1 | Peter
2 | Fedor
3 | Vasily
В таблице stuff такие записи:
1 | 1 | shirt
2 | 1 | hat
3 | 1 | shoes
4 | 2 | gloves
5 | 2 | coat
6 | 3 | dress

Нужно составить запрос который вернул бы такой результат:
1 | Peter | shirt, hat, shoes
2 | Fedor | gloves, coat
3 | Valisy | dress

Я так понимаю тут нужно использовать агрегатную функцию и конкатенация, но как именно не могу сообразить.
111 1172913
>>172906
Разобрался, GROUP_CONCAT() нужна.
113 1173163
Добрый вечер.
Кидайте задачи, батя будет под пивас решать.
Пишу на оракле.
114 1173183
>>173163
- построчное резервирование
- хранимая поцiдура с проверкой значений
- журнал «кто что и когда делал с данными в таблице»
115 1173335
>>172906
Тут в каждой субд будет разная функция для этого.
14287437345130.jpg45 Кб, 381x604
116 1173376
>>173183
Я не батя, но:

>построчное резервирование


Нахуя, в чем задача? Нихуя не понятно. Скорее всего ты имеешь ввиду триггер.

>хранимая поцiдура с проверкой значений


Тоже непонятно в чем подводный камень и зачем.

>журнал «кто что и когда делал с данными в таблице»


Через триггер. На практике, если такое нужно сделать, то заказчик наглухо ебанутый. Нужно сделать не журнал, а отдельные поля и все это должно заполнятся фронтом. В остальных случаях это бессмысленно. Если тебе нужен аудит юзеров с правами на DML, то ты лох, пидор и нахуй из профессии.
117 1173428
>>173376
Батя одобряет.
118 1173430
>>173376

>На практике, если такое нужно сделать, то заказчик наглухо ебанутый.


Что плохого в том, чтобы знать историю изменений записи?

> Нужно сделать не журнал, а отдельные поля и все это должно заполнятся фронтом. В остальных случаях это бессмысленно.



Поясни идею с полями, причем тут фронт-енд и тезис о бессмысленности, почему так?

>Если тебе нужен аудит юзеров с правами на DML



Что ты тут подразумеваешь?
119 1173485
>>173376
Эй еба-ораклист, ты бд то свою знаешь?
1) локи же есть. Ты просто избалован, так как у оракла это в ядре.
2) через триггер всегда делается
3) аудит средствами оракла, тебе про такое никогда не говорили?
120 1173501
>>173485
Я не он, можешь объяснить, какое отношение имеет триггер к проверке параметров хранимой процедуры?
Polimery.jpg18 Кб, 446x280
121 1173503
>>173376
То, что вы на заводилова, дрочите —
ПИШИТЕ БЛЯДЬ, ЗУБАРЮ!!!
И запрашивайте, данные.

>Скорее всего ты имеешь ввиду триггер.


Вот и пиши триггер.

>Тоже непонятно в чем подводный камень и зачем.


Игорь, если я ещё раз такую хуйню, услышу — я запишу все расходы на комплексе — на вашу группу. Вы у меня штаны последние продадите.

>Нужно сделать не журнал, а отдельные поля и все это должно заполнятся фронтом.


Чо блядь у вас, дерьмократия?! Забудьте нахуй о дерьмократии. Пока у вас каждый кладовщик знает SQL, тут везде тоталитаризм, будет!

>>173428
Нет потенции — сваливай нахуй, с рынка!!!

>>173501
ПРОСРАЛИ ВСЕ ПОЛИМЕРЫ!!!
ВЫ ПРОСРАЛИ БЛЯДЬ!!!1111ы
122 1173530
Триггеры нахуй не нужны. Хранимки и пакеты наше все.
123 1173533
>>173430

>Что плохого в том, чтобы знать историю изменений записи?


>Поясни идею с полями, причем тут фронт-енд и тезис о бессмысленности, почему так?


Само по себе ничего, ее и хранить в ней можно, но звучит как: "Есть важный ручной справочник и мне нужно знать какая именно макака его заполняющая накосячит, чтоб лишить ее премии". Заполнение пользователем справочника через dml говорит о незрелости процесса. В самой таблице должны быть заполняемые автоматически, скрытые для пользователя поля(кто добавил запись, время добавления итд.), за этим и нужен фронт, АРЕХ, например.
>>173485

>аудит средствами оракла, тебе про такое никогда не говорили?


Говорили, но >Если тебе нужен аудит юзеров с правами на DML, то ты лох, пидор и нахуй из профессии.
К тому же эта штука медленная и базу нагружает.

>локи же есть. Ты просто избалован, так как у оракла это в ядре.


Я вообще задачи не понял. Зачем нужно построчное резервирование(репликация что ли?) и причем тут локи?
124 1173538
>>173533
Apex это фронт? Что же тогда бэк?
Штатное редактирование справочников dml? Это где такое есть? Все только через бизнес логику, и неважно где она- в хранимках или на сервере приложений.
Да и коннект пользователей в бд под уникальными логинами имхо анахронизм.
125 1173540
>>173533

>В самой таблице должны быть заполняемые автоматически, скрытые для пользователя поля


Не в той же таблице. А в отдельной схеме (schema), с другими правами доступа, создаётся точная копия каждой таблицы.
126 1173543
>>173538

>Да и коннект пользователей в бд под уникальными логинами имхо анахронизм.


Андрей Орлов, «Записки автоматизатора».
Читать до окончательного просветления.
127 1173607
>>173540
Один из рабочих вариантов.
Серьезный минус - структуру таблиц поддерживать в двух местах.
128 1173642
>>173543
Книга хорошая, читал, хотя и не самую последнюю версию.
Если что я говорю про то, что коннект в бд происходит под одним логином, но имя пользователя (например, доменная УЗ) при этом передается и обрабатывается.
129 1173671
>>173533

>>построчное резревирование


Том Кайт, штудируй.

>>аудит DML


Фейербах, Прибыл. Есть безопасность на уровне строк.
Плюс кто тебе не позволяет анализировать undo/redo? Аудит можно хранить не на этой же бд, обычно так и делают.
Если есть проблема что какое-то говно срет в систему организуешь сбор доказательств включая выборочно аудит скриптов. Если конечно этот ебушка не срет анонимными блоками.
То что ты не можешь оптимизировать аудит, это пиздец твои проблемы.
Ты можешь сохранять все инсерты/апдейты из системных схем, и переносить их на спец.серверы или во внешний файл, а потом анализировать.
130 1174461
>>173671

>построчное резревирование


>Том Кайт, штудируй.


Ты объясни что это или напиши как называется на английском.

>Фейербах, Прибыл. Есть безопасность на уровне строк.


Хуербах, блять! Если ты не можешь выстроить ролевую модель и процессы так, чтоб тебе не понадобился аудит, то иди нахуй. Придумай хотя бы один кейс где это действительно нужно.
>>173540
Зачем?
>>173538
Есть такая штука как контекст.

>Да и коннект пользователей в бд под уникальными логинами имхо анахронизм.


Хуясе, поясни.
131 1174665
Почему когда я запускаю MySQL из командной строки: "..MySQL Server\bin\mysql пароль" он вываливается с ошибкой, а MySQL Command line Client работает нормально с тем же паролем?

>>172906
Что это за прикольная картинка? Мне сказали учить MySQL и там кроме командной строки нихуя нет.
132 1174667
>>173671
аноны, есть книга где примеры наsql server 2000, у меня спермерка. что можно ставить, чтобы осваивать sql?
133 1174668
>>174461

>Да и коннект пользователей в бд под уникальными логинами имхо анахронизм.


>Хуясе, поясни.



Провокационное высказывание получилось, выше писал:
>>173642

Речь идет о конечных пользователях, например Светлана Ивановна из бухгалтерии или Аня из кадров. Удобно, если для всех задач они используют единую УЗ. Особенно это удобно если приходится работать с несколькими разнородными БД.
DaAxR11UMAAGnVM.jpg105 Кб, 1080x1080
134 1174716
27 лет, аналитик стагнирующий на уровне экселя. Не поздно ли? Расскажи мне анончик свою историю успеха
135 1174725
>>174716

Не поздно. 27 лет - пустяки.
136 1174759

>1174725


Спасибо тебе, на добром слове анончик
изображение.png106 Кб, 225x225
137 1174814
Сап, мейлач.
какой должен быть минимальный набор для освоения SQL?
имею спермерку или Linux.
Ставить Microsoft, Postgre, MySQL?
138 1174817
>>174461
Блед. Я тебе говорю, у тебя построчное резервирование уже в бд есть. Допустим у тебя постят две пидорашки в одну таблицу, и у тебя ебучий айди генерится сам без задвоений. Кайт приводит, что этот пиздец не в каждой бд был и есть, и он охуел, когда узнал что в оракле это есть, а он сам это пилил.

По вторлму пункту. Это нужно, когда у тебя система может быть скомпрометирована, или какой-то мудень решил пошатать целостность. Буквально если ты работаешь в банках, то там в 90% случаях есть бд, которая копит аудит по абс, чтобы ты оптимизировал затраты и смотрел, чтобы пидорашко-программист правильно инсертил или апдейтил справочники.
То на что я тебя сослал это RLS. Допустим у тебя есть база клиентов общая, и каждое структурное отделение должно видеть только своих клиентов. Что сделать неуч? Создаст пол каждое подразделение вьюху, а ораклист ебанет RLS. Это простейшие политики безопасности. Позволяет так же следит за аудитом избранных юзеров, а не всех. Просто добавив им еще одну политику. Чтобы не быть голословным пакет dbms_rls.
139 1174992
>>174814
бамп
140 1175011
>>174814
Ищи платные гайды в свободном доступе.
141 1175026
>>171047
Как ты обобщил джойны и дистинкт? джойны объединяют таблицы. Дистинкт в результатах выборки отсекает повторяющиеся значения в пределах стоблца, в котором он указан.
142 1175122
>>175026
мне плоха
1407730161001.jpg137 Кб, 900x900
143 1175145
>>174817

>Допустим у тебя постят две пидорашки в одну таблицу, и у тебя ебучий айди генерится сам без задвоений.


ПОСТРОЧНОЕ РЕЗЕРВИРОВАНИЕ, БЛЯТЬ! Это называется изоляция транзакций. И как минимум REPEATABLE READ есть в любой современной СУБД. Хотя иногда даже READ UNCOMMITTED включают ради производительности.
Б
144 1175165
>>174817

>Буквально если ты работаешь в банках, то там в 90% случаях есть бд, которая копит аудит по абс, чтобы ты оптимизировал затраты и смотрел, чтобы пидорашко-программист правильно инсертил или апдейтил справочники.


Такое у всяких диасовтовских абс на сайбейсе, у оракла ни разу не видел отдельной базы под аудит(и можно ли такое вообще сделать?). В абс макаки инсертят через фронт. У разработчика вообще максимум права на селект должны быть проде и препроде. Такой способ защиты может помочь только от дба.

>Что сделать неуч? Создаст пол каждое подразделение вьюху, а ораклист ебанет RLS.


Лучше вообще никого в базу не пускать и ебануть отчет в BI, чтоб тетя срака не джойнила таблицу саму с собой десять раз и не вешала базу.
145 1175193
>>174814

>225x225


Пиздец ты мудак конечно.
146 1175329
Привет ананас. Есть 2(tab1, tab2) таблицы со столбцами (a, b) и (b, c) соответственно. Как шлепнуть запрос, чтобы вывести (a, c). sqlite
147 1175839
Сап аноны
прошу прощения за оффтоп
а для рашки зп в полтора косаря уе - это норма или хуйня для итшника или для обычного рабочего?
148 1175853
>>175839

>норма или хуйня


>для итшника или для обычного рабочего


True
149 1176065
>>174665
Это http://dbdesigner.net/
Конкретно к MySQL он никакого отношения не имеет.
150 1176166
Котаны, кто в курсе, почему sql-ex.ru лежит?
XYN.webm8,3 Мб, webm,
483x420, 3:34
151 1176567
Питонисты здесь есть?
Можете прояснить >>1176524 ?
152 1176749
>>174716
Пошел работать в 21 учась на пятом курсе.
В 24 имею достойную ЗП, нашел годное место, счастлив, продолжаю расти как специалист
153 1176756
>>175839
У меня 2к$ ровно на руках, на жизнь хватает, но вообще планирую зарабатывать побольше в будущем.
>>176749
154 1176804
>>176567
Причем тут питон?
Что тебя смущает? Если у тебя разовая загрузка, и все работает за устраивающее тебя время, то все норм.
То что не каждую запись коммитишь - правильно.
И что у тебя за БД?
Например, в Орагле есть специальная утилита для загрузки данных, которая на низком уровне хуячит гораздо быстрее, чем DML. В твоей БД есть такое? Если да, до парси XML до csv например и его скармливай загрузчику.
155 1176902
>>174667
Под виндовс 7 ставятся все sql серверы вплоть до 2014го.
156 1176906
>>174668
В какой СУБ это реализовано? В MS SQL можно разве что разрешить группе пользователей ОС входить в SQL, и каждый из них может подключаться под логином винды как trust connection.
157 1176938
>>176804

>Причем тут питон? Что тебя смущает?


Наверное проблема в том что я не до конца понимаю session'ы и вообще "архетектуру" SQLAlchemy.

>То что не каждую запись коммитишь - правильно.


Окай.

>И что у тебя за БД?


PostgreSQL, только пару дней назад не без труда впервые накатил на винду.

>В твоей БД есть такое?

image.png633 Кб, 1282x592
158 1176941
Я создал генератор. Ебнул 1500 записей, я хочу вставить это в таблицу. У меня же все одинаково, так почему эта ебанутая SQL ругается? Что за криворукие ублюдки ее делали?
Московские Стройки.webm11,2 Мб, webm,
631x420, 4:33
159 1176943
Бля, случайно прожал энтер.

>>176804

>Причем тут питон? Что тебя смущает?


Наверное проблема в том что я не до конца понимаю session'ы и вообще "архитектуру" SQLAlchemy.

>То что не каждую запись коммитишь - правильно.


Окай.

>И что у тебя за БД?


PostgreSQL, только пару дней назад не без труда впервые накатил на винду.

>В твоей БД есть такое?


Я не хочу пока лезть во всякие тулзы, мне бы базово разобраться с реляционными СУБД и SQLAlchemy. Хотя похоже SQLAlchemy не очень подходит для такого переноса базы, но я продолжу пердолиться.
160 1176954
>>167018 (OP)
Аноны, такая задача:
мне нужно собирать показания с прибора, ~200 цифровых значений каждые несколько минут.
Я уже начал гуглить и сравнивать БД для хранения временных рядов, но наткнулся на один пост в инете и задумался:
"А так ли нужна мне БД для этой задачи? Могу ли я обойтись файловой системой?". Вот смотрите:
1) Изменять данные не требуется, только записывать и (надеюсь когда-нибудь) читать.
2) Как именно, какими кусками и в какой последовательности данные будут читать я хз, на данный момент сказать сложно.
3) Я могу раскидать файлы по папкам, разделив, например, по месяцам и дням, т.е поиск не станет большой проблемой.

Внимание вопрос: какие подводные?

С многопоточностью проблем вроде быть не должно.
Если идея с ФС звучит норм, то какой формат данных подойдёт для моей задачи? csv + gzip (bzip2?), hdf5?
Ещё, возможно не по теме, но хочется хранить данные минимум в 2 местах, какую распределённую ФС можно выбрать под эту задачу? Какие вообще используются? Гуглёж показал что существует несколько вариков, да и я сталкивался поверхностно с HDFS, но не хотелось бы лезть в хадуп инфрастракчер.
Куклачёрт.webm7 Мб, webm,
316x420, 3:21
161 1176976
Кстати, что значит/как расшифровывает "ctl" в названии бинарника pg_ctl, который запускает сервер постгреса?

А то я никак не могу запомнить эти три буквы, блять.
162 1176986
>>176954
Идея с ФС хуевая.
163 1176987
>>176954
А, ФС. Btrfs с софтверным рейдом.
164 1177001
Продублирую вопрос в реляционном треде.

Как версионировать структуры?
Объекты понятно. Хез_мэни вержнс и создаем копию.
А что делать со структурами, когда, например, есть конкурс, который состоит из этапов, которые состоят из испытаний. У всего есть свои свойства, последовательность и т.п. Короче структура. И вот она со временем эволюционирует, меняется состав, порядок и сами сущности. При этом есть прошлое, в котором проходили соревнования по старым версиям и есть уже запланированное настоящее, которое хочется при выпуске новой версии тоже проапдейтить.
Вот как это блять изящно версионировать? Я понимаю, что ответ достаточно очевидный - копировать и поддерживать целостность. Но может существуют какие-то практики и я просто не знаю.
165 1177011
>>176987
Спасибо, Анон, буду копать глубже эту тему. А есть опыт работы с этой связкой, или это теоретическая рекомендация? Никогда просто о таком не слыхивал ранее! (тем ценнее рекомендация)

>>176986
Можешь развернуть свою мысль? У меня была похожая как только сея идея посетила мою голову, но потом она перестала казаться мне такой уж тупой, ведь из всех ништяков настоящих БД мне нужна по сути только репликация.
166 1177019
>>176941

>Что за криворукие ублюдки ее делали?


Вот этот ублюдок накосячил :
>>176941

На самом деле тебе нужно задать явный формат даты для загрузки в твоем скрипте, а не думать, что СУБД сама догадается.
Это из разряда good practice. СУБД может разные настройки, а скрипт должен работать всегда.
Поэтому распиши преобразование из строки в дату с явным форматом.
167 1177240
>>177019
Я генерирую данные в другой ИДЕ и просто вставляю. Ну ок, но скорее всего погуглю как правильно формат делать, и просто попытаюсь в кавычки вставить
168 1177344
>>175329
Ты совсем дурак, бля? Ты не мог даже чуть-чуть теорию почитать? Будешь с каждым вопросом сюда приходить? Иди на хуй пидорас
y49eecc41.jpg91 Кб, 460x666
169 1177389
Объясните ньюфагу, отличается ли чем-то запуск Постреса под виндой как net start postgresql-x64-10 от pg_ctl start?
pg_ctl службу запускает или нет?
170 1177482
>>177389
Так зайди в список служб и проследи, хули ты как этот
171 1177532
>>176954
Все зависит от того для чего ты хранишь данные и какие задачи будешь решать. По твоему описанию может подойти все что угодно.
172 1177551
>>177532

>все что угодно


а чо там выбирать? NoSQL вместо выбора ФС и key+value вместо выбора формата данных, ведь для снятия статистики творческого мигания светодиода на ардуинке постгрес в его случае нинужен
1346429847210.jpg6 Кб, 205x200
173 1177593

>>117755


Ты Ванга? откуда ты знаешь что нужно в его случае?

>~200 цифровых значений каждые несколько минут


Ардуина будет генерировать ~овер 6*10^8 значений в год. Если нужен какой-нибудь Ad hoc-анализ "что за хуйня произошла позвачера", то лучше всего запилить выгрузку csv-лога с ротацией.
Если нужен анализ с машинлернигом и всей хуйней за 100 лет, то Hadoop. Если за год, то Python + csv-лог в фс.
Если нужен отчет в котором будет динамика скорости мигания светодиода в разбивке по датам, то RDBMS-name.
Если на основе основе данных ардуины нужна какая-нибудь операционная хуйня с огромным количеством чтений, то key-value(самый невероятный вариант).
174 1177594
175 1178124
>>177593

>Python + csv-лог в фс


Perl+BerkeleyDB с теми же самыми key/value
176 1178222
>>177011

> А есть опыт работы с этой связкой, или это теоретическая рекомендация?


Есть опыт в разных ситуациях и конфигурациях.

> перестала казаться мне такой уж тупой


Сама по себе перестала, видимо, потому что ты её не обдумывал.

Смотри:

> Как именно, какими кусками и в какой последовательности данные будут читать я хз, на данный момент сказать сложно



То есть тебе еще сложно сказать, как у тебя все на базовом уровне будет организовано, но ты уже с каких-то хуёв решил, что с ФС тебе будет лучше работать. Далее ты несешь про какое-то разбивание по папкам, и эту хуйню просто лень комментировать.

Мой тебе совет: бери хоть реляционку, хоть нереляционку, и делай свою хуйню, стараясь не выебываться.
1367168339862.jpg106 Кб, 387x370
177 1178256
>>178124
Haskell+Teradata+твоя мамаша
178 1178259
>>178256
в JSON пердоль, чо как не пердоля?
179 1178723
Вопрос по постгресу. Уменя есть колонка в таблице с варчар данными, которые есть обычный json. Типа:
{"Lat":"123","Lon":"231"}
Суть в том, что мне нужно сделать из неё jsonb, но так, чтобы значения были нумерик, а не текст. Обычный alter, который set type jsonb using col::jsonb переводит в обычный текст (значения в кавычках), а мне нужно от этих кавычек избавиться. Как быть?
180 1178743
>>167018 (OP)

>сиквел


Сиквел (англ. «sequel» [siːkwəl], от лат. «sequella» — «продолжение», «приложение») — книга, фильм или любое другое творческое повествование, по сюжету являющееся продолжением какого-либо произведения.

Ты ваще о чём?
181 1179449
Поясните зачем вообще нужна эта ваша релятивность/реляционность? Вот пришел я такой на первую работу, там был мускуль. Ну я смотрю там все таблицы разбросаны ПРОСТА ТАК, БЕЗ СВЯЗЕЙ, ну я и давай их связывать как дебил. Ну связал и что дальше? Не нельзя удалить юзера какого-нибудь, если не удалил его высеры на форуме например - ок, ну или наоборот можно все высеры разом удалить - удалив юзера? Кайф, ну да как бы, но на деле больше гемора с этим, потому что связи в базе не всегда древовидные, иногда блядь все вообще в цикл закручено и надо через боль и ад что-то менять. В общем как это нанесло мне в юности травму, так я и забил хуй на это всё. Работается нормально в вебе без этого всего в небольших проектах, а связи они главное в голове и в коде. Так собственно мб я что-то упускаю или не понимаю?
183 1179473
>>179468
Ну главное то, что ты дартаньян, да.
184 1179496
>>179449

> ПРОСТА ТАК, БЕЗ СВЯЗЕЙ


Главный вопрос тут такой: зачем вообще брали РСУБД? Господи, сколько я подобных быдлобаз переделал — не сосчитать.

> нельзя удалить юзера какого-нибудь, если не удалил его высеры на форуме например


ON DELETE CASCADE. СУБД следит за целостностью данных, а разработчик при создании таблицы не указал политики удаления данных.

> связи они главное в голове и в коде


Когда перестанешь делать гостевухи, поймешь, что был неправ. Ну или же если будешь работать не один.

> мб я что-то упускаю или не понимаю?


Упускаешь и не понимаешь. Смысла вот только пояснять нет, ибо ты уже выразил скепсис, не разобравшись в теме абсолютно. Либо ты понимаешь, что делаешь, либо нет.

И никто тут особо не против нереляционщины, бородатых адептов Кодда в треде нет. Просто такие ребята и в Монге такую хуету городят, что глаза на лоб лезут.
185 1179662
Господа, посоветуйте что можно почитать по делфи что бы быстро привязать к нему базу данных из 12 таблиц, но так что бы было только одно окно интерфейса. Кнопочную форму я сделать как додумался, а вот сделать все на одной форме в одном окне что бы менять можно таблицу было и запросы туда поставить не могу.
186 1179674
>>179662
Попробуй найти примеры открытия одной бд, потом остальные так же открываешь и аппендишь, что-ли.
187 1179827
>>179449

>в вебе


>в небольших проектах



Тебе не нужно искать ответы на свои вопросы, потому что ты веб-макака — пародия на разработчика. Оставь реляционную алгебру специалистам совершенно другого уровня квалификации и продолжай пилить говносайты за мелкий прайс.
188 1179861
>>179674
Вот тут то и проблема, не могу найти годный пример для этого. Да и я не особо это все понимаю, мне бы вот литературы какой или туторчиков на ютубе что бы с нуля все делать.
189 1179874
>>179861
А почему именно делфи? Чем богоизбранный быдлер на плюсах не угодил?
190 1179876
>>168224
Если студент может быть в нескольких группах.
Иначе лучше вязать группу прям в студента.
191 1179891
>>179876
Восстановление, переводы.
192 1179899
>>179861
Гугли ADO компоненты в Delphi (не ADO.NET, это другое). Сейчас уже не помню подробности, но все необходимое имеется. Можно, например, сделать комбо-бокс с выбором таблицы и отображением результатов в гриде. Можно вывести в грид результаты запроса или хранимой процедуры. И не нужно ничего дополнительно устанавливать (как в BDE), все уже встроено в винду.
screen.png10 Кб, 527x130
193 1180031
Ньюфаг просит помощи. Есть одна таблица sql server и с ней что-то не то. После того, как я создал для неё проект Entity Framework и инсертнул туда строку(нет, хуйни не творил, просто скопировал код из учебника), проебалась индексация по первичным ключам. Теперь это выглядит вот так и не хочет фикситься удалением строк. Что я сделал не так и как это говно пофиксить?
194 1181521
>>179449
Во всяких dwh вообще нет связей. Такие базы очень больше, со связями кучу задач просто не решить. Связи - это инструмент, использовать его или нет решать тебе.
14860445987750.jpg144 Кб, 873x948
195 1182203
>>167018 (OP)
Ньюфаг с платиной и ms-sql на связи.
Как вы работаете с дохуя количеством данных в интерфейсе?
Вот например есть абстрактное овердохуя количество записей (с байтмасивами) и если я попытаюсь сделать просто

>select * from zhopa


ляжет прога.
Так вот, следовательно, максимум пока что я придумал - поставить юзверю 2 поля - с какого поля и до какого поля вывести записи с таблицы, а там он уже сам разбереться.
Как вообще это на практике выглядит и как делают местные олдфаги?
Есть какой-то сайт с платиновых процедур?
Нужна процедура которая выдает таблицу с н-ного начала и до н-ного конца.
Есть ли в таблице конкретно № записи, не поле-айдишник, а именно № записи (чтобы циклом в процедуре выше пройти)?
Или я слишком заморочился?
196 1182282
>>182203
Ты вообще хуево структурировал базу, переделывай. Столбцы в таблицу добавлять — не такое же рутинное мероприятие, как добавление строк.
197 1182303
>>182282
Нихуя не понял, причем тут структура базы, я ее вообще не упоминал и не за это спрашивал.
198 1182341
>>182303
у тебя говно намешано на уровне бд, раз в бд столько столбцов, которые не нужны конечному пользователю.

Обычно конечный не должен видеть лишнего, либо делай вьюшку, либо еби конём свою структуру.
199 1182343
А теперь вопросы к ораклистам:

Как вам доки к 18?

Есть у кого книга про advanced tuning от Бурлесона?
И вообще есть ли аналоги данной книги?
200 1182346
>>182282

> я ее вообще не упоминал


Это не значит, что я не имел возможности понять, какой пиздец у тебя там творится.

> не за это спрашивал


Тебе нужно решить проблему, я тебе говорю, куда нужно смотреть. Костылями и изолентой можно сделать то, что ты хочешь, но это один из самых тупорылых вариантов. Переделывай, тебе нужно твои дохуя столбцов вынести в отдельную таблицу. Совета конкретнее дать при таких данных нельзя.
201 1182352
>>182346
>>182341
Сём, блять, нормально же блять вроде вопросы сформулировал.
Какие нахуй блять столбцы ты себе нафантазировал, какая блять впизду вьюшка?
Я не за выборку спрашиваю, я спрашиваю за отображение записей в конечном графическом интерфейсе для околоадмина/заказчика и как лучше/правильнее с этим совладать, кроме как выгрузить сразу всю базу, а то на что ты отвечаешь это уже совсем другой вопрос.
Или это такой местный тролинг тут?
202 1182355
>>182352
Ты не разбираешься в самых азах. Всю базу выгрузить для интерфейса — вообще лхуительные истории.
203 1182356

САП ДВАЧ, Я НЬЮФАГ, КАК НАПИСАТЬ ХЕЛОУ ВОРЛД
@
-СХОДИ В КАЧАЛКУ И ПСИХОЛОГУ, ПОБРЕЙСЯ, ПОЧИСТИ ЗУБЫ И КЛЕЙ ТЯНОЧЕК НА УЛИЦЕ
@
НО Я ВЕДЬ Я ЭТО НЕ УПОМИНАЛ
@
-ЭТО НЕ ЗНАЧИТ ЧТО Я НЕ ИМЕЛ ВОЗМОЖНОСТИ ПОНЯТЬ ЧТО У ТЕБЯ ПРОБЛЕМЫ С ТЯНКАМИ
@
НЕ ЗА ЭТО Я СПРАШИВАЛ
@
-ТЕБЕ НУЖНО РЕШИТЬ ПРОБЛЕМУ, Я ТЕБЕ ГОВОРЮ КУДА СМОТРЕТЬ


Тащемта я вообще не ожидал что мне тут даже отпишут, лучше чем ничего.
204 1182358
>>182356
Ты хуйню несешь и никакой конкретики не даешь.

САП ДВАЧ, Я НЬЮФАГ, НО У МЕНЯ ЕСТЬ ЕБАНУТЫЙ ВОПРОС И ЕБАНУТОЕ ПОНИМАНИЕ СУТИ ПРОБЛЕМЫ
@
НЕ ДЕЛАЙ ХУЙНЮ, СДЕЛАЙ НОРМАЛЬНО И ПРОБЛЕМЫ НИКАКОЙ НЕ БУДЕТ
@
ТЫ ХУЙНЮ НЕСЕШЬ, ЖДУ ДРУГИХ СОВЕТОВ
@
НЕ ДЕЛАЙ ХУЙНЮ, ПОДУМАЙ
@
ТУПЫЕ АНОНЫ ОПЯТЬ ПЫТАЮТСЯ МЕНЯ ЗАТРОЛЛЕТЬ


Скинешь схему БД — поясним конкретно.

> Вот например есть абстрактное овердохуя количество записей (с байтмасивами) и если я попытаюсь сделать просто


> select * from zhopa


Почитай описание селекта в документации. Там есть ключевые слова LIMIT и OFFSET. Никто никакую базу никуда не загружает, если не совсем долбоеб. Гугл на твой вопрос за секунду ответит.
205 1182359
>>182355
Как и сколько записей по дефолту выгружаешь ты?
206 1182360
>>182359
Одну. Ты не понимаешь, что делаешь. Пиздуй читать статьи для ньюфагов. Тебе абсолютно бесполезно отвечать на данном этапе.
207 1182361
>>182358

>LIMIT и OFFSET


Вот это уже ближе, спасибо
208 1182362
>>182358
Так ладно, попытаюсь по другому пояснить:
Мне надо (все столбцы блжад) конкретную таблицу (из которых может выбрать пользователь) вывести для просмотра. Сейчас у меня затычкой в программе стоит

> select * from zhopa


но, так как записей в будущем может быть теоретически дохуя, я резоно подметил что мое конечное говноприложение может лагать при загрузке/просмотре.
И поэтому все что я пока изобрел либо загружать в мою прогу допустим по 1к записей из таблицы либо дать возможность пользователю выбрать по какому-то фильтру (например загрузить с 40 по 1200 запись).
И поэтому спрашиваю как выводят таблицу для просмотра местные гуру-аноны.
209 1182366
>>182362
Либо пагинация используется, либо запрашивается для листинга минимум данных, а при необходимости запрашивается уже и остальное. Никто всё в памяти не держит, это типичная ошибка мудаков, которым лень статьи для самого начального уровня почитать.

https://doc.qt.io/archives/qq/qq07-big-tables.html
210 1182367
>>182366
Вот так вот и сразу, спасибо

>Никто всё в памяти не держит


Отобразить же мне как-то нужно изначально
211 1182369
>>182367

> Отобразить же мне как-то нужно изначально


Это не требует того, чтобы все в памяти держать. Насколько я понимаю, у тебя там сишарпопараша, наверняка ASP.NET, поэтому кури пагинацию, как у всех остальных. Если все же под десктоп пилишь что-то, то просто таблица нужна, держущая в памяти только определенное «окно» (видимая часть плюс еще по N строк выше-ниже; только не ручками говнокодь, а приложи усилия и изучи гугл на эту тему, чтобы нормальную обертку написать).
212 1182424
>>182362
если ты хочешь заебаться, то можешь сделать подгрузку, как в крутых TOAD/Workbench.
грузишь первые 500, когда пользователь пролистал до 500, то подгружаешь ещё 500.
Но если твой заказчик такой мудак, что хочет за раз 10к записей без фильтров, то тебе пиздец.
image.png99 Кб, 264x225
Ицик Бен-Ган пост Someone someone 213 1182552
Читаю статью Ицика, где он правит джойны и объясняет, как всё работает. Может кто объяснить тупому, что вообще происходит после Figure1? Вижу, что он сначала сравнивает иннер жойны, потом сравнивает результат с аутер жойнами и у него что-то там появляются две лишних строки, почему-то ему это не нравится и он чего-то правит. Что вообще происходит? Хуйцов соснул, из пистолета убился, не помогло.

http://www.itprotoday.com/microsoft-sql-server/logical-query-processing-clause-and-joins
214 1182587
>>182552
А, понял, у него там иннер жойн и аутер жойн выдавали один и то же результат, даже когда были non-matches, потому что он не там ON поставил.
215 1182953
>>182203
Пользователю дохуя записей в интерфейсе не нужно. Для того, чтобы получить вменяемое количество записей нужны фильтры.
Если же все-таки ты думаешь, что тебе нужно таскать из базули тысячи записей для отображения в интерфейсе (на самом деле нет), то посмотри что такое пейджинация.

>овердохуя количество записей


>с какого поля и до какого поля вывести записи с таблицы


Ты не путаешь поля со строками? Полагаю, что путаешь, потому что динамически выбирать поля для большого списка - крайне сомнительная и странная затея.

Как я понял тебе нужно вытаскивать данные большого объема. Поскольку ты сразу выбираешь сотни записей, то и байтмассивы твои не нужно вытаскивать, пока на то не будет явной необходимости. Т.е процедура для списка должна показать тебе только те поля, которые дают общее представление о записи, а уж потом, когда пользователь выберет конкретную запись - подгрузить объемные данные.
Если у тебя можно бегать по записям стрелками вверх и вниз, то есть смысл сделать загрузку дополнительных данных после того, как пользователь постоял на записи 0.2 - 0.5 секунд. Ну или явно по нажатию кнопки подгружать.

Тут не сайт платиновых процедур нужен, а элементарный здравый смысл. Если ты тащишь тысячи записей, то пользователю все сразу, в один момент их никак не обработать.
Леса.png438 Кб, 570x585
216 1183150
https://ru.wikipedia.org/wiki/Join_(SQL)#LEFT_OUTER_JOIN

>Оператор левого внешнего соединения LEFT OUTER JOIN соединяет две таблицы. Порядок таблиц для оператора важен, поскольку оператор не является симметричным.


>Порядок таблиц для оператора важен, поскольку оператор не является симметричным.


Серьёзно, блять?
217 1183232
>>183150
Абсолютно серьёзно. Левый внешний выдаст строки из левой таблицы, которым нет соответствия в правой.
15135802519310.mp48,4 Мб, mp4,
482x360, 3:11
218 1183239
Решил, что пора научиться делать эти ваши БД сам учу Пистон уже 3 месяц, скачал MySQL, получил этот красивый черно-белый терминал. Как получить красивое GUI как на оп-пиках? >>168478 Верно говорит, и надо эту штуку качать? Или есть ещё что-то более классное.

Так же вдруг оказалось, что я как еблан поставил MySQL 5.Х вместо последней восьмой версии. Скачал ее, а она предлагает обновить shell и connector, но не сервер. Это нормально? Сервер с 5 до 8 версий не менялся вообще что ли?
1372101043836.jpg172 Кб, 921x985
220 1183511
>>183232
Так, оказалось что я >>183150 просто ёбнулся.
Вот это

>Порядок таблиц для оператора важен, поскольку оператор не является симметричным.


Я упорно читал как

>Порядок таблиц для оператора не важен, поскольку оператор является симметричным.

image.png25 Кб, 642x461
221 1183837
>>183239
консолька оказалась лучше всех gui
Окей, начал вкатываться. Почему я могу использовать alias balance в order clause, но не могу в where clause? Так и должно быть или я чего-то не понимаю?
222 1184058
>>183837
Так и должно быть.
order by в последнюю очередь выполняется, ему уже доступны алиасы.
Чтобы в where можно было использовать нужен селект из селекта:

select balance
from (select avail_balance as balance
from account whre status = 'ACTIVE' and avail_balance > 2500)
where balance > 300000
223 1184149
Посоветуйте книги/курсы SQL. Когда учился в университете были у нас пары по этой хуйне. У меня что-то даже получалось. Щас хочу пойти работать в процессинговый центр в банк. Там одно из требований знание SQL.
224 1184150
>>184149
Алан Бьюли, Том Кайт... и практика, практика, практика.
И готовься к тому, что на собеседованиях там спрашивают хитрый джойн таблицы с ней же самой, да ещё и с группировкой :-(
225 1184152
>>184150
Хорошо. Спасибо
226 1184183
>>184058
Спасибо
227 1184238
>>184149
Книги хорошо читать как дополнение к практике.
Задачки по SQL можно решать на
sql-ex.ru
если совсем с нуля, то раздел Arcade->SQL на codefighting.
image.png125 Кб, 1197x1157
228 1184817
>>184238
Что не так?
229 1184828
Привет, допустим мне в одно поле нужно положить json, который потом вырастет до 1Мб и больше. Я могу это сделать в рамках sql (хотелось бы mariadb) или нужно переходить на noSQL?
230 1184873
>>184828
Тебе нужно запросы к этим JSON'ам обрабатывать или там они будут просто валяться?
231 1184920
>>184873
Да, будут запросы
232 1184944
>>184920
Для этого лучше постгрес взять, там полная поддержка JSON со всеми индексами без костылей. Ну или же документоориентированное что-то, конечно.
Screenshot1.jpg48 Кб, 886x483
233 1184949
>>184817
У меня когда-то такое решение прошло.
234 1185468
сап, программач! помогите нубу - не могу сообразить, мне нужно вычесть последнее значение выборки из первого значения той же выборки? Как это правильно сделать? Мне в голову приходит лишь мысль сделать два запроса с limit 1, а потом уже считать, но наверняка есть более изящное решение(субд mysql)
235 1185469
>>185468
Найдется решение в один запрос, конечно, но по эффективности у двух селектов оно будет сосать.
236 1185473
>>185469
да там селекты с джоином ещё, ну ладно, буду пытаться, спасибо
237 1185475
>>185473
Так оно и делается. Если есть возможность на стороне приложения кэшировать в какой-нибудь redis крайние значения, то это будет самый лучший вариант. Если нет, то делай вьюху. Еще лучше — материализованную, но для неё нужно будет с триггерами и процедурками поебаться, так как искаропки нет их, кажется. Будешь просто при необходимости обновлять значения в ней. Впрочем, с индексами первое и последнее значение все равно не дорого получать.
238 1185495
>>184949
Охуеть, все дело оказалось в distinct. Интересно, что у них за проверочная база такая, у которой есть зачем-то одинаковые записи в Laptop таблице.
Спасибо за ответ.
ninaandalexander.png429 Кб, 603x593
239 1185770
Базаны, есть вопрос:
Как правильно хранить вектора большой длины (несколько сотен минимум) в БД при условии, что по этим векторам нужно будет осуществлять поиск?
image.png10 Кб, 472x121
240 1185772
Делаю лабораторную по базам данных
oracl
c#
мне нужно подключить базу данных к вижуал студио
когда я пытаюсь это сделать, вылезает ошибка
что делать? как исправить?
вообще говоря, нужно ли над базой данных производить еще какие-нибудь действия, кроме ее наполнения и написания всяких запросов и триггеров?
импортировать каким нибудь образом?
я полный профан очень нужен ваш совет
241 1185774
>>185770
Уточни, что ты под векторами подразумеваешь.

>>185772
У тебя 64-битное приложение пытается 32-битные либы загрузить. Это невозможно. Либо оракловский SDK нормальной битности ставь, либо сишарпохуйню свою собирай под 32 бита.
242 1185775
>>185774
не собирается ток под 64 и 86
под 86 тоже самое
243 1185780
>>185774
Вектор как упорядоченная последовательность элементов.
244 1185783
>>185780
MySQL MariaDB, PostgreSQL, MsSQL?
245 1185786
>>185783
SQLite наверное?, потому как будет несколько независимых друг от друга наборов таких векторов и к ним должен быть доступ из мобильного приложения без интернета.предполагается, что пользователь скачивает сразу весь набор и пользуется ими
248 1185800
>>185798
Блядь, так и знал, что ты приебешься. Его рассматривают на примере упорядоченного списка.
249 1185810
>>185800
Мне кажется мы друг друга не поняли.
Сущность, хранимая в базе, имеет следующий вид:
x,y,z, feature_vector(500)
В ходе работы с базой мне нужно будет выполнять запросы типа
select * from entities where x = x_value+- error, y = y_value+=error...
Так для всех трёх координат и для каждого элемента вектора.
У меня стоит несколько вопросов:
1. Хули делать с вектором? Делать 500+3 столбцов кажется странной затеей, как обычно такую проблему решают?
2. Подойдёт ли для этого SQLite в плане производительности? Есть ли альтернативы?
250 1185824
>>185810
Понял. Тебе тогда лучше две таблицы сделать, наверное, и unique повесить на (x, y, z). У тебя тут классический one to many будет. Если в feature_vector не предусмотрена перестановка мест элементов, то можешь при селекте сортировать по PK, в противном случае придется еще одну колонку для порядка городить. В принципе, если тебе так удобно, ты можешь свой список сериализовать и обрабатывать его в приложении, чтобы с реляционками не ебаться, если тебе не интересно это. Будет всего одна таблица, не нужно будет с джойнами разбираться и все такое.

> Подойдёт ли для этого SQLite в плане производительности?


Еще не знает история случая, когда бы на Андроиде производительность в SQLite упиралась. Ты же не бэкенд для хайлоада делаешь, ну.
251 1185842
>>185824
А что даст уникальность x, y, z?
А с сериализацией неплохая идея, я правда хуй знаю, хорошая ли идея постоянно строки разбивать и конвертировать. Надо будет потестить, может лучше окажется в bytearray в блоб засунуть.
Спасибо за помощь.
252 1185851
>>185842

> А что даст уникальность x, y, z?


Отсутствие подводных камней с дублированием объектов плюс индексы.

> хорошая ли идея постоянно строки разбивать и конвертировать


Видно, что ты с реляционками почти не знаком и сделаешь хуйню. Так ты сделаешь меньше хуйни. Потом всегда будет возможность разобраться в технологии поглубже, но пока что ты будешь хуйней маяться вместо решения задачи. Добра.
2c6482f0b69e8f8d0c713dae033ae067.jpg38 Кб, 512x512
253 1186284

>То чувство, когда, работая веб-макакой в довольно мелком проекте, половину рабочего времени тратишь на индексы и дрочь на снижение total cost запроса с 1000 до 950

254 1186288
>>168766
Годная схема. Что за софт?
255 1186627
Что-то не могу нагуглить. "FROM col_name c" - это просто сокращённая версия "FROM col_name AS c"?
256 1186683
257 1186959
Спрошу здесь:
Как лучше всего в базе данных реализовать учёт рабочего времени?
258 1187261
Что из себя представляет работа ETL developer-ом????
259 1187344
>>187261
Пилишь потоки, маппинги всякие в ETL-инструменте, консультируешь аналитиков, оптимизируешь скрипты. Плюс еще куча всяких связанных задач. Что конкретно тебя интересует?
260 1187399
>>186959
На такой неконкретный вопрос ты не получишь нормального ответа.
261 1187443
>>187399
Как конкретизировать мой вопрос?
262 1187446
>>187443
Чье рабочее время ты собираешься учитывать? В каком контексте? Какие задачи должны быть решены?
263 1187448
>>187446

>Чье рабочее время ты собираешься учитывать?


Просто регистрировать время ухода и прихода работников.

>Какие задачи должны быть решены?


Учёт рабочего времени: сколько часов в день, неделю месяц, год по отдельным сотрудникам и целым отделам, а так же опозданий и ранних уходов.
264 1187454
>>187448
Ну ок.

Какие твои собственные соображения по теме? Что непонятно/вызывает сложности?
265 1187511
>>186959
Первая очевидная мысль - таблица с периодами, привязанная к работникам, с парой таймстемпов или tsrange.
266 1187773
>>187454
>>187511
Создаётся таблица Сессия, в ней три обязательных пункта "ИД", "начало" и "конец"
DataRecievied создаёт строку с ИД и временем в "начало". Если ИД повторяется, то просто добавляется время в "конец".

А вот что дальше?
267 1187778
>>187773
Какой ид повторяется?
Очевидно, что ид сотрудников не должны быть уникальными. Потом по ним дергаешь все рабочие сессии и уже их обрабатываешь, как хочешь.
268 1187781
>>187778

>Какой ид повторяется?


RFID-тэг.
269 1187826
Читаю этого вашего Алана. Анон, объясни логику здесь. Почему серверу надо прочитать все 24 записи в этом случае? Взял таблицу аккаунты нашел по индексу записи, с соответствующими id и взял из этих записей avail_balance, и все. Почему надо создавать индекс для пар (id, avail_balance) ?
изображение.png23 Кб, 667x322
270 1187841
>>187826
И почему в этом упражнении правильный ответ - создать индекс на пару (дата_транзакции, количество), а не на все 4 колонны вместе, как делается индекс на все используемые колонны в предыдущих картинках.
271 1187922
>>187773

>Потом по ним дергаешь все рабочие сессии и уже их обрабатываешь, как хочешь.


А примерно, как должна выглядеть такая БД?
image.png48 Кб, 1354x393
272 1187963
Анончики, выручайте. Завтра за щеку брать. Как гуглить проблему: У меня сначала в процедуре просто по входному параметру устанавливал поля с разным значением. Теперь я джойню две таблицы и хочу, чтобы в последней я смог поменять одно поле. Как это сделать?
273 1187984
Аноны, а в чём вы схемы рисуете?
Мне вот подкинули ТЗ на йобо-фитнесс-приложение и там довольно интересная схема таблиц выходит и что бы не запутаться и контактировать с другими разрабами думаю перенести мысли по БД в графическую среду.
Под руку попадаются лишь сомнительные онлайн сервисы, а есть ли что-то десктопное и мощное?
P.s. планируем юзать postgresql+mongodb
274 1187986
>>187984
пиши схемы в виде текста, а визуализация пусть происходит автоматически какой-нибудь тулзой.
275 1187990
>>187986
Вот меня и интересуют тулзы для такой визуализации текста
276 1188064
>>187773
Турникет понимает, в какую сторону прошел человек - вход или выход?
Поля Начало, Конец обязательными делать нельзя - у тебя он даже просто войти не позволит, будет ругаться на то, что Конец пустой. Но это не все - допустим, у тебя выключили свет с утра , всех пустили в обход турникета, люди выходят вечером - никого выпустить не можем.

Я бы хранил так (навскидку, не претендую на абсолютную истину):
Таблица pass --Факты входа - выхода

pass_id number --Уникальный идентификатор факта прохода через турникет
device_id number --Идентификатор терминала
card_id number --Идентификатор карточки пропуска
pass_date date --Момент прохода через турникет
pass_direction number --Направление прохода (0/1)
pass_status number --Статус (ошибка, успешно)

Таблица рабочих сессий work_session:

work_session_id --Уникальный идентификатор сессии
employee_id number --Сотрудник
work_session_begin date --Момент начала сессии
work_session_end date --Момент окончания сессии
begin_pass_id number --Ссылка на факт прохода для начала сессии (может быть пустой)
end_pass_id number -- Ссылка на факт прохода для окончания сессии (может быть пустой)
work_session_begin_user varchar --Кто проставил начало - нужно продумать
work_session_end_user number varchar--Кто проставил окончание - нужно продумать
work_session_begin_reason_id --Причина начала работы nullable
work_session_begin_reason_id --Причина окончания работы nullable

Тут нужно оставить возможность заполнять моменты начала и окончания работы вручную и автоматически (на основе базового режима работы сотрудника)- на случай отказа турникета.
Разумеется, если время прописалось турникетом, то изменять его уже нельзя.
Т.е. если система видит, что условный Алеша Сычев пришел на работу 5 июня, а до этого он пришел 3 июня в 7 утра и с тех пор не выходил, то она должна свериться с дефолтным режимом работы (допустим 8 часов) и автоматом проставить что Алеша 3 июня закончил работать в 15 часов.
У определенной группы пользователей должна быть возможность редактировать эти данные, естественно, с ведением аудита - кто, что и когда менял.
Можешь добавить причины начала и окончания сессий - если тебе нужно будет потом отличить отгулы на полдня от прогулов.

Как должна выглядеть БД - вопрос странный.
У тебя должны быть таблички фактов прохода сотрудников через турникет, реестр турникетов, реестр карточек, табличка привязок карточек к сотрудникам (с учетом актуальности), реестр сотрудников, реестр отделов, реестр связи сотрудника и отдела. Плюс служебные таблички для статусов, причин и т.п.
276 1188064
>>187773
Турникет понимает, в какую сторону прошел человек - вход или выход?
Поля Начало, Конец обязательными делать нельзя - у тебя он даже просто войти не позволит, будет ругаться на то, что Конец пустой. Но это не все - допустим, у тебя выключили свет с утра , всех пустили в обход турникета, люди выходят вечером - никого выпустить не можем.

Я бы хранил так (навскидку, не претендую на абсолютную истину):
Таблица pass --Факты входа - выхода

pass_id number --Уникальный идентификатор факта прохода через турникет
device_id number --Идентификатор терминала
card_id number --Идентификатор карточки пропуска
pass_date date --Момент прохода через турникет
pass_direction number --Направление прохода (0/1)
pass_status number --Статус (ошибка, успешно)

Таблица рабочих сессий work_session:

work_session_id --Уникальный идентификатор сессии
employee_id number --Сотрудник
work_session_begin date --Момент начала сессии
work_session_end date --Момент окончания сессии
begin_pass_id number --Ссылка на факт прохода для начала сессии (может быть пустой)
end_pass_id number -- Ссылка на факт прохода для окончания сессии (может быть пустой)
work_session_begin_user varchar --Кто проставил начало - нужно продумать
work_session_end_user number varchar--Кто проставил окончание - нужно продумать
work_session_begin_reason_id --Причина начала работы nullable
work_session_begin_reason_id --Причина окончания работы nullable

Тут нужно оставить возможность заполнять моменты начала и окончания работы вручную и автоматически (на основе базового режима работы сотрудника)- на случай отказа турникета.
Разумеется, если время прописалось турникетом, то изменять его уже нельзя.
Т.е. если система видит, что условный Алеша Сычев пришел на работу 5 июня, а до этого он пришел 3 июня в 7 утра и с тех пор не выходил, то она должна свериться с дефолтным режимом работы (допустим 8 часов) и автоматом проставить что Алеша 3 июня закончил работать в 15 часов.
У определенной группы пользователей должна быть возможность редактировать эти данные, естественно, с ведением аудита - кто, что и когда менял.
Можешь добавить причины начала и окончания сессий - если тебе нужно будет потом отличить отгулы на полдня от прогулов.

Как должна выглядеть БД - вопрос странный.
У тебя должны быть таблички фактов прохода сотрудников через турникет, реестр турникетов, реестр карточек, табличка привязок карточек к сотрудникам (с учетом актуальности), реестр сотрудников, реестр отделов, реестр связи сотрудника и отдела. Плюс служебные таблички для статусов, причин и т.п.
277 1188080
>>188064
Спасибо за развернутый ответ.

>Поля Начало, Конец обязательными делать нельзя - у тебя он даже просто войти не позволит, будет ругаться на то, что Конец пустой. Но это не все - допустим, у тебя выключили свет с утра , всех пустили в обход турникета, люди выходят вечером - никого выпустить не можем.


Там сетевой контроллер, который не видит разницу между входом и выходом, только факт срабатывания считывателя (очень древняя технология древних).

>Как должна выглядеть БД - вопрос странный.


И если честно, мне нужен учёт времени и хранение полученных результатов (по дням, месяцам, годам) и отделам, с учётом того, что люди могут выходить из здания по делам и возвращаться обратно в течение смены. Не хранить же для каждого сотрудника таблицу в 365 дней и рабочими датами?
image.png4 Кб, 228x164
278 1188109
>>188080
Если у тебя просто срабатывание датчика, то тогда колонка с направлением движения не нужна - ты ее не сможешь заполнить.

Учет времени и хранение у тебя будет по определению. СУБД для того и нужна - хранить.
Если у тебя всего одно здание, то какой поток в день? 1000? 2000? Это все очень маленькие количества записей.

Для каждого сотрудника будет несколько записей на день, да, это нормально. СУБД справится, не переживай.
14560781863370.webm2,8 Мб, webm,
480x360, 1:28
279 1188299
Что читать после Learning SQL? Что-нибудь по созданию самих баз, как правильно делать таблицы, чтобы все было нормально, как делать БЫСТРЫЕ sql запросы, чтобы выполнялись за 1нс и т.д.
280 1188380
>>188109

>Учет времени и хранение у тебя будет по определению. СУБД для того и нужна - хранить.


А вот как лучше всего это реализовать - я без понятия. Важно же не только хранить, но и получать доступ к хранимой информации.

>Если у тебя всего одно здание, то какой поток в день? 1000? 2000? Это все очень маленькие количества записей.


500 примерно.
281 1188450
>>188109
И ещё: есть какие-нибудь хитрые инструменты, облегчающие учёт времени в SQL?
282 1188501
>>188299
Тома Кайта.
283 1188625
>>188450
Какие инструменты? Че несешь? Уже с timestamp'ом без мокрописек совладать не можешь?
284 1189314
>>188625
Да я про разные. Например как при подсчёте общего времени учитывать только будние дни?
285 1189319
>>189314
https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html

> DAYOFWEEK


Это называется документацией.
286 1189351
>>189319
Ну вот, а теперь как лучше всего это использовать в учёте времени?
287 1189356
>>189351
Читай книги и статьи, никто за тебя ничего реализовывать не будет.
288 1189360
>>189356
Я же не прошу сделать за меня базу данных, просто спрашиваю как люди решали эту проблему.
289 1189390
>>189360
Ты еще даже со схемой не определился. Чтобы с тобой говорить, нужно её самому за тебя сделать, а потом примеры запросов показывать. Повторяю, никто этим заниматься не будет. Задача у тебя простейшая, за время, прошедшее с создания твоего вопроса здесь, ты бы её уже худо-бедно решил.
290 1189396
>>189390

>Ты еще даже со схемой не определился.


Так мне нужна идея, как это реализовать правильно, а не сами запросы (пока что). Пока что есть идея при создание нового пользователя создавать отдельную таблицу, где один столбец будет общим временем за день, второй - датой этого времени.
291 1189399
>>189396

> при создание нового пользователя создавать отдельную таблицу


Иди, блядь, читай, идеи свои охуительные отбрось и хоть немного разберись в теме. Потом поймешь, как мне тяжело сдерживаться и не покрывать тебя хуями. Ты свое время проебываешь и нихуя не делаешь. Пиздуй, блядь, читать. У тебя задача самого вводного уровня, соберись.
292 1189402
>>189399

>Иди, блядь, читай, идеи свои охуительные отбрось и хоть немного разберись в теме.


Так где можно почитать про учёт времени через sql?
293 1189459
>>189402
гугли opensource СКУД системы. если получится, то молодец.
Вообще что тебе нужно.
1) сделать опозанание где вход, а где выход.
2) Если человек не вышел, то ставить время 00:00, например.
3) додумать закрытие для случая два, если он вышел в 00:00.

Если ты не можешь спроектировать бд, то пиздец, блядь, купи готовое решение.
294 1189493
>>189396
Вот это круто, на каждую запись новую табличку. Дейтом теперь только подтереться можно, нормальные формы, отношения, кортежи, муть какая-то.
Так и делай, анон, потом покажешь, что получилось. Думаю, получится отличное решение, тиражируемое и масштабируемое.

Похоже ты совсем нулевой. Почитай хотя бы как вообще БД используются, хотя бы простейшие примеры как делается список сотрудников. Если ты думаешь, что таблички - это типа как файлики, то спешу разочаровать, это не так. Я тебе даже примеры таблиц написал, но судя по всему ты это вообще не воспринял. Иди на sql-ex.ru, читай все с нуля, тред сохрани, потом (если) осилишь саму идею РСУБД перечитаешь. Пока что тебе особого смысла нет объяснять, у тебя нет элементарных знаний.
295 1189497
>>189459
Вообще, мне нужен СКУД, мне нужно хранение данных о времени, что бы в любой момент можно было запросить то, сколько часов человек работал в мае 2018 года.

>>189493

>Вот это круто, на каждую запись новую табличку.


Ну так назови альтернативу, что бы можно было хранить данные по каждому дню у каждого сотрудника.
296 1189507
>>189497
хуле ты такой тупой то?

хранишь id сотрудника timestamp тип события(вход, выход)

а потом селекты нормально составляешь.
297 1189514
>>189497

>Ну так назови альтернативу



Назвал уже, перечитывай пока не поймешь:
>>188064
image.png64 Кб, 704x645
298 1189658
Зачем нужен этот курсор? Ну хочу я прогнаться по каждой строчке в моей БД, почему он выводит 3 или более таблиц, если я прошу его строчку ебнуть-то?
299 1189704
>>189514

>Назвал уже, перечитывай пока не поймешь:


И я уже писал: проблема не в контроле доступом, а в хранение результатов полученных результатов.
300 1189705
>>189507

>хранишь id сотрудника timestamp тип события(вход, выход)


Работник может и 15 раз за день выйти.
301 1189714
>>189705
Колонки:
id (сессии; автоинкремент, PK), id_сотрудника, время_начала, время конца. Мудак ты ленивый, ты бы уже после первого же тутора для детей понял, как это хранить можно. Но ты всё ждешь, когда за тебя все тебе в рот положат и разжуют.
302 1189718
>>189714
Повторяешь мою же идею, которую я упомянул вначале - >>187773
303 1189719
>>189718
Нет, у тебя идиотская идея. Никуда время не добавляется. Начинается новая сессия, запросом уже просуммируешь продолжительности сессий, но делать ты это будешь сам.
304 1189720
>>189719

>Нет, у тебя идиотская идея. Никуда время не добавляется. Начинается новая сессия, запросом уже просуммируешь продолжительности сессий, но делать ты это будешь сам.


Так ведь вопрос был и в этом: куда суммировать время так, что бы потом можно было его легко и просто достать.
305 1189721
>>189720
SELECT ... GROUP BY employee ... SUM(%time_delta%).
image.png390 Кб, 488x446
306 1189732
>>189704
Еще раз почитай. Там все ключевые моменты есть, но могу еще раз повторить - анализируй сырые данные с девайса и заполняй таблицу рабочих интервалов.

Единственная сложность - это то, что данные с девайса не дают тебе 100% данных для учета, в случае, если девайс на время выйдет из строя, тебе нужно предусмотреть возможность как автоматически, на основе каких-то правил или режимов работы, так вручную, с помощью клиентского приложения, разрулить входы без выходов, выходы без входов и ударную работу по 36 часов во время авралов.

Один из возможных вариантов дальнейших действий: выбираешь стек технологий - СУБД, платформу для бизнес-логики и для клиентских приложений с учетом желаемой архитектуры - простой клиент-сервер или трехзвенка
Рисуешь схему данных, создаешь таблички.
Пишешь бизнес-логику, она же бэк-энд, прикручиваешь к ней клиентские приложения.

Никаких вопросов про тонкости обработки дат в SQL быть не должно. Это все разжевано в документации к БД.
307 1189734
>>189721
А если надо взять данные за месяц у отдела N?
308 1189735
>>189734
На этот вопрос ты ответишь себе сам, когда освоишь джоины и агрегации.
309 1189736
>>189735
Что-то мне подсказывает, что ты тот ещё дилетант в работе с СУБД.
310 1189745
>>189736
Я спорить не буду. Порекомендую тебе съебаться из треда и начать что-то делать, но если останешься, то с удовольствием понаблюдаю за тобой.
311 1189749
>>189745
Небось ещё по IP пробиваешь.
312 1189758
>>189736
А ты прям мастер хуястер. Здесь вообще никого нормального нет.
313 1189894
>>189705
ты тупой? Ты настолько ленив, что не можешь считать суммы в процедурах?
ебать ты.

Я мог бы тебе написать всё это, но бабла у тебя конечно же нихуя нет, как и мозга
sql-mongo.jpg106 Кб, 718x724
314 1190825
315 1190836
Котаны, я макакий умеющий в JS. Решил понемногу , для духовного роста, вкатиться в БД. Хочу начать с sql понятно что логичнее с noSql, но все же sql поголовно везде
Подскажите какой нибудь sql учебник для самых маленьких.
316 1191145
>>189658

>select * from ... where sale = @idSale


А где гарантии, что у тебя там одна запись по этому условию?
1.png117 Кб, 569x434
317 1191303
Помогите с запросом.
Есть одна таблица в которой требуется найти дубли по двум столбцам и сгрупировать их. Так вот есть один запрос, выделен на пикче, нужно его оптимизировать-перепилить.
Дубли должны находится по колонке CommunicationType и SearchNumber, как и делает мой запрос. Однако, как на выходе не получать лишних "групп"? Например, на пикче есть две группы, но нужно что-бы была только одна т.к. первая полностью входит во вторую, но есть условие что в группе не может быть меньше 2х записей. сори за качество пикчи
Очень нужна помощь HALP PLZ
image.png62 Кб, 886x439
318 1191384
Аноны, нормально ли такое(связи между таблицами)?
Что убрать? Или оставить как есть?
319 1191398
>>190836
Мартин Грубер Понимание SQL.
Дейт - Введение в СУБД.
В процессе чтения обязательно задрачивай тысячи запросиков - на sql-ex.ru или на codefight.com в разделе Arcade -> SQL
320 1191407
>>191384
Нет, это ненормально, а очень и очень плохо.

Связи на картинках не будут нормально работать. Допустим, ты завел 2 типа упражнений с десятком подтипов в каждом, запустил систему, в табличке упражнений появились десятки тысяч записей. Затем ты меняешь в табличке типов название - и у тебя все перестает работать, т.к. записи в Exercise и ExerciseSubType будут ссылаться на несуществующее значение. Запросы вернут 0 записей.

Связи должны быть по первичному ключу - то есть по %table_name%_id.
Кстати, рекомендую называть колонку с первичным ключом по такому шаблону, потом удобнее джойнить будет. Добавь primary_key по этим колонкам и сделай ссылки на ExerciseTypeId, ExerciseSubTypeId и т .д.
Эти колонки должны заполняться из уникальной последовательности, т.е. если у тебя была запись с Id = 100, потом ты ее удалил и добавил новую, то новая запись должна иметь Id = 101, даже если предыдущая запись получится Id = 99 и эти Id у записей никогда и никем не должны изменяться.
Также нужно проставить для колонок-ссылок внешние ключи на таблицы-источники, построить по ним индексы и определить политику при удалении.

Вот тогда с точки зрения связей все будет правильно.

Но есть еще один вопрос - в Exercise есть ссылка на подтип и на тип одновременно, причем подтип может иметь только один тип. То есть, хранить ссылку на тип - избыточно, ты ее всегда можешь вычислить из подтипа.

И еще один момент - предлагаю тебе объединить табличку типов и подтипов в одну.
Во-первых, по сути это и есть одна сущность, во вторых - ты можешь строить иерархии с глубиной больше 1, в третьих меньше кода придется писать.

Будет это примерно так:

ExerciseTypeId number
ExerciseTypeParentId number
ExerciseTypeName
ExerciseTypeDescription
ExerciseTypeBegin date --дата начала действия записи
ExerciseTypeEnd date --дата окончания действия записи

Последние две колонки дают тебе возможность легко вести историчность записи, например, Тип стал неактуальным и его теперь не используют. Однако удалять его нельзя - на него ссылаются множество упражнений. Устаревшей записи проставляют ExerciseTypeEnd, при показе данных из справочника проверяется дата и показываются только актуальные - либо с не наступившей датой окончания, либо с пустой.

Резюме - убираешь табличку Подтип, в упражнениях оставляешь ссылку только на тип, табличку Тип делаешь иерархическим, делаешь первичные ключи во всех таблицах, связи переделываешь на первичный ключ, добавляешь внешний ключи, индексы по ним.

Советую посмотреть книжки из поста выше - судя по твоей схеме тебе будет крайне полезно, узнаешь много нового.
320 1191407
>>191384
Нет, это ненормально, а очень и очень плохо.

Связи на картинках не будут нормально работать. Допустим, ты завел 2 типа упражнений с десятком подтипов в каждом, запустил систему, в табличке упражнений появились десятки тысяч записей. Затем ты меняешь в табличке типов название - и у тебя все перестает работать, т.к. записи в Exercise и ExerciseSubType будут ссылаться на несуществующее значение. Запросы вернут 0 записей.

Связи должны быть по первичному ключу - то есть по %table_name%_id.
Кстати, рекомендую называть колонку с первичным ключом по такому шаблону, потом удобнее джойнить будет. Добавь primary_key по этим колонкам и сделай ссылки на ExerciseTypeId, ExerciseSubTypeId и т .д.
Эти колонки должны заполняться из уникальной последовательности, т.е. если у тебя была запись с Id = 100, потом ты ее удалил и добавил новую, то новая запись должна иметь Id = 101, даже если предыдущая запись получится Id = 99 и эти Id у записей никогда и никем не должны изменяться.
Также нужно проставить для колонок-ссылок внешние ключи на таблицы-источники, построить по ним индексы и определить политику при удалении.

Вот тогда с точки зрения связей все будет правильно.

Но есть еще один вопрос - в Exercise есть ссылка на подтип и на тип одновременно, причем подтип может иметь только один тип. То есть, хранить ссылку на тип - избыточно, ты ее всегда можешь вычислить из подтипа.

И еще один момент - предлагаю тебе объединить табличку типов и подтипов в одну.
Во-первых, по сути это и есть одна сущность, во вторых - ты можешь строить иерархии с глубиной больше 1, в третьих меньше кода придется писать.

Будет это примерно так:

ExerciseTypeId number
ExerciseTypeParentId number
ExerciseTypeName
ExerciseTypeDescription
ExerciseTypeBegin date --дата начала действия записи
ExerciseTypeEnd date --дата окончания действия записи

Последние две колонки дают тебе возможность легко вести историчность записи, например, Тип стал неактуальным и его теперь не используют. Однако удалять его нельзя - на него ссылаются множество упражнений. Устаревшей записи проставляют ExerciseTypeEnd, при показе данных из справочника проверяется дата и показываются только актуальные - либо с не наступившей датой окончания, либо с пустой.

Резюме - убираешь табличку Подтип, в упражнениях оставляешь ссылку только на тип, табличку Тип делаешь иерархическим, делаешь первичные ключи во всех таблицах, связи переделываешь на первичный ключ, добавляешь внешний ключи, индексы по ним.

Советую посмотреть книжки из поста выше - судя по твоей схеме тебе будет крайне полезно, узнаешь много нового.
321 1191452
>>191407
1. Понял про ключи, спасибо(дело в том, что я ORM юзаю, и тут с этим проще, оно само привязывается к primarykey unique с автозаполнением).
2. Можешь чуть подробней пояснить про типы/подтипы в одной таблице?
P.s. Спасибо за книги
322 1191532
Репощу тут. Есть около 50 миллионов записей по ~килобайту, нужно запилить удобный просмотр, сортировку и т.д. Вопрос по производительности. В идеале бы запилить в вебе чтоб не таскать везде БД, но я так понимаю с таким размером нужен оверпрайсный сервак если больше 3.5 человек будет пользоваться? На какие вообще скорости рассчитывать и сколько сожрет оперативки? В локальной БД же нормально будет шевелиться или на рядовой кофеварке 2ядра/4гига тоже будет больно?
323 1191636
>>167018 (OP)
призывается бородатый бдшник

ситуация: есть одна sqlite3 бд, в ней 130+ таблиц. В эти таблицы постоянно пишется дата, которая парсится с некого api. В тоже время, из этой базы берется эта же дата на обработку. То есть постоянные insert'ы и select'y.

Как бы ускорить это дело? все, конечно, на python
324 1191646
>>191636

> SQLite


Заменить на что-нибудь более серьезное. Остальные оптимизации не подсказать без экстрасенса, да и бесплатно никто не будет этим заниматься.
325 1191689
Как отсортировать по foreign_key (если есть) а иначе по id?

т.е.:

things(id, thing_id)

id: 1, thing_id: 3
id: 2, thing_id: null
id: 3, thing_id: null
id: 4, thing_id: null

Нужно отсортировать, что бы было 1 и 3 были рядом, например:

1,3,2,4

Как?
326 1191710
>>191689
Пример точно правильно написал?
15255595850130.webm3,9 Мб, webm,
960x540, 1:15
327 1191866
>>188299
Бамп вопросу!

>>188501

>Тома Кайта


Гугл выдал 6 учебников по ораклу, который вроде как не надо использовать потому, что он охуенно мощный и дорогой. В общем адская дрочильня для серьезных заданий, а не для вкатывальщика.
Мне бы что-то по MySQL, Postgre или по SQL вообще. Именно как делать все не только select, join а ещё например создание юзеров, таблиц, процеры какие-то, о которых у Алана ни слова, зачем, и как делать это быстро.
328 1191897
>>191866
>>188299

> как делать БЫСТРЫЕ sql запросы


EXPLAIN ANALYZE
329 1191908
>>191646
поглядел кучи рецептов по ускорению, вплоть до эксплоитов на плюсах, кажется.
Индиксация мне не подходит, потому что постоянный Insert. Думаю, остановится на многопоточности и реализации шаблона consumer. Еще говорят, есть кучи конфигов, которые не гонятся за производительностью.
Может быть вместе и сработает. Ну а еще докучи буду писать в память и только читать. Раз в какое-то время дампить в базу на диске.
какие подводные?
 .png6 Кб, 360x360
330 1191917
>>191897
Объясни.

>>191908
1) Какое отношение инсертов к селектам?
2) Каков процент фуллсканов больших таблиц в селектах?

3) Выбрасывай нахуй sqlite и меняй на оракл или postgre. Sqlite исключительно однопоточный и писать туда во много тредов что намеренно ссать себе на лицо.
331 1191928
>>191908

> Ну а еще докучи буду писать в память и только читать.


Кэшировать недьзя данные?

>>191917

> Объясни.


Ищешь тяжелые места, исправляешь, повторяешь, запоминаешь испробованные приёмчики.
332 1191930
>>191917

>меняй на оракл или postgre


- инсерты к селектам: 1 к 3
- 135 таблиц в бд. По 7M полей. Фулом не обхожу. Все вычисления из последних сотен тысяч.

так и поступлю
333 1191937
>>191928

>Кэшировать недьзя данные?


>буду писать в память

334 1191946
>>191937
Ты через жопу свои охуительные идеи описываешь. То, что ты озвучил, больше похоже на базу в tmpfs. С кэшированием данных иногда все просто, а иногда сложно и почти бесполезно, поэтому нужно смотреть по задаче. Вот я и спросил.
335 1191954
>>191946
убедили переходить пока не совсем поздно на Postgress
336 1191955
>>191954
Поддерживаю тебя в этом. Не забудь, что там есть полноценная поддержка JSON, что где-нибудь тоже может помочь в срезании углов.
337 1191960
>>191955
зацените на грани бреда: а что если, я сделаю каждую работу с таблицей как отдельную базу данных? И буду в 135 потоках ебашть в них асинхронно? Ну и запрашивать в этом же потоке.
Может так быть? все на питоне
338 1191962
>>191955
формирую джсон уже на фласке и в рест апи
339 1191964
>>191928
Я траллел, а ты не понял.
>>191930

> - 135 таблиц в бд. По 7M полей


И как sqlite работает? Не лопается к хуям?
>>191954
Ты мог бы посмотреть в сторону игнайта, тебе и встроенный кэш, и SQL какой-никакой, и масштабирование до плюс бесконечности, и встроенные мап редьюс операции близко к данным, но у тебя объемы крошечные, поэтому бери постргре и успокойся.
>>191960
Ебаклак просто. Возьми любую базу данных, которая нормально поддерживает многопоточность, не обосрись с блокировками (вдруг), обеспечь, чтобы твоя приложуха срала и жрала говно с БД также многопоточно и все будет хорошо.
340 1191967
>>191964

>все будет хорошо.

341 1191968
>>191967
Ну ладно, ты будешь идти на улице, тебя арестует нацгвардия, потом окажется, что у тебя в кармане был аргентинум и пойдешь по 228.
342 1192067
>>191689
вроде да, а что?

1 и 3 связаны, их надо выводить рядом при сортировке
343 1192132
Как лучше всего хранить отформатированный текст в БД?
344 1192142
>>192132
В БД.
345 1192144
>>192067
Так это у тебя иерархический запрос, только сортировку по веткам нужно будет сделать обратную.
Гугли "иерархический запрос CTE"
346 1192154
>>192142
Я имею ввиду, в каком формате? Есть три опции: html, Markdown и JSON. Сам склоняюсь в пользу последнего.
347 1192156
>>191452

>2. Можешь чуть подробней пояснить про типы/подтипы в одной таблице?



Да вроде все сказал, куда уж понятнее.
Когда у тебя рубрикатор в виде дерева, ты можешь поддерживать вложенность любой глубины, хоть 10 уровней. В твоем варианте ровно два уровня. Через две недели после запуска к тебе придет Машенька из отдела маркетинга и скажет - "а неплохо бы нам сделать три уровня для упражнений". И твоя схема поплывет - как в части рубрикатора, так и в части его использования - теперь у тебя для одного подтипа получается три уровня иерархии, а колонок только две.
Нужно делать новую таблицу, новую колонку, новую форму, новые запросы и т.д.

А когда все в иерархической структуре лежит, то тебе все нужно написать один раз. Конечно, код получится немного сложнее, но его в итоге будет меньше. Максимально возможную глубину иерархии ты можешь вынести в конфигурационную табличку, если нужно жестко ограничить пользователей тремя уровнями, например.

В табличке Упражнения будет ровно одна колонка с ссылкой на запись в типах. Из нее ты всегда можешь развернуть полную иерархию.

Если что-то непонятно, то задавай более конкретный вопрос.
348 1192157
>>192154

> html


Уже отрендеренный.

> Markdown


Который нужно рендерить.

> JSON


Который нужно рендерить.

Ты не понимаешь, чего хочешь. Тебе нужно еще подумать.
349 1192162
>>192157
Мне надо хранить текст, созданный с помощью react-draft-wysiwyg. Функции для рендера и конвертации одно в другое там есть. Хочу хранить в JSON потому что в СУБД, которую я юзаю (PostgreSQL), есть полноценная поддержка работы с ним.
350 1192257
>>192162
А что тебе с текстом нужно делать в базе?
351 1192281
>>192162

> Хочу хранить в JSON потому что в СУБД, которую я юзаю (PostgreSQL), есть полноценная поддержка работы с ним.


Дядя, ты дурак? Ты будешь делать запросы к отрендеренным постам в бложике? Отвечу: не будешь. Хуйню думаешь, думай ещё.
352 1192328
>>192156

> все в иерархической структуре лежит


Вот насчёт этого сможешь пояснить? Как она будет выглядеть ирл, структура такая, на реальных данных.
353 1192342
>>191303
вместо dense_rank() юзай row_num() over (partition by communicationtypeid order by number. потом обобщай запрос и отсекай те записи у которых row_number() будет > 1.
1.png45 Кб, 1005x709
354 1192450
Есть одна БД. она прикручена к спрингу но не суть
Смысл: есть юзеры. у юзера есть возможность создавать таблички(проекты?) в программе.
Например табличка нравится / не нравится. Записей может быть разное количество. Нравиться 5, не нравиться 8 и т д.
Количество записей в каждом проекты может варьироваться. То есть типизировать проекты и записать в 1 не получиться.
Как сделать БД? Разбить каждую запись в отдельную таблицу? Объединить все к хуям в большую?
355 1192473
>>192144
Погуглмл, что то сильно замудренные ответы. Я думал средствами sql это намного проще (
357 1192777
>>192719
Спасибо, буду разбираться
358 1193102
>>192473
У тебя тут получается обход дерева, по сути это и есть сортировка, только по особым правилам.
Если у тебя ровно два уровня, то можно и самоджойном обойтись, а если уровней несколько может быть, то нужно рекурсивно обходить.

Причем у тебя иерархия в обратном порядке задана, там еще аналитическую функцию нужно будет сделать для такой сортировки как тебе нужна.

Если у тебя всегда ровно два уровня может быть (т.е. в твоем примере 3 на втором уровне и у этой записи thing_id всегда пустой), то это проще сделать.
359 1193169
Какой тип данных лучше использовать для хранения номера телефона: text или bigint?
360 1193172
>>193169
Я в тексте храню. Можно и в bigint.
361 1193205
>>193169
8-800-555-35-35
8(800) 555 35 35
362 1193394
>>193169
Лучше в тексте.
Рано или поздно придется сохранить номер с решеткой или звездочкой, или добавочный какой-нибудь.
363 1193430
>>193172
лучше разбить номер на все составные: регион int, оператор int, номер int. Дальше можно реляционные таблицы сделать к оператору, регионы и тд. Это в случае, если тебе нужно максимально быстро делать выборку
364 1193432
>>193430
У меня нет такой выборки. Храним в базе просто номера клиентов. Для смс рассылок достаточно, у нас тем более клиентов всего 30к и все из РФ, поэтому не имеет смысла.
365 1193444
>>193432
Если для рассылок - храни текстом, можно завести еще одно поле для типа контакта - телефон, почта, учетка телеграм, что там еще есть.
366 1193445
>>193430

>int


А если ведущий ноль?
367 1193447
>>193444
Мальчик, ну ебаный в рот, я конечно понимаю всё, но не учи отца ебаться. У тебя еще молоко, а может и не молоко, на губах не обсохло, когда я начинал с sql работать.
368 1193448
Аноны, а вы умеете делать минимизацию?
369 1193450
>>193448
Минимизацию функциональных зависимостей*
370 1193478
>>193447
30 лет-то перевалил, отец?

Если ты такой гуру, то вопросов как хранить контакты быть не должно.

Если хочешь по существу пообщаться - скажи, чем плохо хранить все контакты в одной таблице с указанием типа контакта (сотовый, мессенджеры и т.п.)?
371 1193481
>>193478
Разменял 4 десяток 2 года назад. По заданным тобою вопросам ответа не знаю. Извини меня пожалуйста. Мне нечем заняться в воскресенье вечером. Я одинок и мне грустно. Одна отрада траллить на харкаче.
372 1193487
>>193481

>мне грустно.


Можешь ссать детям итт в ротешники, настроение повышается
373 1193505
>>193481
Просто удивился такой реакции на безобидное предложение.

Я в твоем возрасте (сейчас 38) тоже один был, тоже грустно было, а сейчас вспоминаю те времена - свои плюсы тоже были.
Сейчас у меня другая крайность - семья, дети мелкие, никуда толком не выбраться в одно лицо, заботы, хлопоты и рутина, только на дваче урывками и сидеть осталось.
1.png33 Кб, 1094x662
374 1193521
>>192450
Сам себе не ответишь никто не ответит
Появилась идея сделать не каждую отдельную таблицу на каждый тип проетка юзера, а сводную по всем полям всех проектов. Насколько это хуевая идея?
Почему то навикет импортирует эту хует в 10й постгресс с ошибками, Реквест на другой проектировщик БД с экспортом
375 1193531
>>193521
Просто не совсем понятно, что ты хочешь сделать, анон.
Да, можно все атрибуты описать в одной таблице, есть такой подход. Погугли Entity-Attribute-Value.
Но нужно понимать, что это далеко не панацея и у этого подхода есть серьезные минусы.
376 1193542
>>193531

>Entity-Attribute-Value


Сейчас загуглю. Спасибо. Хоть будет откуда копать.
Несколько видов сущностей, которые могут отличаться между собой количеством полей, и каждое поле не обязательно...и количество не регламентировано.
Как список за / против составляется. 2 колонки - 1 за 1 против. И там и там есть какие то записи. Их может быть произвольное количество.
А в другом варианте еще появляется произвольное количество колонок..
377 1193556
>>192450
Что это за красивая бд с картинками? Тоже такую хочу!
378 1193591
>>193556
Navicat.
379 1193624
>>193172
>>193394
Спасибо. Выберу вариант с текстом.
380 1193832
Посоны. Помогайте. Есть 2 таблицы
table1:
ID
Name
cID

table2:
ID
cID
value

Для 1й записи может храниться множество значений во второй таблице.
Необходимо забрать только последнее значение из table2. Помогайте, горю.
381 1193880
>>193832
SELECT value FROM table2 ORDER BY ID DESC LIMIT 1;
382 1193888
>>193832
Пиздец ты даун.
383 1193893
>>193888
Не ругайся. Достаточно адекватный вопрос для треда. В начале не всё интуитивно понятно, и системный подход к обучению тут тоже не сразу начинает работать. Он же не просит схему на %курсовая_нейм% ему быстро накидать и объяснить всё.
384 1194910
>>193880
Спасиб, решил вопрос так:
SELECT
table2.Value
FROM
table2
LEFT OUTER JOIN table1
ON table2.cID = table1.cID
WHERE table2.cID = 1
GROUP BY table2.cID

>>193888
Шел бы ты кукарекать в /b/, петушок.
385 1194999
>>194910

> GROUP BY table2.cID


Зачем?
386 1195011
>>194910
Где гарантии, что ID первой записи всегда 1?

>>194999
Подождите, а каким хуем этот запрос вообще будет работать? Not group by expression
387 1195021
>>195011

> каким хуем этот запрос вообще будет работать?


Хз, где-то, может, и сработает.

> Где гарантии, что ID первой записи всегда 1?


В условии задания, полагаю.
388 1195548
Анон!!! Помоги, пожалуйста. Заставили срочно посчитать количество записей за один определенный месяц, причем количество по значению типа. Вообщем на сколько я смог додуматься это
select type, count()
from table
where time >= to_date('01.01.2017')
and time < to_date('01.02.2017')
group by type;
Но блин проблема в том, что уже 71 минуту считает, а результата нет.
Там таблица по фрагментам разбита, например я знаю что можно сделать запрос по одному фрагменту
select
from table partition(p_01_01_2017)
но как сделать запрос по диапазону фрагментов??? Или как иначе можно ускорить??
image.png166 Кб, 379x499
389 1195870
Анон, принеси мне эту книгу плз. Понял начала все эти, селекты, джойны, хочу более сложных вещей. Вот тут https://www.datapine.com/blog/best-sql-books/ Ее советуют. А ее нет нигде. Что гугл, что яндекс забиты одной рекламой лол. Остальные книги без труда нашел, а эту не могу. Ну или может что другое посоветуешь почитать, про серьезные дела, чтобы я не пошел на работу, умея только джойнить свой анус в селект ерохи.
391 1195893
>>195548

>Но блин проблема в том, что уже 71 минуту считает, а результата нет.


Наверное, индексов нет.
392 1195969
>>195548
Распаралель запрос, или задай range для partition
393 1195970
>>195893
>>195548
Двачую, наверняка на time индексы не повесили и СУБД шагает по абсолютно всем строкам. Но индексы у тебя ещё дольше будут делаться, поэтому жди окончания запроса или делай как >>195969
-кун говорит.
394 1196105
>>195548
A s planom zaprosa-to kak? Kak s planom-to?
395 1196141
>>195893
Там все нормально я думаю настроили. Это я просто не умею пользоваться
>>195969
А что такое range для partition?
>>195970
>>196105
Я не знаю даже что это такое...

Вообщем ночью придумал запрос выполнять по каждому фрагменту таблицы по отдельности. Прикинул что в одном месяце 30 дней, то есть 30 фрагментов. И сидел запускал 30 раз ночью такой запрос:

select /+ parallel(32) /type, count(*)
from table partition(p_01_01_2017)
group by type;

Потом результат каждого вставлял в librecalc. В конце в librecalc просуммировал формулой всех 30 дней значения и получил результат за месяц. Для ускорения использовал parallel, хотя его запрещают использовать почему то. Надо все таки как то фундаментально этот sql выучить, а то так запаришься.
Всем спасибо за помощь, пацаны!
396 1196169
>>196141
Ну блеать, просишь свою субд explain и она тебе план запроса говорит. Оптимизация и тюнинг эт пиздец. Люди книги на эту тему пишут
397 1196207
>>196169
Ну блин я понял, они реально шарят, уважение им.
398 1196568
Добрый день, делаю теги.

Допустим есть таблица с постами:
post_id, post_text
таблица с тегами:
tag_id, tag_name
и таблица связей
tag_id, post_id

У меня вопрос, как мне селектить все посты, что бы к каждому посту еще и массив тегов летел в каком-то виде? Желательно что бы каждый тег еще был отдельным элементом, а они не были склеены скажем в строку, спасиб.
399 1196694
>>167018 (OP)
У нас бэкэнд на MongoDB. Нужно хранить в БД оче большие файлы. Требуется собирать файлы по частям перед заливкой в бд. Оказалось, что это требование возникло из-за того, что GridFS не позволяет обновлять файлы в базе (дописывать к ним байты). Есть ли NoSQL СУБД, в которой реализован аппенд к файлам,уже хранящимся в бд? Как с этим дела в CouchDB?
400 1196701
>>196568
Тип сделай описательный. Либо запрос с order by post_id
Либо сделай анонимный блок, который будет тебе возвращать в loop селект от айди поста и все теги столбцом для этого поста.
401 1196703
>>196694
Монго же большие файлы вообще хранить не умеет. Пробовал хранить не сами файлы, а ссылки на них? А для ссылком развернуть распределенную файловую систему?
402 1196704
>>196703

>Пробовал хранить не сами файлы, а ссылки на них?


А почему все бд не делаю так? В чем профит хранить сам файл в БД вместо какой-нибудь строки "c:/yoba/cp/peperoni_pizza.png" ?
только вкатываюсь
403 1196706
>>196703

>А для ссылком развернуть распределенную файловую систему?


Как это сделать? Есть мануал?
404 1196721
>>196703
>>196704
Сказали, что недостатки монги мимо нашей задачи. Хранение файлов в распределенной ФС позволяет их редактировать. А нам нужно запретить редактирование. Но при этом надо позволить скачивать эти файлы.
405 1196724
Целый час думал об этом. Я правильно понимаю CAP утверждение?
1)Оно о distributed data storage. То есть каких-то баз данных, которые разделены между разными компьютерами. А то я сначала не понимал, как, выбрав Availability, кто-то сможет получить ответ от моей БД, если она только на 1 моем пк расположена и в данный момент лежит мертвая.
2)Consistency значит, что запрашивающий будет получать самую новую информацию, up-to-date то есть. Я пока пишу\учусь только на своем 1 пк, но я предполагаю, что в серьезных ебах видимо есть куча нод, которые принимают-отправляют транзакции, а есть какая-то группа главных еб, которая занимается сбором и учетом транзакций с остальных нод. И при выборе consistency мы или получаем от ответ от одной из главных нод, где учтены все изменения, либо идем нахуй, если нода лежит. А при выборе availability мы обращаемся сначала к главной ебе, если она не отвечает, то к ебе поменьше, и так, пока не получим ответ. Даже если он немного устарелый и в нем не учтены все транзакции.
Это так работает? Я все понял? Если я вкатываюсь в джуна, мне достаточно пока иметь это представление , и не пытаться понять, как вся эта адова машина работает на практике в серьезных предприятиях?

Ещё, я правильно понял, что consistency в CAP означает то, что я сказал - up-to-date информация. А consistency в ACID означает, что в бд есть защита от умников, которые в поле "возраст" вместо целого числа попытаются забить "23.5" или строку "23 с половиной годика"?
406 1196733
>>196721
Запрети редактирование, лол. Рфс может ебашить не только, как таковая. Ставишь перед рфс - машину брокера и все.

Или йопта, купите отраслевое решение у оракла, он теперь в носкл может, что вам и нужно, а его клобы/блобы до 2 тб

Если решение прямо стоит с монго, то можешь программно все сделать с делением файлов.

А так ты попал со своими NoSQL

>>196704
Читай курс по субд и танненбаума. Это под разные задачи.

Вариант с хранением далеко и не в базе снижает нагрузку, однако надо мучиться с политиками безопасности.
407 1196739
>>196724
Нет, не прав.

Согласованность - все узлы не противоречат друг другу в одмн эпизод времени.

Доступность - любой запрос к рс завершается корректно, но не факт что данные совпадут.

Устойчивость к делению - расщепление не приводит к некоректности ответа от каждой секции.

Почитай про Stand by system например у Оракла. Там все расписано, правда документы большие.
Ты в любом случае получаешь три режима ca cp ap
408 1196743
>>196733

>Запрети редактирование, лол


Обсудил это с лимлидом. Говорит: лишний слой, не хочу.
409 1196746
>>196743
А еще говорит, что после стадии MVP на этом слое будут серьезные изменения.
410 1196762
Поговорил еще с тимлидом. Он мне прислал песенку "Сделать на отъебись" и посоветовал иногда ее слушать, лол.
411 1196806
посоветуйте годный видеокурс по postgres
анон пророчил боль, анон знал что пророчил
412 1196819
>>196806

>видеокурс


>postgres


Лол, поищи аудиокнигу
1.png49 Кб, 750x451
413 1196880
Есть 3 таблицы и 2 стула.
Юзеры, их роли и третья. Как найти все роли одного юзера?
Хотя бы в какую сторону гуглить.
414 1196885
>>196880
Джйонишь таблицы и фильтруешь по юзеру.
415 1196928
>>196885
К сожалению я далек от SQL. Можно по подробней?
416 1196934
>>196880
select r2.role_id, r2.role_name from
(select user_id from app_user where условия на одного юзера) u inner join user_role r1 on u.user_id = r1.role_id inner join app_role r2 on r1.role_id = r2.role_id;
417 1196935
>>196934
Спасибо. Я примерно такое же сам писал.
418 1196936
>>196934
Хуйню написал.
>>196928
Погугли. Ключевые слова для поиска дал.
419 1196937
>>196936

>Хуйню написал.


>пук


А объяснить что не так слабо?
420 1196939
>>196936
Ну вообще работает.>>196934
А почему инер-джоин?

SELECT r.id,role_name FROM roles r
JOIN user_role ur ON r.id=ur.role_id
JOIN users u ON u.id=ur.user_id
WHERE u.nickname = 'User'

Названия строк не много не совпадают но думаю понятно.
Выдает то что надо. То есть фильтровано по имени пользователя, его роль.
421 1196942
Ну и задача немного специфическая. >>196880
Чтобы возвращало объект в хибернейте.Всем спасибо.
422 1196944
>>196939
Потому что план выполнения эффективнее чем та дрисня.
423 1196951
>>196942
Нахера тебе запрос писать тогда, там же аннотации есть для маппинга.
424 1196952
>>196951
Чтобы лохи из зекача бесплатно сделали за меня всю работу.
425 1197082
>>196951
Там сложные запросы все равно надо писать.
Легкий да. Xui findByXui(String s) и все
А сложные оборачиваешь в аннотацию и погнал писал на диалекте хибернейта. Но все равно весь бойлерплейт за тебя делается. Не гемора как в чистом JDBC.
426 1197107
Насколько реально найти фриланс на sql и pl/sql?
У меня есть фуллтайм работа и денег хватает, но я бы хотел ещё в свободное время ебашить.
427 1197112
>>197107

>но я бы хотел ещё в свободное время ебашить


Лично я в свободное время летом собираюсь подрабатывать уличным музыкантом для души.
image.png164 Кб, 1275x897
428 1197157
РРРЯЯЯЯЯЯ

Чет PostreSQL посложнее MySQL. Я правильно понимаю, что ситуация такая:
1) У MySQL есть удобный интерфейс для запуска сервера - Notifier - где можно просто жмякнуть 'start server' и все заработает, но приконнектиться к нему можно только через консольку mysql.exe.
2) А у PostgreSQL наоборот - надо сначала создать БД через initdb, потом запустить через pg_ctl, но зато есть охуенный графический интерфейс в виде Pgadmin хотя можно и консолькой через psql?

Вопрос: почему об этом нигде не написано? В MySQL в первой же книге на первых страницах: "вот так запустить, вот так подключиться, чтобы писал sql запросы". А в PostreSQL "есть psql, есть pgAdmin, иди нахуй". Нашел только в оф документации всю эту инфу про initdb и pg_ctl. Может я не там ищу и не то читаю, анон? Подскажешь что-нибудь другое? Я смогу запускать сервер через pg_ctl только? Просто офф документация описывает ситуацию на Линуксе с созданием другого юзера вместо рута, который будет запускать postgres.exe. А я на шинде, у меня тут такого нет.

Кстати, почему мой сервер уже делает по 5 транзакций в секунду? Я даже никаких команд ему не пишу. Что он там самостоятельно крутит?
429 1197250
>>197157
Ты что такой окукленный? Все бд через консоль включают. Это самый важный навык, а ты еще все это на винду накатил, долбаеб.
430 1197252
>>197157

>Кстати, почему мой сервер уже делает по 5 транзакций в секунду? Я даже никаких команд ему не пишу. Что он там самостоятельно крутит?


Твой сервер майнит кому-то битки.
image.png12 Кб, 611x212
431 1197259
>>197250

>Все бд через консоль включают


Да я и не против. Просто у MySQL сразу сказали, что и как сделать. А у постргреса вообще никаких упоминаний об этом. Сиди и ищи в документации сам.

>а ты еще все это на винду накатил, долбаеб.


Кстати, что с этим делать? Пикрил. Каким хуем вообще "кодовая страница консоли отличается от основной"? Кто это придумал? А почему не сделать вообще случайные кодовые страницы для каждой итерации запуска cmd? Ну и дальше, я меняю кодовую страницу на указанную, и что? Сообщение об ошибке psql не выдает, но я получаю нечитаемую хуйню. И как мне жить теперь?
432 1197584
Так получилось - я столкнулся с windows xp. Под неё нужен mysql (mariadb) или любая БД. Майсиквел версию не могу найти последнюю под ХР. Анончики, выручайте.
433 1197605
>>197259
Накати линукса и будь человеком
434 1197613
>>197584
https://mariadb.com/kb/en/library/deprecation-policy/

Во второй таблице Deprecated-платформы со ссылками на последние релизы для них. В следующий раз попробуй сам погуглить.
435 1197640
>>197613
Лучи добра, анон! Гуглил, но не нагуглил. Спасибо. А mysql версия 5.5.х какая последняя поддерживаемая windows xp?
436 1197651
>>197640
Понятия не имею и гуглить лень. Скажу лишь, что на Windows ты хуёв насосешься.
437 1197664
>>197651
Почему? Я в середине нулевых сидел плоьно на хрюше и спермосерверк 2003, помню, что mysql не было проблем.
438 1197665
Допустим, у меня есть отчёт на БД Oracle, который я хочу продублировать из SSRS в Tableau. Это BI инструменты и вам их знать совершенно не обязательно, мой вопрос будет про оракел.
Текущая реализация в SSRS: несколько процедур с выходным параметром типа sys_refcursor.
При перекате на Tableau я столкнулся с проблемой: в неё нельзя передать курсор из процедуры, только обычный SQL запрос.
Мне не хочется копировать эти запросы втупую. Во-первых, я не уверен, что мне удастся избавиться от PL/SQL полностью, во-вторых, я хочу, чтобы весь код был в одном месте.
Напрашивается использование pipelined function.
Оцените, пожалуйста, эту идею с точки зрения производительности и трудоемкости.
sys_refcursor vs pipelined function
439 1197771
>>197665
Да вроде норм.
Можно еще курсор через XML пробросить, но это скорее всего медленнее будет.
440 1198158
>>167018 (OP)
БД-бояри взываю Вас. Вообщем есть бд в фокспро, нужно ее перетащить в пхпмайадмин делаю экспорт бд4 кодировка 1252(или какая она там) вообщем пхп орет что

>#1064 - У вас ошибка в запросе. Изучите документацию по используемой версии MariaDB на предмет корректного синтаксиса около '?v????' на строке 1


крч какая то залупа. Вопрос можно ли как-то открыть код бд и поглядеть его блокнот и нотепаде не помогает я хз у же че делать
441 1198224
>>198158
Конвертер ебашь бд, или выгружай весь код бд в анси sql
442 1198227
>>198224
а блять как код то выгрузить, все дело идет из галактики в фокспро я могу тока смотреть
443 1198242
>>198227
У тебя есть среда где запросы выполняешь? Черещ нее проси код для каждоц таблицв или бд. Возьми VFP и сделай экспорт.
444 1198246
>>198242
хех, вот в этом и прикол мб слышал о такой штуки как ЕРПИ ГАЛАКТИКА так вот выгрузка идет с нее, но о коде и речи и не идет, она автоматически создает бд и туда вбивает все нужные данные, такие вот дела
445 1198259
Продолжаю изучать постгрес. Смотри анон, какая штука (я даже подчеркнул). Вопрос, почему если я сделаю reject для строки под IPv4, я все равно смогу подключаться к бд, а если под IPv6, то нет? Ведь если я сделаю IPv4 reject, то при проверке подключения к бд эта строка будет проверена первой, и должна тут же отключить меня. Там же адрес 127.0.0.1, это же и есть локалхост, когда я подключаюсь к бд с того же компа, где ее сервер крутится.
446 1198272
>>198246
У нее преднастроенная база поумолчанию, хуле ты? А это значит, что ты можешь с ней сконнектиться
447 1198273
>>198259
Она проверяет все строки. Нет такого, что проверил одну и дропнул.
блядь, анон, не ставь на винду постгресс. Поставь себе линукс уже

Если не забуду я тебе книг насоветую вечером по постгрессу.
Мимо Ораклист с опытом постгре
448 1198275
>>198272
чет пхпмайадмин говорит что хуй, так как при создании она использует устаревший ситаксис, и на это админ ругается, и вот ебя труп пытаюсь ее затолкать в пхп
449 1198310
>>198273

>Она проверяет все строки. Нет такого, что проверил одну и дропнул.


Но ведь подчеркнутое говорит обратное: как только попадается подходящая строка, проверяет только по ней, и если что не так - дропает. Вот я думаю, что сервер и должен проверить по IPv4 просто потому что он выше в файле и сразу дропнуть. А он почему-то дропает только если указать reject в IPv6. Может я чего-то не понимаю, и почему-то подключение к самому-себе не подходит под 127.0.0.1/32 ?

>>198273

>Поставь себе линукс уже


В соседней доске посоветовали виртуальную коробку и на нее линукс сверху. Попробую в скором времени.

>>198273

> книг насоветую


Было бы неплохо. Взял Learning PosgreSQL by Juba, но кроме первых двух глав она никакая вообще. Читаю документацию.
14257535869741.jpg1 Мб, 2560x1440
450 1198372
Давайте рассмотрим ситуацию в вакууме.

Допустим есть посты. У постов есть всякие стандартные атрибуты как id, author_id, time, body и т д.

Далее у постов могут быть картинки, допустим как на дваче, до 8 картинок к посту. Картинки лежат соответственно в отдельной таблице и там id, post_id, file_name например.

Далее есть теги, теги тоже лежат в отдельной таблице: id, tag_name
Ну и так как тегов у поста может быть много, и 1 тег может быть у нескольких постов, то есть еще таблица связей вида: id?, tag_id, post_id где свалка many_to_many организована.

Что бы еще такого приплести, допустим у постов есть комментарии - пусть просто нечто вроде урезанных постов без картинок и тегов, но у комментариев есть авторы, то есть в таблице с комментариями всё выглядит как-то так: id, post_id, author_id, body.

Теперь собственно вопрос, желательно для опытных ребят, как бы вы организовали запросы в такую базу? Начать можно с простого варианта, где скажем нужно заселектить 1 пост. Изи можно приджойнить к нему автора, а сопутствующие вещи такие как картинки, теги и комментарии+авторов комментариев можно параллельно запросить отдельными запросами, вместо того что бы писать монстр запрос, который я даже не знаю как будет выглядеть.

Но что делать, когда у нужен допустим список постов какого-нибудь автора со всей вот этой сопутствующей мишурой (теги, картинки, ответы), тут уже просто невозможно выкрутиться подобным способом: не будешь же потом в цикле для каждого поста слать по 3 дополнительных селекта? Если у тебя постов скажем много?
Как с подобными вещами работают? Как вообще с такой базой подружиться?
451 1198409
>>198372
Обычные селекты с джойнами. Такие вещи делаются в рамках одного запроса, СУБД это быстро прощелкает. Это уже с действительно сложными запросами имеет смысл дробить запросы и считать что-нибудь в приложении, но у тебя дженерик вебпараша, где подобных проблем не существует.

Накати ORM, включи дебаг запросов и смотри, как там такое делается. В начале пути очень может помочь. Но не увлекайся, потому что учить SQL и учить ORM — очень разные вещи.
452 1198830
Использую в своё сраном дипломном проекте встроенные сортировки и поиск из mysql, а мне надо их надо как-то описать, да ещё и сложность вывести. Какой воды можно налить страницы на две хотя бы?
LogarithmGraphics.png2 Кб, 365x227
453 1198850
>>198830
Это быстрые сортировки. Вычислительная сложность у них возрастает медленнее, чем линейно.
Миграции SQL 454 1199020
Такие уж дела, дорос до того, что на продакшене надо обновлять структуру с БД, но тупо снести все к хуям и выполнить запрос на создание таблиц не выйдет.
Ибо нужно сохранять данные, ибо сервисом уже активно пользуются и потеря данных недопустима.

Поэтому нужно мутить какой-то механизм миграций.
Есть 2 пути. Разработка через миграции.
То есть, когда-то создали некий baseline.sql с первоначальной структурой, а дальше ТОЛЬКО хуячишь файлы миграций с изменениями структуры и данных.
Этот подход плох тем, что, во-первых, писать эти изменения надо вручную. В итоге я нихуя не вижу текущую полную структуру БД.
Сейчас у меня вся структура в одном файлике, я целиком и полностью вижу все таблицы. Я я именно проектирую БД, а не пишу ссаные миграции.

Тут бы нужен некий инстурмент, чтобы я все так же описывал структуру в файлике, а эта ютилита брала предыдущую версию файлика и текущую и выдавала автоматом запросы sql, позволяющие получить новую структуру.
То есть, грубо говоря, нужен инструмент, который позволит автоматически создать sql-запросы, позволяющие из файла1 получить файл2.
Тогда бы технически вся разработка была через миграции, но я бы не пердолился с написанием этих самых миграций (максимум, проверял бы их корректность), а занимался именно изменением одного файла.

Короче, я хочу миграции, но не хочу вручную их писать.
Какие могут быть решения?
СУБД MySQL.
455 1199077
>>199020

> Тут бы нужен некий инстурмент, чтобы я все так же описывал структуру в файлике, а эта ютилита брала предыдущую версию файлика и текущую и выдавала автоматом запросы sql, позволяющие получить новую структуру.


В жизни бы такую хуйню даже из любопытства не трогал. На проде с большим количеством данных вообще только вручную ебашить, если у тебя там не переименование столбцов.

По теме ничего сказать не могу, из всех мокрописек вокруг СУБД использую только автоматические рисовалки схем — и то схемы удобнее в текстовом редакторе накидать.
456 1199081
>>198850
А что насчёт поиска?
457 1199084
>>199081
Посмотри EXPLAIN запроса и прикинь. Только данных побольше захуячь, потому что индексы СУБД на трех с половиной записях использовать даже не подумает.
458 1199179
>>199020
Если мсье проектант ленится сохранять промежуточные скрипты ddl, то пусть изволит проследовать сюда: https://dev.mysql.com/doc/workbench/en/wb-design-schema.html или пусть погуглит db schema compare tools.
А еще пусть не выебывается и сохраняет скрипты для каждого вносимого изменения в упорядоченном виде, в системе хранения исходников.
Screenshot112.png108 Кб, 810x614
459 1199229
>>199179
Спасибо, уже понял, что один хуй нужны скрипты миграций и так или иначе они необходимы, буду писать я их сам или генерить.
Скачал этот workbench, уже обрадовался что можно быстро сгенерить запросы миграции, так эта хуйня откуда-то фантазирует несуществующие маня-ключи.
Что это вообще такое?
Таблица вообще не менялась.
image.png41 Кб, 627x482
460 1199493
Как так, почему это matte of style? Ведь при втором мы проверяем каждую строку и, если она подходит, добавляем в result set, потом проверяем весь result set на where. А при первом мы делаем декартово произведение, возможно получая огромнейшую таблицу 10кк*10кк, а потом проверяем это адовую огромную ебалу на where. Или нет? Планировщик запросов сам во всем разберется, и джойны надо делать только там, где без них ну вообще никак не обоитись? Но таких ситуаций нет.
461 1199512
>>199493

>Или нет?


Да.
462 1199746
>>199493
Это просто разный синтаксис.
Запросы дадут одинаковый результат.

На то он и SQL - язык для менеджеров, чтобы можно было быстро таблички посмотреть без привлечения программистов, поэтому ты пишешь что ты хочешь получить, а не как.
СУБД разберется.
463 1199946
Сап двач
Есть одна бд SQLite. Там есть таблица с заданиями и таблица человеков. Для каждого человека нужно хранить все задания которые он выполнил. Как лучше такое хранить? В поле со всеми ид заданий или в отдельной таблице с строками человек-выполненое задание?
464 1199949
>>199946
Насколько я понял, это работает так:
Если у каждого задания может быть только 1 человек то это one-to-one или many-to-one relationship - хранишь указание на человека, которому дано задание, в таблице заданий.
А если у каждого задания могут быть разные человеки, то это many-to-many relationship - делаешь таблицу типа person-task, где хранишь пары человек-задание.
image.png5 Кб, 640x51
465 1200082
Я решил сделать таблицу, где будут номера комнат, и время брони на них. Значит, для любой новой брони надо убедиться, что время бронирования не пересекается с предыдущим. Я решил, что проще всего это сделать проверкой того, что нижний предел брони больше любых верхних. А тут такое: никаких субзапросов в ограничении. И как мне обойти эту проблему?
466 1200331
>>199229
Бамп! Объясните, что за левые ключи на пиках?
467 1200412
>>200331
Похоже ты сделал одинаковые измнения с помощью гуи-тулзы и на среде разработки, и на боевой.
Поскольку ты поленился назвать FK нормально, то тулза сгенерила имена по своему усмотрению в обоих случаях. А с точки зрения сравнения это разные FK, несмотря на одинаковое содержимое.
468 1200500
анон, прогоняю код-марофон, и затупил чет..

как создать sqlite3 файл базы? сам на питоне. пипец. Обещаю в течении недели ответить на несколько вопросов.
469 1200502
>>200500
вопрос снят.
Вот бывает же такое, нигде нет ответа, потому что сильно банально. Всего лишь надо вызвать коннект... но между прочим, не очевидно.
Screenshot20180601130643.png100 Кб, 641x572
470 1200522
>>200502
Действительно.
471 1200552
>>200522
Там заморока. Ведь я помню, что все решается как-то незаметно. А через шел, терминал и проч. я точно не делал. всего-то:
path_db = os.path.abspath("D:/db/anal_data.db")
conn_anal = sqlite3.connect(path_db )
c_anal = conn_anal.cursor()
472 1200569
>>200552
Просто признай молча, что ты либо ньюфаг, либо даун.
473 1200674
Впервые ITT, не бейте, лучше обоссыте.
Пишу веб морской бой. Хочу хранить состояние поля на момент каждого хода в базе, как это лучше сделать? Поле 10х10 представил в виде массива из 100 элементов, чтобы не создавать двухмерного массива. Но как это в sql хранить?
Создавать таблицу с сотней булевых полей и парой связывающих? Это разумно?
Дайте советов мудрых.
474 1200709
>>200674
Бери постгрес и интовую матрицу используй. Там так можно.
image.png146 Кб, 1280x1024
475 1200715
Анон, поясни за всякие графические интерфейсы. Они нужны? Их используют серьезные базаделы? Или ненужная хуйня, кто не пишет в консольке тот пидор etc etc? А если нужная, то какую взять? Сейчас у меня взломанный navicat 12, вроде работает. Но мне не нравится, что он взломанный. А бесплатное ПО, что я пробовал до этого для MySQL было совсем не очень.
476 1200770
>>200674

>Создавать таблицу с сотней булевых полей и парой связывающих? Это разумно?


Нет, не разумно.

Предположим, тебе сказали сделать морской бой 1212 клеток. Твои действия? Колонки добавлять? А 100100? И как с этим жить потом?

Второе - а зачем тебе вообще хранить ходы в виде массивов? Стартовое положение кораблей не меняется, достаточно сохранить его один раз, как-то так:

ship_id number;
game_id number PK;
player_id number;
ship_size number; --Количество клеток
ship_orientation number; --Признак того, как направлен корапь - по горизонтали (0) или по вертикали (1)
ship_row number; --ряд, в котором находится первая клетка корабля
ship_col number; --колонка, в котором находится первая клетка корябля

а ходы игроков хранить в такой примерно таблице:

shoot_id number; -- Ид выстрела
game_id number; -- Ид партии
player_id number; -- Ид игрока
ship_row_index number; -- Строка
ship_col_index number; --Столбец
ship_id number; --Id корабля в который попали, null - промах
shoot_result number; --null промах; 0 - попадание; 1 - уничтожение.
shoot_ts timestamp; --Момент выстрела

shoot_result кажется избыточным, но он поможет потом быстрее анализировать партии, чтобы не разворачивать всю историю для того чтобы выяснить, когда утопили.

В такой структуре ты можешь хранить любые размеры полей, не обязательно квадратные, заметь. Можно делать поле 10000*10000 со стотрубными пароходами, например.
А еще ты всегда легко воспроизведешь игру и так тебе гораздо легче анализировать ход игры - на каком ходу в среднем попадают в 4-х трубник? а в двухтрубник? Ну и прочую статистику собирать.

Если ты захочешь корабли в форме фигур тетриса вдруг, то нужна будет еще одна табличка-детейл к положению кораблей, где будет описана их форма.

Еще нужна табличка партий, где хранятся правила (размер поля, можно ли ставить корабли углами друг к другу и пр.)

Если что непонятно - спрашивай.
476 1200770
>>200674

>Создавать таблицу с сотней булевых полей и парой связывающих? Это разумно?


Нет, не разумно.

Предположим, тебе сказали сделать морской бой 1212 клеток. Твои действия? Колонки добавлять? А 100100? И как с этим жить потом?

Второе - а зачем тебе вообще хранить ходы в виде массивов? Стартовое положение кораблей не меняется, достаточно сохранить его один раз, как-то так:

ship_id number;
game_id number PK;
player_id number;
ship_size number; --Количество клеток
ship_orientation number; --Признак того, как направлен корапь - по горизонтали (0) или по вертикали (1)
ship_row number; --ряд, в котором находится первая клетка корабля
ship_col number; --колонка, в котором находится первая клетка корябля

а ходы игроков хранить в такой примерно таблице:

shoot_id number; -- Ид выстрела
game_id number; -- Ид партии
player_id number; -- Ид игрока
ship_row_index number; -- Строка
ship_col_index number; --Столбец
ship_id number; --Id корабля в который попали, null - промах
shoot_result number; --null промах; 0 - попадание; 1 - уничтожение.
shoot_ts timestamp; --Момент выстрела

shoot_result кажется избыточным, но он поможет потом быстрее анализировать партии, чтобы не разворачивать всю историю для того чтобы выяснить, когда утопили.

В такой структуре ты можешь хранить любые размеры полей, не обязательно квадратные, заметь. Можно делать поле 10000*10000 со стотрубными пароходами, например.
А еще ты всегда легко воспроизведешь игру и так тебе гораздо легче анализировать ход игры - на каком ходу в среднем попадают в 4-х трубник? а в двухтрубник? Ну и прочую статистику собирать.

Если ты захочешь корабли в форме фигур тетриса вдруг, то нужна будет еще одна табличка-детейл к положению кораблей, где будет описана их форма.

Еще нужна табличка партий, где хранятся правила (размер поля, можно ли ставить корабли углами друг к другу и пр.)

Если что непонятно - спрашивай.
477 1200792
>>200770

>Второе - а зачем тебе вообще хранить ходы в виде массивов? Стартовое положение кораблей не меняется, достаточно сохранить его один раз


Я почти сразу после отправки поста спросил себя именно это. Но так далеко мысль не зашла, спасибо.
478 1200800
>>200082
Перед добавлением вызывай запрос, который проверит валидность.
479 1201225
>>200569
да, 4 года еще не о чем не говорит
image.png275 Кб, 800x533
480 1201899
Сап аноны, совсем новенький в базах данных и мне нужна ваша помощь. Хочу сделать 2 базы данных: в одной будут продукты, в другой рецепты. Как можно реализовать проверку продуктов для рецептов? Допустим, есть у меня в бд продуктов яблоко, банан и йогурт, а в бд рецептов фруктовый салат, который чтобы приготовить нужны как раз эти продукты. Как оформить бд рецптов, чтобы реализовать проверку?продуктов в рецепте может быть разное число: от 1 до 7 Пишу на c#+xamarin и кажись использовать буду SQLite, т.к для мобильного приложения
481 1201942
>>201899
Ну и зачем тебе две базы данных?
482 1201954
>>201942
А как предлагаешь?
483 1201955
>>201899
Я бы сделал это так:
1. Таблица Product с полями id (первичный ключ), name, ну и дальше какие тебе поля нужны
2. Таблица Receipt с полями id, name и тд
3. Таблица ReceiptsAndProducts с полями receiptId и productId, которые ссылаются на первичные ключи таблиц Receipt и Product.
Это классическое many-to-many-отношение, которое делается через промежуточную таблицу.
1384352904486.jpg553 Кб, 1915x1037
484 1202196
Даун на связи.
Может вы мне поможете. Как устроены данные типа ХАРКТЕРИСТИКА в табличных СУБД.
Кароче мне надо сделать так клиентсерверный фул рест апи что бы у обїектов номенклатуры, контрагентов, физических лиц были настраиваемые характеристики. Или проще говоря свойства.
Что бы к ебучей паре сапог можно было привязать цвет, тип материала, размер.
А к типу номенклатуры ЕДА жирность, порция итд. И что бы блядь в сапогах или в сущности ДИРЕКТОР не было жирности.
При этом надо что бы пользователь сам задавал какого типа будут данные, целочисленные, текстовые, дата, объекты.
Пытаюсь представить связи, и ум за разум заходит. Как понял нужно создавать по табличке на каждый простой тип данных, типа ключ значение.
И одну таблицу со связями к ключам других таблиц .
Но не уверен.
Думаю задача до меня решалась тысячу раз, но когда пытаюсь что то нагуглить натыкаюсь или на 1С или на что то совсем другое.
Может кто то поделиться каким то учебным материалом как организовывать такие данные, или где посмотреть модель готовых решений?
485 1202197
>>200715

>кто не пишет в консольке тот пидор etc etc


Это только на дваче такую хуйню встретишь.
Когда дело касается настоящей работы - речь о деньгах.
Значит надо использовать наиболее быстрые и безопасные инструменты.
Лаже системы контроля версий используют с гуи.
Никому не надо что бы долбоеб выебывающийся как он ахуенно пишет в vim испоганил проект на который убили кучу денег и времени.
486 1202199
>>201954
Думаю он про то что ты не правильно термины используешь.
Не базы данных, а таблицы. Все происходят в рамках одной базы.
487 1202200
>>202199

>неправильно


Фикс.
488 1202236
>>202196
Гугли Entity-Attribute-Value, EAV
14362830189341.jpg119 Кб, 1920x1080
489 1202239
>>202236
Спасибо. Походу то что надо.
А есть какие нибудь ъорошие книжки на тему? А то на русеке даже на википедии перевода нет.
Вроде реаляционным базам столько лет, а нет.
490 1202250
>>202239
Английский учи, дятел.
491 1202284
>>202239
https://www.google.ru/search?q=сущность-атрибут-значение

Книжек, лекций и прочих материалов по РСУБД на русском очень много, посмотри тред, в постах есть названия хороших книг для новичков.

И да, вот этот анон >>202250 дело говорит, учи, без ангельского никак.
492 1202534
Где в постгрессе храняться метаданные таблиц которые сделал я?
Вот в паблике мои таблицы, как получить всех имена и занести в отдельную таблицу?
493 1202636
Как выбрать всех users, у которых нет posts за этот месяц?

пробовал через not in, но не получается(

SELECT `posts`.* FROM `posts` WHERE (`posts`.`created_at` BETWEEN '2018-05-04 13:47:16' AND '2018-06-04 13:47:16')
494 1202702
>>202199
да, в терминах запутался
495 1202703
>>201955
Спасибо за ответ,анон
496 1202709
>>202636

http://sqlfiddle.com/#!9/c55ac6/2

select
u.user_id,
u.user_name
from user u
where not exists (
select 1
from post p
where p.user_id = u.user_id
and p.created_at between sysdate() - interval 1 month and sysdate())
497 1203371
Когда я накидаю всяких grant'ов в постргесе, я могу потом через \dp узнать, какую таблицу кто может трогать и как. А как сделать наоборот? Узнать, какие таблицы может трогать каждая роль?
image.jpeg373 Кб, 700x1139
498 1203424
Стоит ли вкатываться в БД с изучения пикрил?
499 1203427
>>203424
Зачем же тебе вкатываться в БД?
500 1203428
>>203427
Не знаю, может в будущем пригодится. Я тут наткнулся на odbc в дрисятке, оказывается можно хоть xls, хоть txt использовать как источник БД. PHP умеет работать с odbc, чутка поигрался - понравилось. Вот думаю познакомиться с sql подробнее.
image.png31 Кб, 1154x121
501 1203551
Анон, смотри какая хуйня. По дефолту в Постргресе у публичной роли есть привилегия на подключение к любой бд. При этом, подключившись, она может видеть все таблицы. Можно ли это как-то исправить, и делают ли так в продакшене? Это же полный пиздец, понятно, что доступа к различным таблицам по дефолту нет, и их надо выдавать через GRANT, но сам факт того, что вообще любая роль с login привилегией может подключаться к вообще любой базе и увидеть вообще все таблицы, включая all_my_fancy_passwords, или salaries_table_that_we_use_to_pay_our_employees мне кажется охуевшим. Тем более, что через \d они и структуру этих таблиц узнать могут. Или это нормально, и я паранойю? В том же MySQL например все наоборот - пока прав не дадут вообще ничего не увидишь.
502 1203949
>>203551
Только к схеме паблик.
Ты дебил там держать важные таблицы? Там обычно держат справочники общие и прочее.
Пароли храни с солью, благо постгресс теперь умеет.

А теперь вопрос. Вчера за вечер сдедал задания на хакер-ранке, скл-ех пройден. Есть ли что-то такое же на pl/sql например?
503 1204173
>>203949

>Только к схеме паблик.


В документации об этом не написано. Попробую сегодня схемы потеребить.

>Пароли храни с солью


Это что значит? При создании бд через initdb указал, чтобы хранил пароли с scram-sha 256.

>хакер-ранке


Кстати, а это что за сайт? А sql вроде ещё на codewars был.
504 1204482
>>204173
В доках это было, а ты что думал про схему public? Она же тебе сразу говорит для чего она.

Да, у тебя соль включена.

Ты чувствуешь разницу между pl/sql и sql?
505 1204486
>>204482
Да вряд ли для pl/sql будет такое.
Но если найдешь - отпиши, интересно будет глянуть.
image.png194 Кб, 765x759
506 1204761
Продолжаю читать, как вам моя account таблица? Нормально, что нигде нет not null constraint т.к. регэксовые ограничения и так горантируют, что колонны не будут пустыми? Я так же не нашел способ проверить имя без регулярок, т.к. не нашел какой-нибудь isalpha() функции как в том же Питоне на проверку того, что строка состоит только из буков.
507 1204803
>>204486
Я нашел quiz от Оракла. Но ты наверно про него знаешь
508 1205106
Анон, вот как это решить? Почему я не могу в where clause ссылаться на ту же таблицу, из которой я беру все значения ну, которая from_item? Я понимаю, что могу свой подзапрос на пк с минимумом ОЗУ выделить в with clause, но в справке по теме CTE не указаны, значит можно обойтись без них. К тому же можно вместо noram заново написать весь этот подзапрос на пк без ОЗУ. Но это же ебанина какая-то. В общем, как сделать хорошо и правильно?

Кстати, иннер джойны использовать только если я Питонист и explict better than implict? Второй пик именно про это?
image.png33 Кб, 712x490
509 1205120
>>205106
Ебать, вот только написал, сразу же пришла идея выбрать одновременно и минимальную ОЗУ, и максимальную скорость для пк с минимальной памятью, а потом сджойнить со всеми пк. И никаких подзапросов ебаных. Что скажешь анон, так нормально?
510 1205644
Почему при указании типа numeric я могу указать только precision, забив на scale, о не наоборот? Мне нужно, чтобы числа с точностью до 2х цифр с запятой, и я не ебу, сколько цифр они будут занимать вообще. Может там будет 20.33, может будет 935714.84, я не знаю. И что мне делать? numeric(100000000000000000000000000000000, 2) ?
511 1205663
>>205644
Тупица ты ебаная, используй float/double/decimal.
512 1205959
>>205663
float/double хранят n знаков после запятой, а мне нужно именно 2, а decimal это синоним numeric, тупица ебаная
513 1206074
>>205959
Блядь, скотина, открой мануал к своей БД и чекни типы данных, которые я привел выше, они как раз позволяют делать то, что тебе нужно.
514 1207054
Пишу условно
Есть две таблицы таблицы
В первой
Nane ID1 ID2
Петя 1 2
Вася 1 1
Дима 2 2
Настя 2 2

Во второй
ID2 X
1 10
2 20

Как получить сумму X по каждому ID1, то есть, что бы ID1(1) = 20+10, ID1(2)=20+20?
515 1207521
>>207054
Джойнишь к первой таблице вторую по ID2, группируешь по ID1, суммируешь Х, отдаешь мне свои 300кк.

Смотрите что нашел на sqlex, анализатор блять, 30 заданий прорешал, потом только заметил. Есть вопросы - есть ли то же самое в том же Постгресе? Только в MySQL видел время на запрос после каждого запроса, но ничего такого детального. То, что там в stmtext это что-то типа байткода Питона? Нет, я понимаю, что sql не компилируется\интерпретируется, я про то, что это какой-то второй более глубокий\сложный язык под капотом, который выплевывает оптимайзер в ответ на мой запрос так же как байткод питона выплевывает какая-то дрочильня пот капотом оного в ответ на данный интерпретатору код? Нужно ли мне прямо сейчас задрачивать эту оптимизацию и этот язык утверждений, если я хочу пойти джуном уже куда-то? Или это high level и мне лучше вернуться к этому после того, как стану миддлом, заработаю 300кк, и выучу весь матан включая реляционную алгебру?
516 1207808
>>207521

>есть ли то же самое в том же Постгресе?



В любой современной СУБД есть.

Почитай что такое план запроса и что и как СУБД вообще делает с момента запуска скрипта до момента выдачи результата. Это будет полезно в любом случае. Обязательно внимательно прочитай и запомни основные моменты про bind-переменные - это архиполезно.

Что касается анализа плана запроса, то для нужно уметь его читать и знать, какие типы соединений таблиц поддерживает твоя СУБД и в чем их отличия по производительности, видеть, где используется или не используется индекс и какой. Когда пишешь запросики - обязательно смотри их план выполнения, заведи себе такую привычку.

Можешь добавлять и убирать индексы, менять условия и сразу смотреть, как меняется план.
Очень наглядно все.
517 1207980
Есть ли какой-нибудь сайт с упражнениями на SQL запросы, от простого к сложному? Или что-нибудь типа codewars только для SQL-холоповгоспод?
518 1207981
Т.е. чтобы уже были данные, интерфейс и т.д. Тебя просят взять такие-то данные, возможно с ограничениями, и ты хуяришь запрос
519 1208102
>>207981
sql-ex.ru
codefights.com --> arcade --> sql
Может анон еще подскажет
520 1208128
Думаю что пришел с классической проблемой.

В общем есть 1 селект, и нужно получается для корректной пагинации узнать количество всего что он выдает. Но прикол в том, что селект большой и с кучей джойнов, а еще в нем много фильтров задействовано, на каждом столбике в таблице на сайте есть условный фильтр и сортировка и всё это падает в where'ы.

Пока что этот селект прогоняется в цикле из двух итераций.

На первой итерации собирается весь поиск и прогоняется селект с целью подсчета строк.

На второй итерации добавляются уже лимит и оффсет для получения собственно самих строк.

Как разрешить эту задачу и избавиться от дублирования запроса в базу в этой ситуации?
521 1208597
>>208128
Курсор?
522 1208814
>>208128
можешь считать общее количество записей в отдельную колонку аналитической функцией, если твоя субд позволяет
типа count(*) over () cnt
523 1208948
>>207980
hackerrank
524 1208997
>>207980
http://sql-ex.ru/

Правда я там только до 8 упражнения дошел, считаю нужно больше задач на самые основы, что бы надрочиться нубам типа меня, а то после изичной хуйни сразу дают джойн и груп бай и сижу не могу постичь до сих пор что там как правильно решать.
Screen Shot 2018-06-13 at 8.18.30 PM.png81 Кб, 1892x314
525 1209297
>>208102
>>208997

>sql-ex.ru


Отличный сайт, чаю.
Поставил первый раз сразу рейтинговые и охуел от пикрила.

>Правда я там только до 8 упражнения дошел, считаю нужно больше задач на самые основы, что бы надрочиться нубам типа меня, а то после изичной хуйни сразу дают джойн и груп бай


Дошел до 9, так и не понял где там можно было GROUP BY использовать.
Щитаю самые основы и вообще SQL должен сначала сам изучить, по крайней мере знать какие-есть возможности у языка в общем, а сайт чисто для практики и "набивания руки".

Все таки туториалов по SQL в интернете вагон, в отличии от сайтов с практикой, так лучше пускай сосредотачиваются на ней, а не распылаются дополнительно на уроки. Те же примитивные упражнения есть на W3 или как-его там, но их очень быстро заебывает делать, если они совсем простецкие когда ты по сути пишешь по 20 раз один и тот же запрос только меняешь название столбцов и таблиц.
Screen Shot 2018-06-13 at 9.54.10 PM.png203 Кб, 1913x796
526 1209369
Хотя я сам соснул на 14 с GROUP BY и HAVING, помогите.
527 1210152
>>207808

>Почитай что такое план запроса и что и как СУБД вообще делает с момента запуска скрипта до момента выдачи результата. Это будет полезно в любом случае. Обязательно внимательно прочитай и запомни основные моменты про bind-переменные - это архиполезно.


Есть советы, что почитать? Какие книги? Что-то типа 'Definitive guide to fast as fuck sql queries 300kk/ns'?
528 1210156
>>209369
Выведи ещё и тип продуктая не издеваюсь, просто сделай это, не удаляя ничего
529 1210168
>>210156
Так нельзя, в group by можно выводить только столбцы по которым идет группировка или агрегирующие функции.
Я уже нарешал за 30+ упражнений, но это так и не осилил.
530 1210174
>>210168
Я тебе говорю, что можно сделать так, как я сказал. Я так сделал, и на форуме многие так сделали. Сиди и думай. Или не думай, мне то похуй.
531 1210371
>>210174
Ну не тролль, во-первых я конечно это попробовал еще на этапе решения своими силами, даже зная что-так нельзя, но мало-ли, вдруг благодаря HAVING COUNT(Distinct P.type) = 1 машина выводит возможность использовать атрибут в селект. Потому что, например, что-то похожее можно делать при использовании WHERE = (Query) если результат Query одно значение.

Но нет, так нельзя.

Не знаю что ты там пробовал, на форуме этой задачи я вообще не нашел.
image.png67 Кб, 1239x484
532 1210453
>>210371
Не троллю, ты просто тугой. Я не говорю тебе вывести просто колонну type, конечно это не сработает. Я говорю вывести тип продукта. А как это сделать при такой группировке собственно и есть само задание. Хотя конечно можно и по-другому сделать, но будет больше текста и cost плана выполнения.
Под форумом я имел в виду именно топик этой задачи, который становиться доступным после ее решения - кнопка 'обсуждение упражнения на форуме'
533 1210676
>>210453

>ты просто тугой.


Лол, есть немного. Теперь дошло. Спасибо за наводку.
15286464882891.mp42,9 Мб, mp4,
852x480, 0:22
534 1212448
>>210152
Бамп бамп бамп.
Хуле ваш тред самый тухлый из всех?
535 1212763
Народ, вкатываюсь в БД, с нуля. Скачал MySQL + pgAdmin 4

На сайте написано
"pgAdmin is available for Windows™ 7 (desktop) or 2008R2 (server) and above. The packages below include both the Desktop Runtime and Web Application"

Где он в десктоп рантайм? Почему блять у меня только ебучий веб. Неудобно пиздец, хочу обычное приложение. Помогите плс.
536 1213151
>>212763
Mysql workbench скачай и подключайся
Uchiha Obito - cruel world AMV Full HD.mp422,2 Мб, mp4,
1280x684, 3:18
537 1214015
>>212448
Bump bump bump
Why the fuck is your thread the slowest of all?
image.png27 Кб, 634x308
538 1214355
>>214015
Количество постов в треде видишь?
То-то же.
539 1215212
>>214355
Ну и что, это тематика, тут полтора анона, и 1.4 его сидит в нюфаг треде. Здесь небампанные треды годами живут.
540 1217093
ребята, каким необходимым минимальным уровнем знаний нужно обладать, что бы получить предложение о работе связанной с Базами Данных? Хочу вкатиться, запросы писать умею, но не сложные. Шапки у треда нет, поэтому был бы рад вашим советам.
541 1217151
>>167018 (OP)
привет всем задам тут
неработают кнопки ине отображаются данные что делать
https://pastebin.com/zs3pvjsq
Learning SQL 542 1217226
Кто-нибудь изучал SQL по книге "Learning SQL" от Alan Beaulieu? Как вам удалось подсоединить файл с примерами "LearningSQLExample.sql"? Мне выдает кучу ошибок, версия MySQL 5.7, шестой версии на офф сайте не существует.
543 1217272
>>217093
слишком дохуя.
Знание архитектуры и работы бд, как таковой.
Расширенный sql. ( pl/pg/t)
Начальные навыки администрирования бд.

Надрочка на какую-то технологию бд тоже норм.

Обычно работа с бд, как основа, это проектирование, систематизирование бд. То есть ты должен понять, как работать с бд в качестве чистого продукта( полный цикл поддержки), знание объектных методов и глубокие понимания абстракции данных.

Плюс тебе надо заточить что-то, что поможет писать API, GUI.

У меня C++/ Pl/SQL. Уже пару лет горбачусь архитектором, и знаешь, иногда приходиться читать документацию самой бд. Многие книги по тонким моментам не доступны в интернете и приходиться платить 75 баксов( со стоимостью), чтобы тебе томик Бурлесона доставили в Московию.
544 1217553
>>217272
анон, можно с тобой контактками обменяться,с целью дальнейшего общения? Там телега, почта или ещё чего. Просто я на полном серьёзе хочу вкатываться в базы и уже много чего учу и прохожу курсы. Был бы благодарен тебе за такую возможность.
image.png112 Кб, 1237x738
545 1217709
>>217226
Потому что ты какую-то хуйню делаешь, по ошибкам кажется, что ты ему html документ скормить пытаешься.

Аноны, а помогите теперь вы мне с 118 задачей sqlex.
Вот ее текст, мое решение и результат, а так же первое решение, что я нашел по гуглу и ctrl-c ctrl-v, чтобы проверить, работает ли.
pastebin.com/MPt8U3J1
pastebin.com/s9weVUQD

Я не могу разобраться в коде, который дает правильный ответ. Он невероятно большой. Но почему мое решение не катит? Поясняю: я беру каждый год и прибавляю ему от 0 до 8 лет. Насколько я понял из википедии, год високосный если делится на 400, или делится на 4 но не на 100. Так что среди года, и восьми последующих точно будет хотя бы один високосный. Потом я беру 6 первых дней апреля этого года, среди которых точно будет понедельник, и прибавляю к этому понедельнику 1 день. Беру битву, дату, и минимальный вторник апреля високосного года (ведь беру 8 лет подряд, может получится больше одной такой даты). И че не так то, два дня с этим ебусь
546 1217711
>>217709
СУКАБЛЯТЬ накатал эту огромную пасту, от безысходности решил просто так блять проверить не первые 6, а первые 7 дней апреля, и все заработало нахуй. Да пошло все блять в пизду
547 1217740
>>217553
humangdman на рамблере
изображение.png5 Кб, 709x322
548 1218166
Сап, аноны.
В какой среде можно развернуть пикрил и сделать пару команд?

хочу потренироваться по этим вопросам сам
https://www.jitbit.com/news/181-jitbits-sql-interview-questions/
549 1218179
>>218166
скачал MySQL с Wokbench. Там ты можешь развернуть такую бд, а потом построить схемку.

У Oracle + TOAD такое же есть, да и вроде в стандартных тулзах оракла есть.
550 1218182
>>218179

>MySQL с Wokbench


спасибо.
попробую.
Мне тут советовали SQLite Studio и OpenServer
Сам еще думах ХАМПП попробовать. Решит ли оно задачи?
551 1218189
>>167018 (OP)
Посоветуйте литературу для совсем ньюфага по бз
552 1218193
>>218189
дунаева попробуй. тонкая.
только там примеры на древней мs SQL, но ты установи что-то типа mysql или около того.
или sololearn на телефон установи. там курс sql есть. весьма хорошо для нюфань. потом уже можно книжки от дядек читать и документацию по Ораклу или чему там надо.

мимо ньюфаг после курса сололёрн
cancer1.png1,7 Мб, 1024x1128
553 1218236
может кто объяснить, что такое local и remote представления, чем они отличаются?
мимо даун начал познавать foxpro
554 1218548
Умоляю перекатите.
555 1218611
>>218236

> начал познавать foxpro


Где мой 1998, лол
556 1218623
Расскажите, как предотвратить добавление уже существующей записи в БД?
Какие-то там индексы делать, или нет, не ебу вообще. В моем DB Browser ничего дельного, по идее, кроме каких то индексов нет.
557 1218707
>>218182
попробуй. Хуже не будет.
558 1218709
>>218611
Через 20 минут экзамен по этой залупе. Люблю свою шарагу
559 1218710
>>218623
сделай колонку со значениями unique.
ALTER TABLE ALTER COLUMN
560 1218711
>>218611
видел эту бд в продакшене пару лет назад.
561 1218927
Есть кто решил 127 задачу с sql-ex? Я уже заебался, никак не проходит проверочную базу.
562 1219003
>>167018 (OP)
Сделал в постгре полю id тип данных SERIAL.
Если при инсерте в поле с UNIQUE указать уже существующее значение, то произойдет ошибка (ожидаемое поведение), но этот id при верных данных уже будет недоступен, следующая запись получит id + 1, получиться последовательность с дыркой. Как это фиксить?
563 1219021
>>218709
В полку оплота российской ИТ индустрии прибыло. Блядь, что же там за преподавательский состав-то? Хорошо хоть не filemaker или ms access.

>>218711
Я в кровавом ынтерпрайзе плаваю, окромя filemaker/mysql/постгре/оракл нихуя в жизни не видел.
564 1219047
>>209297
Прости что долго не отвечал - тупо на работу устроился и времени нету, первые 3 недели - чистый ад в плане налаживания режима и прочей мозговой нагрузки.
Я мог ошибаться поэтому с тем на чем там завис.
В общем первый пикрил - то что у меня пройдено.

И соответственно попробовал сейчас решить 8е и вот такой вот посос.
изображение.png4 Кб, 155x538
565 1219048
>>219047
С первым пиком подобсрался, лол.
566 1219146
как жаль что прогерские треды такие медленные, в то время как какая-нибудь параша в вг или в /b перекатываются по разщу в денб
567 1219603
Анон, ну как решить 127, я уже не знаю че делать с этой хуйней. Второй день ебусь. После кучи проверок заметил подсказку о том, что cd это строка. И нет я не забыл про это, ебучая подсказка, но ведь и строки '12x' и '13x' будут сравниваться так же, как и числа 12 и 13 т.к. '2' как символ меньше '3'. Но окей блять, может у них там есть строки '12a' и '12b', а мне важно только число, сделал ебаучую рекурсивную CTE cds0 чтобы это число вытащить.. И все равно нихуя не работает. Добавил уже даже ебанутые проверки на p.model = 'fuck 127' потому что вдруг наврали и там есть одинаковые модели для разных типов ну, пк с моделью 123 и принтер с моделью 123, попробовал также и avg() и sum()/count() для требования "При расчёте среднего отсутствующие цены не учитывать.".
Ну не работает блять вообще ничего и я не знаю что делать, бляяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяя
image.png57 Кб, 605x632
568 1219635
>>219603
А почему у тебя в одном месте тип 'PC', а в другом 'pc'?

И с CTE явно ты переусложнил, наверняка там просто хватит дополнить слева строку нулями до длины строки в 10 символов, скажем.
569 1219675
>>219603
>>219635
Ничего себе вы монстры, мб вы скажете что не так с моим 8 упражнением?
570 1219727
Пиздец, что вы дрочите на скл-ех? Меня эта хуйня вообще бан выдала почему-то года два назад, ну я и послал ее нахуй.

Мимо ораклист.
Пс. Кто-то сдавал экзамен на оракл программинг про?
571 1219745
>>219635

>А почему у тебя в одном месте тип 'PC', а в другом 'pc'?


Потому, что я уже очень заебался с этой задачей. Но это и не важно, текст в sql case insensitive все равно.

>дополнить слева строку нулями до длины строки в 10 символов


И как бы это помогло? Было бы например две скорости: первая - '20x', вторая - '1хуйпизда'. И хуйпизда бы тогда выиграла т.к. на втором месте у первой был бы ещё 0, а у второй уже 1. Может и в этом ошибка, это же ебаный varchar, откуда мне знать, что у них там записано. 'fast'? 'reallyfast'? 'sonicthehedgehoc'? Ты сам то решил 127ю?

>>219675
Во-первых если у тебя except то distinct не нужен т.к. except сам уберет все дубликаты. Во-вторых в таблице product есть модели, не указанные ни в одной из таблиц printer, pc, laptop.
572 1219887
>>218710
Тоже думал насчет этого, но я помню, что как-то отсекал подобное на входе, когда посылался insert
573 1220181
>>219745
Ну решил, ничего хитрого там нет, делается обычным avg, рекурсия не нужна, джойны по типу тоже и вообще дело не в скорости CD - она задана в виде 2x, 12x (скорость и в конце икс, все элементарно сравнивается).

Ошибка во втором блоке, нужно дополнительно проверять что prs.price is not null и prss.price is not null
574 1220296
>>167018 (OP)
Начал читать "Введение в системы баз данных" Дж. Дейта, чтобы понять теорию баз данных. Вроде все правильно, но как-то муторно. Есть ли книги как-то по-лучше или нужно дотерпеть и дочитать.
image.png35 Кб, 1254x286
575 1220373
>>220181
ААААААААААААААААААААААААААААБЛЯЯЯЯЯЯЯЯ Я ПРОСТО ОРУ
Ещё и подсказка эта ебаная про cd, только о них и думал, а оказывается все из-за цен. Пиздец. Спасибо.
576 1220745
Такой к вам вопрос:
Есть две вставки и две точки сохранения.
INSERT INTO plsqll01_purchase VALUES
('Small Widget1, I, 44-JUL-03', 'CA');
SAVEPOINT a;
INSERT INTO pls'qll01_purchase VALUES
('Medium Wodget', 75, 44-JUL-03', 'BB');
SAVEPOINT sp_2;

Если я сделаю ROLLBACK a, то сохранится ли первая вставка?
Проверить возможности, увы, нет
577 1220747
578 1220749
>>220745
pl sql, если что.
579 1220752
Смотрите, что нашёл
https://www.ozon.ru/context/detail/id/140212979/
580 1220774
>>220745

>Если я сделаю ROLLBACK a, то сохранится ли первая вставка?


У тебя откатится вторая вставка, а первая пока что так и не будет зафиксирована, т.е. она будет видна только из-под этой сессии. Чтобы 100% сохранилась, нужен коммит.
581 1220776
>>220296
Попробуй Мартин Грубер Понимание SQL.
582 1220778
>>220774
Спасибо
583 1220787
Перекот, аноны.
https://2ch.hk/pr/res/1167018.html#1218623 (М)
584 1220928
Мы можем создать два разных индекса (например битовый и б-дерева) на одну таблицу? Ускорит ли это как-то работу?
sage 585 1221125
Уёбки, где перекат?
586 1221159
>>219887
триггер ставишь.
и
587 1221172
>>221159
не дописал, кароче Merge можно юзать.
2018-06-30-0116471280x800scrot.png439 Кб, 1280x800
588 1221199
>>218179
Спасибо тебе анон за хороший совет
589 1221210
Ну рибят ну сделайте перекат
590 1221230
>>221159
Какой триггер? Я "работаю" через DB. Browser, там нихера подобного нет, только индексы какие-то.
591 1221274
>>218179
А для постгри что-то подобное есть?
image.png86 Кб, 1280x1024
592 1221382
>>221274
Есть navicat для всех, но там или платить или пиратить
image.png73 Кб, 1204x687
593 1221462
В чем прикол? Вот во-первых, надо для каждой 5 записи найти среднее, но всего записей если я селектну max(n) 26. Т.е. каждых пятых записей должно быть пять, как у меня. А их три. И по чему надо искать среднюю цену? По типу модели? Ну тогда что за хуйня с принтерами, у которых 2 разных средних цены? Или по производителю? Непонятно в общем, мдааааааааа
594 1221828
Тяжело ли самому писать поисковый движок для сайта по продажам? Я так понимаю если я допустим хочу сделать веб-сайт интернет магазин то придется полностью писать платформу под него? Кто нибудь занимался, собирали ли тиму? Сложно ли делать одному платформу с базой данных итд?
595 1221830
>>221382
Спасибо за такое

мимокрок
596 1221832
>>218179
Я так понимаю вручную никто базы данных не заполняет, все пишут интерфейсы и алгоритмы чтобы уже все готово было?
597 1221940
>>221832
Да, ты прав. Руками добавляют только редкие и внутренние таблицы "продукта"
598 1221986
>>221462
О, а эту я оказывается давно решал.

Читай внимательно условие.
С какого хуя ты решил, что записей 26? Посмотри сколько записей в табличке product.
image.png6 Кб, 487x78
599 1222212
>>221986
Ах ехидная дата база. Теперь понятно, по чему искать среднее. Спасибо. не, ну это пиздец, никогда не угадаешь, что они там наделали

Теперь можно пойти убить себя нахуй на рейтинговом
600 1222223
>>221832
>>221940
Еще при импорте, массовых загрузках могут вручную заполняться таблицы.
601 1222277
Анон, у меня есть таблица, допустим, товаров, и таблица категорий. Связаны они через пивот-таблицу (у одного товара может быть много категорий). В той же пивот-таблице содержится столбец с сортировкой (т.е. в разных категориях одни товары могут быть отсортированы по-разному). Плюс к тому у товаров есть какой-то столбец (допустим, "рекомендую" или ещё один сортировочный столбец).
Вопрос: как мне выбрать первые сто товаров с сортировкой и по столбцу из пивот-таблицы, и из "основной" товарной (причем основная в приоритете), но при этом избежать сек скана?
Screenshot from 2018-07-05 20-27-19.png213 Кб, 1920x1080
После перезагрузки ubuntu слетает(или м.б происходит что-то другое) root пароль для mariadb 603 1223203
Установил mariadb с помощью sudo apt-get install mariadb-server mariadb-client. Root пароль задать не предложили. Задал с помощь скрипта mysql_secure_installation. Вроде всё запускается. Но после перезагрузки субд шлет нахуй(первый пик).
Снёс и поставил снова. Пока всё работало(до перезагрузки) сделал так:
mysql -u root
MariaDB [(none)]> use mysql;
Database changed
MariaDB [mysql]> update user set password=PASSWORD("my-new-cool-password") where User='root';
MariaDB [mysql]> flush privileges;
MariaDB [mysql]> update user set plugin='' where User='root';
MariaDB [mysql]> quit;
Вроде как сначала всё заработало после ребута. А может мне и показалось, т.к я отошёл покушать на полчаса. Вернулся и всё опять поломалось.
Попробовал сделать так - http://dedicatesupport.com/content/sbros-parolya-polzovatelya-root-v-mysql
Один хер всё ломается после перезагрузки.
В чем тут дело?
604 1224159
>>186288
двачую
606 1241965
гайз, хелпа нужна. Есть допустим запрос.
select
from table
where 1=1
and field in (value1, value2, value3)
;

Можно ли как-нибудь заебенить:
set @variable = (value1, value2, value3);
select

from table
where 1=1
and field in @variable
;

????
607 1242920
>>241965
Да, почти.
declare @variable as table (value int);
insert into @variable (value)
select 1
union all select 2
union all select 5

select
from table
where 1=1
and field in (select value from @variable)
608 1242950
>>242920
дело в том, что количество вэлью может меяться,
Я так понял то, что я хочу в mysql нельзя сделать(
609 1242975
>>242950
Напиши функцию, которая парсит строку и превращает ее в table expression, который и будет возвращать. Используй это функцию в запросе.
Тред утонул или удален.
Это копия, сохраненная 10 августа 2018 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски