Форум программистов, компьютерный форум, киберфорум
Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 31.07.2012
Сообщений: 19

Можно ли не использовать операцию "соединение" для восстановления ссылок?

19.09.2012, 12:59. Показов 1048. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, корифеи!
Я опять со своими дурацкими детскими вопросами. Извините и не сильно ругайтесь!
Можно ли (и в каком современном языке это можно, если в сиквеле нельзя) восстанавливать по ключевым ссылкам в каскадах таблиц нужную информацию, но не использовать при этом операции соединения таблиц?
Постараюсь пояснить смысл вопроса. Пусть имеется совокупность реляционных таблиц, в которых только цифры-коды и немного цифр "фактов". Точно, как в Кимбаловской "снежинке". Тысячи таблиц-скелетов с фактами и десяток таблиц-справочников (измерений).
Как выполнить выборки по индексу по значениям ключей так, чтобы на выходе получить результат с подменой значений ключей значениями из справочников, но так, чтобы ничего не перемножать этим нудным "джоином", а осуществлять простое сцепление таблиц?
"Старые" языки программирования имели простейшую операцию типа "сетрелейшн", которая осуществляла позиционирование в буфере на запись (или на группу записей) по значениям ключа одновременно в куче таблиц. И потому позволяла сразу же "сцеплять" таблицы, а не перемножать их. Это был как бы частный случай соединения, который выполнялся сразу же в реальном времени. И самое главное - моментально быстро!
А в современных языках такое можно делать?
Только умоляю - давайте обойдемся без нудных лекций на тему "какие плохие студенты нынче пошли - не хотят само годами в книжках копаться, а только норовят украсть чужие знания, потому и задают идиотские вопросы". Давайте не мусорить форум лекциями, а просто обсудим проблему.
Еще раз спасибо за деловые подсказки и помощь бедным студентам...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.09.2012, 12:59
Ответы с готовыми решениями:

Можно использовать одинаковые ключи для разных ссылок одного домена?
Как лучше? domen.ru/odezhda-obuv-lichnye-veshhi-aksessuary/podat-obyavlenie domen.ru/technika/podat-obyavlenie ...

PPPoE соединение в каких подключениях можно использовать?
Подскажите, в такой схеме - 2 домашних ноута подключены к роутеру по WiFi. Роутер в свою очередь подключен к DNS серверу. Вопросы такие. ...

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

4
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
19.09.2012, 13:11
Для начала вопрос: что ты знаешь о физической реализации этих "нудных" джойнов и этих set relation?

PS
В конечном итоге важна не скорость "установки set relation" или "джойна" (кого она волнует), а скорость получения набора данных. Так вот, уверяю тебя, что скорость получения набора в тех старых языках (скажем, я работал с Clipper) отнюдь не была мгновенной (разумеется при нахождении БД на сети, локальное расположение мало кого интересует).
0
0 / 0 / 0
Регистрация: 31.07.2012
Сообщений: 19
19.09.2012, 13:29  [ТС]
Цитата Сообщение от Grossmeister Посмотреть сообщение
Для начала вопрос: что ты знаешь о физической реализации этих "нудных" джойнов и этих set relation?
Та вынужден признать, что тонкостей я не знаю, как оно внутри работает. Потому то и вынужден задавать дурацкие вопросы.


Цитата Сообщение от Grossmeister Посмотреть сообщение
В конечном итоге важна ... скорость получения набора данных
Вот-вот. Так вот смысл вопроса именно в этом. Можно ли в принципе в онлайне получать такие выборки, если таблиц - тысячи, а записей - миллионы!

Цитата Сообщение от Grossmeister Посмотреть сообщение
... скорость получения набора в тех старых языках (скажем, я работал с Clipper) отнюдь не была мгновенной
Я сам лично игрался с приложениями, написанными на клиппере в 90х годах, которые в реальном времени обслуживали описанную конфигурацию таблиц. И все там просто "летало" даже на старых 486 машинках под Новелом. А что ж говорить о современных системах?
Но меня очень "продвинутые" программеры уверяют, что современные приложения будут тонуть на скелетных БД именно из-за невозможности управлять джоинами.
Опять же мой вопрос из разряда "да-нет", то есть "можно-нельзя". Меня вполне устроит, если вы мне скажете - точно можно, просто нужно будет покопаться в документации о сиквеле...
Это - так? Сиквел тоже позволяет такое вытворять, просто нужно его знать хорошо? Или это теперь в принципе не возможно?
0
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
20.09.2012, 10:37
ОК.
Чем отличается клиент-серверная технология от файл-серверной? При файл-серверной технологии, для того, чтобы прочитать таблицу, ее нужно было протащить целиком на клиента и уже там обрабатывать. При значительных объемах таблиц трафик получался ого-го.
В случае клиент-серверной технологии мы посылаем запрос на сервер, сервер в соответствии с запросом обрабатывает данные и возвращает на клиента только результирующий набор строк. Собственно клиент-серверная технология была придумана для того, чтобы уменьшить трафик сети. Плюс, как правило, сервер обладает бОльшими ресурсами, чем клиентский комп.
Т.е. если на небольших объемах и небольшой загрузке сети файл-серверная технология может в некоторых случаях быть быстрее клиент-серверной, то в "обычных" условиях клиент-серверная технология является превалирующей (иначе нафиг она была бы нужна).
А что касаемо того, как физически происходит соединение таблиц на сервере, то для этого в СУБД существует оптимизатор, который на основании некоторых факторов принимает решение о применении того или иного метода. Про методы можно поискать по ключевым словам nested loop, merge join, hash join. Разумеется, скорость выборки зависит от наличия "правильных" индексов, адекватной настройки сервера (скажем, выделения достаточного места под buffer cache) и других факторов (например, в Oracle для этого должна быть собрана статистика по таблицам и индексам).

PS
В реальных запросах часто бывает соединение 5, 10, а то и больше таблиц (если система достаточно большая, класса ERP). Если объем их достаточно большой, я даже не представляю, сколько времени это будет работать при файл-серверной технологии. Именно поэтому такие технологии (на том же FoxPro или Access) сохранились только для мини-БД.
0
0 / 0 / 0
Регистрация: 31.07.2012
Сообщений: 19
22.09.2012, 17:20  [ТС]
Цитата Сообщение от Grossmeister Посмотреть сообщение
ОК.
Чем отличается клиент-серверная технология от файл-серверной?
Спасибо огромное за то, что отвечаете. Но если честно, я немного не об этом. Для меня (не смотря, что я всего лишь примитивный студент) совершенно очевидны преимущества клиент-серверной технологии.
Я видимо немного непонятно высказал вопрос. В старых языковых средствах существовало такое поняте как управляемый программером указатель. И кодер мог просто сказать "елочка, зажгись!" - т.е. указатель, стань на запись по значению ключа. И все - никаких перемножений, соединений, и прочей нудности. Причем, само собой, что под словом "запись" тут имеется ввиду очень витиеватая группа записей - каскад таблиц с пачкой записей в каждой таблице. Указатель становился одномоментно в 10 000 таблиц на 10 000 пачек записей, отфильтрованных совокупностью значений строк, каждая из которых строго соответствует индексу, открытому совместно с таблицами.
И что же получалось в итоге? Что кодер мог просто "читать" ОДНОВРЕМЕННО каждую пачечку - по 10, по 100, по 10000 записей в каждой таблице! И "сцепление" таблиц получалось АВТОМАТИЧЕСКИ - просто при выводе на экран. Это было не соединение, а сцепление таблиц. Никаких реляционных операций и соединений. А простое считывание из буфера указателя.
Вопрос - такой механизм есть в современных сиквелах? А если есть - почему же тогда все учебники рассказывают о том, что высоконормализованные БД хуже плохо-нормализованных? Ведь чем "снежинистее" схема БД (чем более она нормализована под "снежинку", скажем в 5НФ или даже ДКНФ) тем шустрее работала описанная совокупность. Потому, что соединения вообще были не нужны, а только выборки по части индексной строки. А при вводе информации обновление также происходило моментально.
Итак, можно ли моделировать описанный алгоритм в современном сиквеле?

Добавлено через 16 минут
И еще.
Я собственноручно проверял старые клипперные проги с терабайтными объемами фалов за 20 лет работы. На современных сетях они просто ЛЕТАЮТ! Потому, что каждый запрос имеет дело только с узкими фрагментами пачек записей из совокупности таблиц. И никаких соединений нет и в помине! О чем рассказывают все учебники? Зачем тут нужны соединения?

Добавлено через 2 часа 50 минут
Я вот еще о чем подумал. Вполне может быть, что просто фильрованные пачки записей в клиппере вытягиваются в буфер оперативной памяти и уже в памяти перемножаются. Поэтому и возникает впечатление молниеносности "сцепления" таблиц. Но тогда полностью аналогичное действие можно моделировать и в сиквеле.
Похоже, что в том старом приложении важно иное - пачки в высоконормализованных таблицах очень мелко фильтрованы индексом. Потому и запрос работает с очень узкими слоями таблиц. И хотя таких таблиц - тысячи, это никак не сказывается на быстродействии, потому что буфера памяти с головой достаточно для "сцепления" пачек путем соединения в одну таблицу, а затем отбрасывания из соединения не нужных по условию. Похоже, что там просто очень грамотные кодировщики работали с этими запросами.
Но если это - так, то возникает уже иной вопрос. Почему же тогда большинство классиков "коддизма-фейджинизма-кимбаллизма" рассказывают сказки о том, что мелко-посеченная совокупность таблиц типа "снежинки" плохо работает с оперативными запросами? Ведь именно оперативные запросы сводятся к очень мелким пачкам!
А соединения в буфере памяти коротких индексных пачек - это единственное, что нужно, чтобы при ответе на запросы о выборке из таблиц-фактов нужных строк заменять ссылочные значения ключей на всякие неключевые атрибуты.
В чем тогда тут прикол? Почему такое сильное противоречие, что народу приходится дополнять таблицы фактов всякими ненормаолизующими полями (наименованиями, иными атрибутами)?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.09.2012, 17:20
Помогаю со студенческими работами здесь

Определите 2n, n>0. Не использовать операцию степени
Определите 2n, n>0. Не использовать операцию степени. pow2t(0,P,P) :- !. pow2t(N,P,Q) :- N1 is N-1,P1 is 2*P, pow2t(N1,P1,Q).Решила...

Как использовать операцию разыменования в классе?
Помогите понять как использовать операцию разыминования хотя бы в первом классе. #include<iostream> #include<conio.h> ...

Вычислить сумму: 1 + 1/3 + 1/3^2 + … + 1/3^6. Операцию возведения в степень не использовать
Вычислить сумму: 1 + 1/3 + 1/3^2 + … + 1/3^6. Операцию возведения в степень не использовать.

Использовать операцию индексации запрещено только УКАЗАТЕЛИ!
Такое задание: Длина строчки парная. Измените порядок символов в строке на противоположный. Изменить регистр букв таким образом, чтобы...

Как использовать операцию сложения в классе миникалькулятора?
Всем здравствуйте. TForm1 *Form1; class Addition { private: public: float operand1; float operand2; char ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
YAFU@home — распределённые вычисления для математики. На CPU
Programma_Boinc 20.01.2026
YAFU@home — распределённые вычисления для математики. На CPU YAFU@home — это BOINC-проект, который занимается факторизацией больших чисел и исследованием aliquot-последовательностей. Звучит. . .
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru