@Mr-Governor
Губернирую

Какая структура у реляционной базы данных?

Как я понимаю: иерархическая БД хранится как XML данные. Т.е. иерархиея определяется вложенностью.
Сетевая имеет множество ссылок на другие поля - связанные с нужным полем.

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

Говорят что реляционная хранится в виде таблицы. Но в ПК ведь память считается линейной(значит как одномерный массив), как именно эта таблица хранится там. К примеру, есть 2 таблицы:
Proekt2.gif
Знаю что порядок записей в такой БД - хаотичный.
Значит данные хранятся по строкам. ПРимер 1-ая таблица в памяти:
"1","Иванов П.П.","лаборант","[2т:2]";
"3","Петров А.Н.","инженер","[2т:2]";
"2","Сидорова А.М,","бухгалтер","[2т:1]";
(это все в одной строке)

В квадрытных скобках типа ссылка на второую таблицу, где значение такого же поля имеет значение после двоеточия.
Так ли примерно хранятся реляционные БД в памяти?

И еще, как в запросе проявляется связь данных?
Есть след. запрос: SELECT * FROM TABLE1 WHERE "ФИО"="Сидорова А.М."
Я не знаю как написать что таблицы связанны, но предположим что "Отдел" связан с "№ сотрудника" как на картинке.

Предположим что вторая таблица в памяти имеет тот же порядок.
Имея наши таблицы в памяти, логика запроса будет такова:
1) Сервер найдет и прочитает 1ую запись, т.к. она не соответствует условию WHERE, перейдет к след. записи.
2) Проверит вторую запись, так же пропустит ее, т.к. условие ложно.
3) Прочитает 3-ю запись, т.к. условие истинно, вернется к номеру и отобразит значения полей таблицы, и т.к. последнее поле является ссылкой, перейдет ко второй таблице.
4) В первой записи 2ой таблицы, проверит связанные поля, т.к. они не равны, перейдет с след. записи 2ой таблицы.
5) Во 2ой записи связанные поля идентичны, так же отобразит записи второй таблицы.
Если во 2ой таблицы "№ сотрудника" ключевое поиск остановится. Т.к. нет смысла искать дальше. Иначе сервер проверит всю вторую таблицу.

Изложенное выше мое понимание логики работы реляц. БД.

В универе нам абстрактно объясняют язык SQL, а я так не понимаю. Завалил предмет где нужен был SQL. Мне нужно понять именно пошаговую логику работы SQL.
Есть ли какая нибудь книга в которой именно так (на низком уровне) описывается логика работы БД?
  • Вопрос задан
  • 1562 просмотра
Решения вопроса 2
Sanasol
@Sanasol
нельзя просто так взять и загуглить ошибку
На низкий уровень переходят когда на обычном хоть что-то понятно.
Как он вам поможет, если вы совсем не знаете как оно работает при "обычном использовании"?

Сначала надо SQL познать. Это достаточно скромный язык и там ничего сверхсложного нет.
Все нюансы уже зависят от того какую СУБД использовать: postgre, mysql, mssql.

А основная база языка с самыми простыми вещами select, insert, update, delete, where во всех одинаковая.
И учить почти нечего, т.к. понимается оно на уровне чтения т.к. написано не абстрактными функциями, которые надо изучать по документации, а словами которые делают то что они значат.

Нет таких процессов поиска/связей как вы описали.
Таблица ссылаются друг на друга, но это совсем не для select, потому что select сам по себе никак не затрагивает связанные данные из других таблиц.
Связь таблиц работает в случае обновления/удаления записей, например.

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

В mysql(и аналоги во всех других субд) есть индексы, кеш, партиции, данные на диске, данные в оперативной памяти.
Все это так или иначе участвует в процессе поиска и выбора данных.
Не говоря уже про кучу оптимизаций и всяких заумных алгоритмов чтобы это работало с супер скоростью и огромными данными которые оно может содержать.
Так что если не удаётся понять основы SQL, то внутри вообще тёмный лес.(исходники открыты, можно до дыр зачитать)
Ответ написан
Комментировать
dimonchik2013
@dimonchik2013
non progredi est regredi
книгу смотри тут + книгу "mysql оптимизация производительности"
еще смотри классический "JOIN vs WHERE IN" или просто логику JOIN, которая использует ВНЕЗАПНО не столько память, сколько процессор
но если ты в универе и без практики - без обид - нет такой книги про устройство БД которую на данном этапе поймешь
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
tsklab
@tsklab Куратор тега SQL Server
Здесь отвечаю на вопросы.
К примеру, есть 2 таблицы
Это нарушение нормальной формы. Изучение БД, SQL нужно начинать с математики, конкретнее, теории множеств.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы