База данных сайта: что это такое?

Автор: | 30.10.2015

baza-dannyh-sajtaПриветствую вас, читатели cccp-blog.com! :-)

Сегодня мы на мгновение вернёмся к основам создания сайта и поговорим о таком важном компоненте как база данных сайта. Я намеренно не касался данного вопроса в предыдущих публикациях, т.к. он требует особого отношения и не может быть рассмотрен вскользь.

Без базы данных сайта, при переходе на ресурс Вы бы увидели множество картиночек (и то только те, которые прописаны в html и css), кучу рекламы и, наверное, всё… Даже надписей на кнопках не найдёте, поэтому и не поймёте, что на них нужно нажимать. Согласитесь, Вы приходите на сайт не за этим :-)

То, что нужно пользователям от Интернет-ресурсов, — это информация. Вот она-то как раз и хранится в базе данных сайта. Вот поэтому-то и важно изучать данный вопрос…

Необходимость изучения базы данных сайта

С первого взгляда, может показаться, что вникать в тонкости устройства базы данных сайта есть смысл только разработчикам, решившим делать свой проект «с нуля».

Такая точка зрения вполне оправданна ввиду того, что пользователям, выбравшим из всех способов создания сайтов CMS и онлайн-конструкторы, нет смысла разбираться со структурой их БД ввиду её стандартности и готовности продуктов. Да и просто незачем туда соваться, если всё и так прекрасно работает, верно? :-)

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

Вот тогда данное руководство Вам и пригодится. Поэтому мы продолжаем :-)

База данных сайта — что это?

Для начала, как всегда, немного терминологии. Как я уже и говорил, понятие базы данных сайта относится к основам веб-строительства. Но, поскольку я не говорил о ней в одноимённой статье, посвятим ей пару строк здесь.

База данных (сокращённо БД) — это хранилище всей информации, расположенной на сайте. И совершенно неважно, к какому типу сайта принадлежит ресурс. Если он имеет больше одной страницы, БД у него гарантировано есть.

Ещё одной вещью, которую нужно запомнить, является то, что БД состоит из таблиц, у которых есть набор полей. В них-то вся информация и расположена в виде кортежей (записей). Например, «Красная Феррари» будет кортежем в таблице «Модели», у которой есть поля «Производитель» и «Цвет». Таблица, в свою очередь, будет частью БД «Машины».

baza-dannyh-sajta-tablicaК основным понятиям, связанным с базой данных сайта, относятся «сущность», «атрибут сущности» и «отношения». Пару слов о каждом из них, чтобы не возникало вопросов по ходу повествования.

  1. Сущность — это объект предметной области.

    Если Вы проектируете базу данных сайта книг, то сущностями у вас будут «книга», «автор», «издательство» и т.д. В структуре БД сущности представлены таблицами.

  2. Атрибут сущности — это свойство объекта.

    В нашем примере атрибутами книги будут являться «ФИО автора», «количество экземпляров», «год выхода», «переплёт». В структуре БД они представлены полями таблиц.

  3. Отношения — это логические связи между таблицами.

    Например, у книги есть автор. Данное отношение будет выражено одинаковыми полями в обоих таблицах.

    Структура таблиц будет зависеть от типа отношений, которые бывают:

    • «один-к-одному» — одной записи из первой таблицы соответствует один объект другой таблицы.

      Пример: издательство печатает произведения одного-единственного автора. Довольно часто такие таблицы объединяются;

    • «один-ко-многим» — записи из первой таблицы соответствует несколько записей из второй таблицы.

      Пример: у автора может быть много книг, у книги может быть много авторов. как и в предыдущем случае, каждому участнику отношений соответствует отдельная таблица;

    • «многие-ко-многим» — множеству записей из первой таблицы может соответствовать множество записей из второй таблицы.

      Пример: одну книгу может печатать много издательств в то же время, как одно издательство может печатать множество книг. При данном типе связи целесообразно создать промежуточную таблицу вроде «издательства-книги».

Для наглядности своих слов привожу изображение всех структурных элементов базы данных Интернет-магазина в программе phpMyAdmin, о которой я уже упоминал в статье «Программы для создания сайтов«:

baza-dannyh-sajta-phpmyadminПо поводу таблиц хотелось бы отметить, что в каждой из них в обязательном порядке есть ключевое поле. Это поле или группа полей, которые служат идентификатором записи таблицы. Т.е. в каждой таблице базы данных сайта не может быть 2 или более записей с одинаковыми значениями ключевых полей.

По поводу полей таблиц следует отметить, что у каждого поля есть:

  • имя — наименование поля;
  • описание — необязательно для заполнения, больше необходимо самому пользователю, чтобы вспомнить, какие данные здесь хранятся;
  • тип данных — тип вводимых данных (текстовый, числовой, временной и т.д.), от которого будут зависеть операции и набор функций, которыми можно обрабатывать содержимое такого поля.

А вот по поводу отношений мы поговорим более подробно, т.к. это интересная тема не только в области психологии, но и в базах данных сайта она простотой не отличается :-)

База данных сайта — нормализация отношений

Следующем темой, которую бы я хотел затронуть, является нормализация отношений. Речь тут пойдёт не о гармоничном развитии отношений с вашим партнёром, о чём привыкло думать большинство людей при встрече этого словосочетания :-) Мой блог посвящён немного другому…

Поговорим мы о нормализации отношений базы данных сайта, которая подразумевает приведение их к одной из 6 нормальных форм. Это делается для борьбы с избыточностью данных. Она заключается в содержании в БД повторяющейся информации.

Как раз для борьбы с этим и были введены нормальные формы, назначением которых как раз  и является оптимизация структуры базы данных сайта таким образом, чтобы в ней не было избыточных данных.
Рассмотрим, какие же нормальные формы бывают:

1. Первая нормальная форма

Отношение находится в 1НФ, если все его атрибуты являются простыми и в таблицах нет повторяющихся кортежей. Взяв для примера приведённую ранее таблицу «Машины», отметим, что сейчас она является приведённой к 1НФ.

Если бы в ней были записи типа «Ferrari => Красный, Жёлтый, Малиновый» — это было бы нарушением ввиду того, что атрибуты не являются простыми. В таком случае её нормализация заключалась бы в разбиении этой записи на 3: «Ferrari => Красный», «Ferrari => Жёлтый», «Ferrari => Малиновый».

2. Вторая нормальная форма

Отношение находится во 2НФ, если оно находится в 1НФ и все его НЕ ключевые атрибуты неприводимо зависят от первичного ключа. И в составе первичного ключа не должно быть меньшего подмножества атрибутов. Проще говоря, не должно быть посторонних, чужих по смыслу полей.

Если бы в нашей таблице помимо полей «Фирма» и «Цвет» было бы поле «Скидка», она не была бы нормализованной, т.к. скидка зависит от цвета, но не зависит от фирмы машины. Нормализация заключалась бы в разбиении её на 2 таблицы: «Фирма» и «id цвета» были бы в одной. А «id цвета», «Цвет» и «Скидка» были бы в другой.

3. Третья нормальная форма

По смыслу она очень похожа на 2НФ. Обе они предусматривают зависимость НЕ ключевых атрибутов от первичного ключа. Отношение находится в 3НФ, если оно находится во 2НФ и его НЕ ключевые атрибуты зависят от ПФ.

Единственное отличие в том, что во 2НФ зависимость неприводимая, а в 3НФ она нетранзитивная. Страшное слово «нетранзитивная» на самом деле подразумевает вынесение всех НЕ ключевых полей, которые могут относиться к нескольким записям таблицы, в отдельную таблицу.

Если бы в нашей таблице помимо полей «Фирма» и «Цвет» было бы поле «Возраст фирмы», она не была бы нормализованной, т.к. возраст фирмы не зависит от модели машины. Нормализация заключалась бы в разбиении её на 2 таблицы: «Цвет» и «id фирмы» были бы в одной, а в другой были бы «id фирмы», «Название фирмы», «Возраст фирмы».

Частным случаем 3НФ является нормальная форма Бойса-Клодда, которая дополнительно учитывает наличие в таблице нескольких потенциальных ключевых полей, которые являются составными и пересекаются (имеют хотя бы один атрибут).

Я, честно говоря, с трудом ощущаю разницу между 2НФ и 3НФ, даже не знаю, зачем ввели две формы, если на практике они означают одно и тоже: в таблице не должно быть посторонних полей. При проектировке советую вам запомнить и применять этот тезис :-)

Остальные формы я не буду рассматривать ввиду сложности их определения и достаточно тонких отличиях друг от друга. Да в этом и нет необходимости, т.к. на практике не всегда нужно доходить до 6НФ. В большинстве случаев достаточно приведение к 3НФ, чтобы в отношениях базы данных сайта отсутствовала избыточность и они считались нормализованными.

4НФ, 5НФ, 6НФ и их частные формы представляют скорее академический интерес, т.е. они могут быть интересны только узкому кругу учёных, которые защищают диссертации и проводят свои исследования, пытаясь открыть что-либо новое.

При реальном проектировании баз данных сайта эти заморочки могут только лишний раз запутать и отбить охоту, поэтому я в них и не углублялся :-) Если Вам будет интересно, Вы всегда можете прочитать об остальных нормальных формах на специализированных ресурсах. Мы же двигаемся дальше.

База данных сайта — денормализация отношений

Последним понятием, связанным с базами данных сайта, с которым я бы хотел вас познакомить, является денормализация отношений. Она является обратным явлением нормализации отношений. И заключается в преднамеренном приведении структуры БД в состояние, не соответствующее ни одной из нормальных форм.

Денормализацию есть смысл проводить, если в вашей БД:

1. Много соединений таблиц в запросах

Если Ваша база данных сайта нормализована, в ней будет масса таблиц, в большинстве которых будет всего 2 поля: ключевое и поле со значением, подтягивающимся по ключевому полю. Да, избыточности данных в таком случае не наблюдается, но и производительности тоже, т.к. операции объединения очень трудоёмкие :-)

Поэтому в данной ситуации есть смысл объединить несколько таблиц в одну для ускорения запросов по выборке данных.

2. Много расчётов

Если у Вас на сайте происходит много расчётов значений, которые хранятся в базе данных сайта, есть смысл подумать о денормализации. Особенно эта ситуация характерна для Интернет-магазинов, где постоянно рассчитывается стоимость заказов, цены товаров с учётом скидок и т.д.

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

3. Длинные поля

Если в вашей базе данных сайта есть длинные поля (фотографии, хранимые в blob-полях; огромные текстовые описания товаров), то запросы, подсчитывающие количество записей в таких таблицах будут выполняться оооочень медленно :-)

Поэтому в данном случае есть смысл провести денормализацию путём создания отдельных таблиц, содержащих всего 2 поля: id записи и поле, содержащее «тяжёлое» значение. В основном таблице, в которой до этого это тяжёлое поле хранилось, вместо него будет идентификатор, и подсчёт количества записей будет производиться гораздо быстрее.

Подытожив всё вышесказанное, хочу сказать, что денормализация баз данных сайта проводится с целью повышения производительности веб-проекта, которая заключается в ускорении загрузки страниц и потребляемости ресурсов сервера, на котором он расположен.

На этом я заканчиваю своё повествование, в котором нами была рассмотрена база данных сайта — её основные понятия и определения, а также меры по оптимизации её структуры. В дальнейших публикациях я более подробно коснусь БД отдельных типов ресурсов (первый на очереди Интернет-магазин), в которых более подробно будут рассмотрены их сущности и атрибуты, а, следовательно, структура их таблиц и отношений между ними.

С нетерпением жду ваших отзывов и вопросов. Делитесь записью со своими друзьями в социальных сетях, привлекайте их к обсуждению. Чем больше людей — тем больше интересных мыслей!

И в завершение предлагаю вашему вниманию интересное экскурсное видео о том, что такое БД и зачем она нужна. Приятного просмотра :-)

Всем удачи! :-)

  1. 5
  2. 4
  3. 3
  4. 2
  5. 1
8 голосов, в среднем: 4.5 из 5

1 комментарий к статье "База данных сайта: что это такое?"

  1. kuladar90

    очень интересная статья! думаю многим было бы полезно узнать об этом.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *