
<h1 class=p1>Реляционные базы данных</h1>
<br>
<br>

<p class=text>Задача длительного хранения и обработки информации появилась практически сразу с появлением первых компьютеров. Для решения этой задачи в конце 60-х годов были разработаны специализированные программы, получившие название <b>систем управления базами данных</b> (СУБД). СУБД проделали длительный путь эволюции от системы управления файлами, через иерархические и сетевые базы данных. В конце 80-х годов доминирующей стала <b>система управления реляционными базами данных</b> (СУРБД). С этого времени такие СУБД стали стандартом де-факто, и для того, чтобы унифицировать работу с ними, был разработан <b>структурированный язык запросов</b> (SQL), который представляет собой язык управления именно реляционными базами данных.</p>
<p class=prim><b><i>Замечание</i></b></p>
<p class=text>Взаимодействие с базой данных происходит при помощи Системы Управления Базой Данных (СУБД), которая расшифровывает запросы и производит операции с информацией в базе данных. Поэтому более правильно было бы говорить о запросе к СУБД и о взаимодействии с СУБД из Web-приложения. Но так как это несколько усложняет восприятие, далее везде мы будем говорить "база данных", подразумевая при этом СУБД.</p>
<p class=text>Существуют следующие разновидности баз данных:</p>
<ul>
  <li>иерархические;</li>
  <li>реляционные;</li>
  <li>объектно-ориентированные;</li>
  <li>гибридные.</li>
</ul>
<p class=text><b>Иерархическая</b> база данных основана на древовидной структуре хранения информации. В этом смысле иерархические базы данных очень напоминают файловую систему компьютера.</p>
<p class=text>В <b>реляционных</b> базах данных данные собраны в таблицы, которые в свою очередь состоят из столбцов и строк, на пересечении которых расположены ячейки. Запросы к таким базам данных возвращает таблицу, которая повторно может участвовать в следующем запросе. Данные в одних таблицах, как правило, связаны с данными других таблиц, откуда и произошло название "реляционные".</p>
<p class=text>В <b>объектно-ориентированных</b> базах данных данные хранятся в виде объектов. С объектно-ориентированными базами данных удобно работать, применяя объектно-ориентированное программирование. Однако, на сегодняшний день такие базы дан-ных еще не достигли популярности реляционных, поскольку пока значительно уступают им в производительности.</p>
<p class=text><b>Гибридные</b> СУБД совмещают в себе возможности реляционных и объектно-ориентированных баз данных.</p>
<p class=text>В Web-приложениях, как правило, используются реляционные базы данных. Мы будем рассматривать пример базы данных, на которой основано большинство форумов, в том числе и тот, который мы далее будем разрабатывать. В этой базе хранится информация об авторах форума (authors), о названиях форумов (forums), о темах форума (themes) и, собственно, сами сообщения (posts). Таким образом, наша база данных будет включать следующие таблицы:</p>
<p class=prim><b>Таблица 1</b> Таблицы базы данных Forum.</p>
<TABLE BORDER CELLSPACING=1 WIDTH=30%>
   <TR><TD VALIGN="TOP">
    <P ALIGN="center">authors</TD>
   </TR>
   <TR><TD VALIGN="TOP">
    <P ALIGN="center">forums</TD>
   </TR>
   <TR><TD VALIGN="TOP">
    <P ALIGN="center">posts</TD>
   </TR>
   <TR><TD VALIGN="TOP">
    <P ALIGN="center">themes</TD>
   </TR>
</TABLE>
<p class=text>Модель реляционной базы данных представляет данные в виде таблиц, разбитых на строки и столбцы, на пересечении которых находятся данные. Пример такой таблицы показан в Табл.2:</p>
<p class=prim><b>Таблица 2</b> Структура реляционной базы данных.</p>
<TABLE BORDER CELLSPACING=1 WIDTH=100%>
<TR><TD WIDTH="11%" VALIGN="TOP">&nbsp;</TD>
<TD WIDTH="14%" VALIGN="TOP">
<B><P>ряд</B></TD>
<TD WIDTH="13%" VALIGN="TOP">&nbsp;</TD>
<TD WIDTH="62%" VALIGN="TOP">&nbsp;</TD>
</TR>
<TR><TD WIDTH="11%" VALIGN="TOP">
<B><P>строка</B></TD>
<TD WIDTH="14%" VALIGN="TOP">
<B><P>id_forum</B></TD>
<TD WIDTH="13%" VALIGN="TOP">
<B><P>name</B></TD>
<TD WIDTH="62%" VALIGN="TOP">
<B><P>Description</B></TD>
</TR>
<TR><TD WIDTH="11%" VALIGN="TOP">&nbsp;</TD>
<TD WIDTH="14%" VALIGN="TOP">
<P ALIGN="JUSTIFY">1</TD>
<TD WIDTH="13%" VALIGN="TOP">
<P ALIGN="JUSTIFY">дизайн</TD>
<TD WIDTH="62%" VALIGN="TOP">
<P ALIGN="JUSTIFY">Обсуждаются вопросы дизайна</TD>
</TR>
<TR><TD WIDTH="11%" VALIGN="TOP">&nbsp;</TD>
<TD WIDTH="14%" VALIGN="TOP">
<P ALIGN="JUSTIFY">2</TD>
<TD WIDTH="13%" VALIGN="TOP">
<P ALIGN="JUSTIFY">MySQL</TD>
<TD WIDTH="62%" VALIGN="TOP">
<P ALIGN="JUSTIFY">Обсуждаются вопросы, связанные с MySQL</TD>
</TR>
<TR><TD WIDTH="11%" VALIGN="TOP">&nbsp;</TD>
<TD WIDTH="14%" VALIGN="TOP">
<P ALIGN="JUSTIFY">3</TD>
<TD WIDTH="13%" VALIGN="TOP">
<P ALIGN="JUSTIFY">PHP</TD>
<TD WIDTH="62%" VALIGN="TOP">
<P ALIGN="JUSTIFY">Обсуждаются вопросы, связанные с PHP</TD>
</TR>
<TR><TD WIDTH="11%" VALIGN="TOP">&nbsp;</TD>
<TD WIDTH="14%" VALIGN="TOP">
<P ALIGN="JUSTIFY">4</TD>
<TD WIDTH="13%" VALIGN="TOP">
<P ALIGN="JUSTIFY">разное</TD>
<TD WIDTH="62%" VALIGN="TOP">
<P ALIGN="JUSTIFY">Другие вопросы</TD>
</TR>
</TABLE>
<p class=text>В табл.2 приведён пример таблицы forums базы данных большого форума, в котором имеется несколько разделов, посвящённых различным этапам построения Web-приложения. Каждая строка этой таблицы представляет собой один раздел форума. Четыре строки таблицы представляют собой весь форум.</p>
<p class=text>Каждый столбец таблицы forums представляет один элемент данных для каждого из форумов. Столбец id_forum содержит уникальный идентификатор форума, столбец name содержит название форума и столбец description содержит краткое описание проблемы, обсуждаемой на форуме.</p>
<p class=text>Кратко особенности реляционной базы данных можно описать следующим образом:</p>
<ul>
  <li>Данные хранятся в таблицах, состоящих из столбцов и строк;</li>
  <li>На пересечении каждого столбца и строчки стоит в точности одно значение;</li>
  <li>У каждого столбца есть своё имя, которое служит его названием, и все значения в одном столбце имеют один тип. Например, в столбце id_forum все значения имеют целочисленный тип, а в строке name - текстовый;</li>
  <li>Столбцы располагаются в определённом порядке, который определяется при создании таблицы, в отличие от строк, которые располагаются в произвольном порядке. В таблице может не быть не одной строчки, но обязательно должен быть хотя бы один столбец;</li>
</ul>
<p class=text>Запросы к базе данных возвращают результат в виде таблиц, которые тоже могут выступать как объект запросов.</p>
