На новой работе много и активно общаюсь с базами данных и языком SQL. Не в первый раз — базы данных пронизывают всю нашу жизнь. На них строятся все сайты, в них хранится информация о банковских счетах, паспортных данных, зарплатах и вся бухгалтерия в целом, результаты научных исследования и документация спецслужб. Базы данных не менее вездесущая и всеобъемлющая основа нашей цивилизации чем сталь или электричество. Но большая часть граждан имеет о них крайне смутное представление
По названию очевидно что базы данных предназначены для хранения всевозможных (какая неожиданность) данных в надежном, удобном и легкодоступном виде. Например информации о зарегистрированных на сайте пользователях — с чем регулярно сталкиваются все пользователи форумов, фотоальбомов, дневников да и банальной почты вкупе с собственно доступом в инет. В основе любой базы данных лежат хорошо знакомые с начальных классов школы таблицы. Какой минимум информации о зарегистрированных на сайте людях нужно хранить? Очевидно имя пользователя, пароль и адрес электронной почты. Для этого достаточно завести простейшую таблицу с тремя столбцами, в каждой строке которой будет храниться информация о одном пользователе. Ситуация хорошо знакомая по электронным таблицам вроде Excel из Microsoft Office или Calc из OpenOffice. Но базой данных они еще не являются. Лежащая мертвым грузом информация сама по себе бесполезна, даже если ее невероятно много. Смысл она приобретает лишь при практическом применении — когда необходимо что-то найти и произвести с найденным определенные действия. Хотя бы вывести на экран. Или выбрать конкретное имя пользователя и сверить вводимый пароль с хранящимся в базе.
Структура базы данных создается с изначальной ориентацией на облегчение поиска, сбора, сортировки и модифицирования данных. Даже в примитивнейшей базе можно отобрать всех пользователей с почтовыми ящиками на яндексе или имеющих в имени определенное слово. После чего удалить всех пользователей с ником содержащим слово «Саакашвили». Если добавить столбцы с датой регистрации и временем последнего захода на сайт, то можно посмотреть сколько человек зарегистрировалось в августе и кто заходил на сайт за последнюю неделю. Запросы на получение такой информации пишутся на специальном языке и их выполнение обеспечивается системой управления базой данных. Но для подобного благолепия данные должны храниться в строго определенном формате.
Большинство современных баз данных реляционные. Это значит что информация хранится во многих таблицах, связанных между собой определенном образом. Иначе говоря имеющих отношения (relations) породившие название всего типа. Пользователи имеют обыкновение оставлять комментарии к страницам сайта — будь то фотографии, статьи или дневниковые записи. В существующую таблицу со столбцами «Имя пользователя — почта — пароль — дата регистрации — дата последнего захода» можно добавить еще столбцы — дата, место и текст комментария. Но в одной строке поместится только один комментарий. А их могут быть десятки и сотни. Глупость добавления новых столбцов очевидна. Можно для каждого комментария добавлять новую строку — отличающуюся только содержанием полей дата, место и текст комментария. Для ста комментариев одного пользователя получим сто строк в каждой из которых будет повторяться информация о пользователе. Но на реальных сайтах с десятками тысяч пользователей и миллионами комментариев подобное бессмысленное дублирование информации приведет к крайне неэффективному использованию места на диске. Логичней всего создать для комментариев отдельную таблицу вида «имя пользователя — дата — место — текст» с отдельной строкой на каждый комментарий. Теперь в базе данных будут две связанные между собой по имени пользователя таблицы. Умные люди назовут имя пользователя первичным ключом. И одним простейшим запросом за пару секунд можно получить все комментарии, оставленные пользователями с содержащими слова «Саакашвили» или «Путин» никами, за период с 1 по 12 августа. Пример реалистичный, под подобными никами очень любят регистрироваться тролли и хулиганы. Если к таблице пользователей добавить поле «забанен» со значениями «да» и «нет», то все тем же запросом подобных личностей можно временно отстранить от сайта.
Для пущего удобства современные базы данных обычно строятся по клиент-серверной технологии. Сама база данных хранится на сервере (особо мощном выделенном компьютере) в единственном экземпляре (не считая резервных копий). А многочисленные пользователи называются клиентами и отправляют запросы на выборку и модификацию информации с других компьютеров. Это позволяет избежать нестыковок, неотвратимо появляющихся при наличии множества экземпляров баз данных у различных пользователей. Представим себе, что два модератора имеют собственные копии базы и один забанил пользователя на неделю, а другой вообще удалил. Для сайта в целом возникает трудноразрешимый вопрос: что же на самом деле произошло с любителем громких ников?
На практике под базой данных обычно понимается собственно база данных (БД) — набор особым образом структурированной информации, в простых случаях хранящийся в одном файле, система управления базой данных (СУБД) — программа выполняющая запросы к базе и обеспечивающая ее сохранность. И собственно язык на котором пишутся эти запросы, под который подстраивается структура самой базы данных вместе с программой (можно с полным правом говорить и об обратном процессе — все три компонента тесно взаимосвязаны).
Сейчас шире всего распространен язык SQL (structured query language — язык структурированных запросов). Хоть он и стандартизирован международными организациями, но разработчики различных баз данных часто вносят собственные дополнения создавая диалекты вроде PL-SQL у Oracle или Transact-SQL у Microsoft. Мой сайт использует MySQL, а на работе я провожу время в обществе Microsoft SQL Server с перспективой Oracle. Фактически любой сайт представляет собой просто графическую оболочку для выполнения запросов к базе данных и вывода их результатов на экран, например «вывести такую-то статью и все комментарии в которых «место» совпадает с именем этой статьи» или «вывести все статьи отсортировав по дате их публикации».
На этих китах и стоит хранение данных. Если углубляться в тонкости практических реализаций вышеописанного, то можно легко утонуть в необъятных глубинах. Но в статье я в который уже раз применяю классический метод моделирования — позволяющий выделить и понять главное.
Похожие записи:
- Что такое научный метод? — это должен знать каждый!
- Барбара Шер. Умение желать (Wishcraft). 01. Предисловие. Что такое настоящая победа?
- Про службу хранения заметок Evernote
- Врачи и гоблины
- Стратегия протоссов в StarCraft II: основные начала и тактики, часть 2
- Как изменить максимальный размер загружаемого файла в php
- Бета Starcraft II — как играть с компьютером
- Награда для автора Блокнота
- Открытие комментариев
- Переезд, структура тем оформления WordPress, их редактирование и слоевой дизайн
- Почему нет ни одного нормального браузера?
- Про дизайн и выбор галереи для сайта/дневника
Список похожих постов предоставлен вам плагином YARPP.