Читаю книжку "sql для самых-самых тупых". И всё равно ничего не понимаю. Оъясните мне глубинную концепцию СУБД на пальцах. Не могу я её осознать. Заботать теорию надёжности за вечер - могу, апач поднять - могу, даже торт испечь могу, хоть и паршивый. А вот в чём скрытый смысл баз данных, понять не могу.
1)Возможность доступа к этим таблицам (т.е. поддержка языка БД, тот же SQL например). 2)Хранение таблиц в рациональной форме на диске и в оперативной памяти, кэширование. 3) Логи операций, резервное копирование, возможность восстановления данных 4) Ну и всякие дополнительные фишки, вроде транзакционных механизмов, локировок, ролей пользователей и т.п.
я смысл ООП тоже не понимал, пока не попалась какая-то задача, в которой я сам почувствовал необходимость подобной штуки, а не то, что она есть и ее надо использовать. и тогда все сразу стало понятно. советую найти такую же про БД, тем более это имхо даже попроще. везде нужны связанные данные типа "у одного пользователя есть много друзей и еще больше фоток в нескольких разных альбомах". попробуй какие-нить другие способы организации подобной инфы, учитывая, что из нее надо делать всякие хитрые выборки, и все встанет на свои места.
то же самое хотел предложить. как только ты пробуешь альтернативный способ сама реализовать (например, хранение файлами или как-то еще), и пытаешься на этом реализовать решение какой-то настоящей задачи, на второй-третьей задаче понимаешь, что тебе нужен оптимальный способ хранения данных (хотя бы третья нормальная форма), механизм блокировок доступа, механизм компактного хранения данных, доступ к данным с авторизацией, параллельный доступ разных пользователей, хранение запросов где-то на стороне базы и так далее, и так далее.
То, что я перечислил, - это то, с чем сталкиваются вообще все программисты баз данных.
Я, пожалуй, не совсем верно сформулировала исходную проблему. Зачем нужны БД и что это удобно, я понимаю примерно :) А вот механизмы работы понять не могу. Вот выше мне доступно на пальцах объяснили, как устроен доступ к sql-серверу нескольких клиентов одновременно, и я поняла. А вот как, допустим, устроен доступ с авторизацией или хранение запросов на стороне базы, пока нет(
Авторизацию и роли пользователей довольно легко понять на примере того же паспортного стола по-моему. Вот скажем тетя из примера, которая отвечает за изменения фамилий имеет свой логин-пароль для доступа к БД. И СУБД знает, что этому пользователю надо разрешить запросы, которые читают и изменяют фамилии, но не выполнять от него запросов на удаление всей базы или отдельных таблиц. А то наудаляет еще случайно, все данные потеряем. В общем-то это глобальное правило компьютерной безопасности - давать ровно столько прав, сколько требуется пользователю для его работы. Всё целее будет.
Что касается хранения запросов на сервере (в случае клиент-серверной СУБД, то прочитай это в википедии. Там всего один экран, если смысл каких-то пунктов будет не ясен, то опять же могу попробовать объяснить на примерах.
2. СУБД должна обеспечивать работу БД, а именно безопасность, корректность работы и целостность данных. Проблемы с целостностью данных самые простые в плане описания. Допустим, ушёл из банка клиент. Его удалили из БД и теперь программа падает каждый раз, когда кто-то из имевших с ним дело смотрит историю - его имени нет, а программа его запрашивает и не может вывести. Для решения подобных проблем, например, можно использовать триггеры - программы, которые самостоятельно выполняются при некоторых действиях, таких как добавление или удаление строчки. Можно, например, при удалении клиента во всех строчках упоминаемых его, заменить его на "неизвестного отправителя", можно, просто выпилить из базы все строчки. Корректность - это отдельная головная боль. С ней столько разных проблем, что все в комменте описывать лень :) Например, переводят тебе деньги на счёт сразу два человека в одну секунду - первый 1$, второй 1000$. Сначала оба посмотрели, что у тебя на счету 0$, потом второй сказал, "замени 0$ на 1000$", а после этого первый сказал "
( ... )
Книжки для умных я пробовала читать, но там возникает проблема "слова все знакомые, а смысл неясен". А вот в книжке для тупых я вчера почитала про транзакции и вроде даже поняла, зачем они нужны и как устроены.
В целом спасибо, еще пара моментов из твоего комментария мне стали ясны :)
Comments 23
Reply
Reply
2)Хранение таблиц в рациональной форме на диске и в оперативной памяти, кэширование.
3) Логи операций, резервное копирование, возможность восстановления данных
4) Ну и всякие дополнительные фишки, вроде транзакционных механизмов, локировок, ролей пользователей и т.п.
Reply
Reply
Reply
То, что я перечислил, - это то, с чем сталкиваются вообще все программисты баз данных.
Reply
А вот механизмы работы понять не могу.
Вот выше мне доступно на пальцах объяснили, как устроен доступ к sql-серверу нескольких клиентов одновременно, и я поняла.
А вот как, допустим, устроен доступ с авторизацией или хранение запросов на стороне базы, пока нет(
Reply
Вот скажем тетя из примера, которая отвечает за изменения фамилий имеет свой логин-пароль для доступа к БД. И СУБД знает, что этому пользователю надо разрешить запросы, которые читают и изменяют фамилии, но не выполнять от него запросов на удаление всей базы или отдельных таблиц. А то наудаляет еще случайно, все данные потеряем.
В общем-то это глобальное правило компьютерной безопасности - давать ровно столько прав, сколько требуется пользователю для его работы. Всё целее будет.
Что касается хранения запросов на сервере (в случае клиент-серверной СУБД, то прочитай это в википедии.
Там всего один экран, если смысл каких-то пунктов будет не ясен, то опять же могу попробовать объяснить на примерах.
Reply
Reply
Reply
В целом спасибо, еще пара моментов из твоего комментария мне стали ясны :)
Reply
Пожалуйста, если что - спрашивай :)
Reply
Reply
мир как реляционная база данных
Reply
Leave a comment