@dba_ru

Страница 228 из 718
Ilia
06.09.2017
07:19:52
ER модель — это модель. А БД — это БД. ERмоделью можно моного что моделировать. НАпример, ООП

Danil
06.09.2017
07:20:13
Так почему же тогда нет разницы?)

Виталий
06.09.2017
07:20:18
Запрос напиши, и получишь связь
Какой еще запрос? Я про шлюз к записи говорил. В классе, описывающем страну просто не может быть никакого упоминания про город в рассматриваемом случае.

Google
Danil
06.09.2017
07:23:08
Дайте определение связи наконец))

Danil
06.09.2017
07:24:36
Т.е. мы пришли к тому что формулировка "таблица имеет связь" бессмысленна?

Потому что таблица - часть РБД

Ilia
06.09.2017
07:25:04
В теоретическом смысле да

Danil
06.09.2017
07:25:11
Чтд

Виталий
06.09.2017
07:25:28
Потом, Виталий, какие ещё КЛАССЫ ?
Про ООП можно, а про классы нет? Так не по джентльменски.

Ilia
06.09.2017
07:26:16
В практическом же мы же все БД-специалисты, да? Мы понимаем, что связей в РБД нет, поэтому мы используем этот термин для обозначения ДРУГОГО.

А именно, связи в хранящихся в РБД данных.

(которые, св/язи, из даталогической модели)

Google
Danil
06.09.2017
07:27:12
Т.е. речь идёт чисто о сленге, ок

Но требовалось точная формулировка

Alex
06.09.2017
07:27:26
че вас с утра на философию то потянуло

Dmitriy
06.09.2017
07:30:51
И ответ — неправильно сформулировано условие. Успеваемость — это уже связь многие-ко-многим
Давайте оставим этот пример. Изначально вопрос был про Страна-Город

Danil
06.09.2017
07:31:19
Это выходит гибрид енота с носорогом какой-то. На уровне рбд и так есть ключи, накрайняк логические. Но потребовалось выдрать термин из ЕR, который вообще к таблицам не относится. "Все мы понимаем" не аргумент, раз речь про "как правильно говорить")

Ilia
06.09.2017
07:31:32
Тут проще, Страна - один-ко-многим— Город

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

Виталий
06.09.2017
07:32:41
Или город без страны.

Ilia
06.09.2017
07:33:32
Ну или уточнить, что значит эта связь, какой смысл мы в нёё вкладываем, географическое помещение в страну, административное подчинение или что-то ещё.

Danil
06.09.2017
07:33:41
Давай усложню)) товары, покупатели, чеки. Описывать не буду, понятно. Вопрос - товары имеют связь с покупателем?

Ilia
06.09.2017
07:34:00
После покупки — да

чек — это их связь

Danil
06.09.2017
07:34:19
А таблицы то нет))

Ilia
06.09.2017
07:34:27
Почему нет ?

Danil
06.09.2017
07:34:33
Вопрос про таблицы был

Виталий
06.09.2017
07:34:37
После покупки — да
В базу они попадают до покупки

Google
Ilia
06.09.2017
07:34:40
Там две даже таблицы должны быть, чек и позиции чека

ПОсле покупки в базу должен попасть чек и его состав

(в смысле экземпляр чека)

Danil
06.09.2017
07:35:38
Потому что нет. Это не вопрос достижимости, иначе с покупателем будет связан классификатор типов товара например

Ilia
06.09.2017
07:35:41
А сами-то таблицы и до покупки существуют

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

Получается, что покупатель связан с классификатором покупаемых товаров, а почему нет-то?

В этом и сила РСУБД, что СВЯЗЕЙ НЕТ, они все строятся на лету...

Danil
06.09.2017
07:38:03
Иными словами по-твоему связь - это все что можно впихнуть в скл-запрос с условиями выборки по ключам?))

Ilia
06.09.2017
07:38:15
Именно

Danil
06.09.2017
07:38:48
Что-то мне подсказывает, что имелось в виду нечто иное)

Ilia
06.09.2017
07:38:50
А по-твоему что есть свя/зь?

ИМЕЛОСЬ в виду именно это

Дмитрий
06.09.2017
07:39:11
Всем привет! Сразу по существу: есть mysql. Есть таблица с полем типа date. На поле стоит index. При выборе данных mysql отказывается думать об индексе. Или может я в чем-то не прав, подскажите, пожалуйста. Вот sql запрос: explain SELECT report_id,qt FROM report_data WHERE report_id IN (SELECT reports.id FROM reports WHERE report_date BETWEEN '2016-12-01' AND '2016-12-01') В поле типа type стоит занчение all и не используются ключи.

Danil
06.09.2017
07:40:22
ИМЕЛОСЬ в виду именно это
Я повторюсь, что имелась в виду ерунда как по мне, мешанина понятий. Отсюда и вся дискуссия. Потому что к объектам рбд применяется понятие не отсюда

Ilia
06.09.2017
07:40:37
Ну это не проблема. Сколько записей в таблице? И сколько с report_date BETWEEN '2016-12-01' AND '2016-12-01' ?

Danil
06.09.2017
07:40:49
А по-твоему что есть свя/зь?
Для меня связь - понятие из ЕR

Ilia
06.09.2017
07:41:08
Для меня связь - понятие из ЕR
Ну да. И для меня тоже

Дмитрий
06.09.2017
07:41:32
Ну это не проблема. Сколько записей в таблице? И сколько с report_date BETWEEN '2016-12-01' AND '2016-12-01' ?
В таблице report_data немного - мил 100 наверно between возвращает до 100 к записей

Ilia
06.09.2017
07:41:53
Для меня связь - понятие из ЕR
У тебя в запросах именно эта связь и фигурирует. Именно она в запросах восстанавливается

Google
Danil
06.09.2017
07:42:51
Поэтому оно чуть более большой охват даст в наложеннии на рбд, за счёт многие ко многим и отсутствия необходимсти внешних ключей как индикатора, но не расползется по всему дереву достижимости

Ilia
06.09.2017
07:42:58
В таблице report_data немного - мил 100 наверно between возвращает до 100 к записей
100 млн записей — это много. Если 100к возвращаться примернодолжно, то индекс тут невыгоден, использоваться не будет

Дмитрий
06.09.2017
07:43:39
Ilia
06.09.2017
07:44:09
Ага, то есть mysql мне пытается намекнуть что он и без индекса могет быстро?
Нет, пытается намекнуть, что без индекса будет быстрее, чем с индексом

Дмитрий
06.09.2017
07:44:52
Нет, пытается намекнуть, что без индекса будет быстрее, чем с индексом
да, да. именно так я и уловил. Хорошо, пока не буду его трогать.. Хотя если из запроса убрать qt, то он почему-то индекс берет

Нет, пытается намекнуть, что без индекса будет быстрее, чем с индексом
explain SELECT report_id FROM report_data WHERE report_id IN (SELECT reports.id FROM reports WHERE report_date BETWEEN '2016-12-01' AND '2016-12-01') вот так будет тип index

Дмитрий
06.09.2017
07:47:12
потому что это разные запросы,
Понятно. А вот если глобально говорить. subquery много хуже чем left join? То есть когда данные раскиданы по таблицам и при большом запросе выдергиваются некоторые поля по условию.

Ilia
06.09.2017
07:48:15
Т.е. у тебя вот этот вот (SELECT reports.id FROM reports WHERE report_date BETWEEN '2016-12-01' AND '2016-12-01') список будет из сотни тыщ записей, а затем ты по ним ещё какуюто детальную информацию выбрать хочешь? И сколько же там будет записей? И нафига ж тебе столько то?

Виктор
06.09.2017
07:50:47
Понятно. А вот если глобально говорить. subquery много хуже чем left join? То есть когда данные раскиданы по таблицам и при большом запросе выдергиваются некоторые поля по условию.
Многое зависит от оптимизатора, он некоторые запросы с коррелированными подзапросами может и преобразовать в Join, если это возможно.

Дмитрий
06.09.2017
07:51:05
Т.е. у тебя вот этот вот (SELECT reports.id FROM reports WHERE report_date BETWEEN '2016-12-01' AND '2016-12-01') список будет из сотни тыщ записей, а затем ты по ним ещё какуюто детальную информацию выбрать хочешь? И сколько же там будет записей? И нафига ж тебе столько то?
У меня это просто условие ) То есть есть таблица в которой собраны id всякие. В том числе и report_id Я выбираю из этой таблицы большу кучу, и бегу в другие таблицы, где по id забираю что-то типа name или title

Дмитрий
06.09.2017
07:51:56
от конкретной задачи

Ilia
06.09.2017
07:53:22
Понимаю, что все зависит от контекста
Твой запрос можно переписать на JION. Ничего не изменится. Другие с подзапросами, может и нельзя. подзапросы и JOIN-ы реализуют разные реляционные операции , их бессмысленно сравнивать

Ilia
06.09.2017
07:54:52
Нет, не обязательно

МОжно поглядеть планы

Можно просто прикинуть умом пораскинуть.

Google
Ilia
06.09.2017
07:55:38
Но для этого нужно понимание того, как запросы выполняются.

(только для последнего)

Дмитрий
06.09.2017
07:56:01
Ilia
06.09.2017
07:56:34
Твой запрос напр. сразу видно, что "плохой", безнадёжный. (если конечно там за день 100тыщ)

Дмитрий
06.09.2017
07:57:31
Твой запрос напр. сразу видно, что "плохой", безнадёжный. (если конечно там за день 100тыщ)
Не у меня есть таблица которая пополняется раз примерно в месяц на 1 млн записей

не сразу в течении

а потом я такой хоба, и хочу получить из нее определеные данные

конечно при помощи всяких условий

чтобы не брать все данные

Твой запрос напр. сразу видно, что "плохой", безнадёжный. (если конечно там за день 100тыщ)
Чтобы немного приотркыть завесу: table1 id, user_id,page_id,state_id,qt table2 id,user_name table3 id, page_title table4 id,state_title И вот я иду в table1 и хочу получить данные, но не id и норм названия. Условия могут быть и в подзапросах: нужен user_name только если у него поле good = 1

Dmitriy
06.09.2017
08:55:37
Нормализация БД относится к логическому проектированию модели БД?

Дмитрий
06.09.2017
09:00:43
Вобщем 23к записей из БД выгружаются за 112 секунд... наверно это многовато

Vladislav
06.09.2017
09:04:58
А что значит "нормализация БД"?

Вроде нормализуют данные...

Ilia
06.09.2017
09:05:53
А что значит "нормализация БД"?
Выявление функциональных зависимостей в данных и проектирование БД в соответствии с нормальными формами РБД.

Vladislav
06.09.2017
09:08:48
Это же нормализация данных

Страница 228 из 718