Прежде чем обращаться к таблицам, получать данные и манипулировать с ними, следует разработать структуру базы и заполнить ее информацией. Начать в этом случае следует с имеющегося содержания. Для примера возьмем сайт, на котором приводятся кулинарные блюда разных народов. Разумеется, подобный сайт делать не будем, его структура приведена лишь для ознакомления и лучшего понимания, какие таблицы в базе следует завести. Еда это самая близкая и понятная для всех людей тема, из-за этого и выбрана.
Русская кухня
Кавказская кухня
Для хранения структуры разделов создадим таблицу с именем section, в которой будет всего два основных поля. Этого вполне достаточно чтобы держать в таблице иерархическую схему любой сложности.
Таблица section
Имя поля | Тип | Описание |
---|---|---|
section_id | tinyint(3) unsigned | Идентификатор раздела |
section_pid | tinyint(3) unsigned | Идентификатор родительского раздела |
section_title | varchar(60) | Заголовок раздела |
section_description | text | Описание раздела |
Поле section_id является уникальным и предназначено для задания идентификатора раздела. Это поле следует определить в качестве первичного индекса, делается это для того, чтобы данные однозначно указывали на требуемые разделы и работа с ними происходила быстрее. Значением поля является целое положительное число от 1 до 255, больше разделов на сайте вряд ли понадобится. Можно было назвать поле просто id, но еще предстоит связывать данные разных таблиц, а в них также будут идентификаторы. Чтобы не запутаться, в имя поля лучше добавить название таблицы или другое ключевое слово.
В поле section_pid содержится значение идентификатора раздела, которое является родителем для раздела текущего. Родителем называется раздел верхнего уровня, так, для раздела «Закуски» его родителем будет раздел «Русская кухня». Если родитель отсутствует, значение поля следует приравнять нулю. Пример заполнения таблицы данными показан ниже.
Записи таблицы section
section_id | section_pid | section_title |
---|---|---|
1 | 0 | Русская кухня |
2 | 1 | Закуски |
3 | 1 | Первые блюда |
4 | 1 | Вторые блюда |
5 | 0 | Кавказская кухня |
6 | 5 | Первые блюда |
7 | 5 | Вторые блюда |
section_title — поле содержит название раздела, заголовок больше 60 символов окажется слишком длинным, поэтому он ограничен именно таким числом.
section_description — значение поля используется в нескольких целях: для описания страницы с помощью метатега Description и для краткой информации, что в данном разделе содержится. Для этого поля используется тип text, который позволяет хранить до 65535 символов, что вполне достаточно для создания подробного описания.
SQL-запрос, генерирующий таблицу section, приведен в примере 1.
Пример 1. Создание таблицы sectionСам SQL-запрос можно выполнить через систему phpMyAdmin (для тех, кто установил комплект Денвер, адрес на локальном компьютере http://localhost/phpMyAdmin/index.php). На рис. 1. показана закладка SQL, которую следует выбрать и ввести текст примера. После чего необходимая таблица будет создана автоматически.
Рис. 1. Выполнение SQL-запросов в системе phpMyAdmin
Используемые в запросе примера 1 параметры.
TINYINT — целое число, может изменять значение
от -127 до 127. Тип TINYINT unsigned указывает,
что значение будет положительным числом и меняться в пределах от 0 до 255. В
скобках указывается ширина поля.
auto_increment — автоинкрементирование, другими
словами, автоматическое увеличение значения на единицу.
NOT NULL — означает, что поле не может содержать
пустое значение.
PRIMARY KEY ('section_id') — устанавливает
первичный ключ для поля section_id.
Вторая основная таблица предназначена для хранения самого содержания, так называемого контента, так ее и назовем — content.
Таблица content
Имя поля | Тип | Описание |
---|---|---|
content_id | smallint(5) unsigned | Идентификатор статьи |
section_id | tinyint(3) unsigned | Идентификатор раздела, куда входит статья |
content_title | varchar(60) | Заголовок статьи |
content_keywords | varchar(255) | Ключевые слова |
content_description | text | Описание статьи |
content_author | varchar(50) | Автор статьи |
content_published | date | Дата публикации |
content_update | date | Дата последнего обновления |
count_total | smallint(5) | Общее количество человек, прочитавших статью |
count_today | smallint(5) | Количество человек, прочитавших статью сегодня |
today | date | Сегодняшняя дата |
Поле content_id является ключевым и однозначно определяет каждую статью по ее номеру. Поскольку статей может быть гораздо больше, чем разделов, ведь каждый раздел содержит сразу несколько статей, используется тип данных smallint. Положительные значения элементов в этом случае могут быть от 0 до 65535, вполне солидное значение для любого сайта.
section_id — номер раздела, его значение берется из таблицы section. Это поле является связующим между двумя таблицами, поэтому тип и формат записи должны совпадать в обеих таблицах.
С названием статьи и ее описанием все понятно, поэтому обратимся к ключевым словам (content_keywords). Это поле используется поисковыми системами для гибкого поиска информации и повышения рейтинга страницы. Строка больше 255 символов, которая отводится для этого текста, обычно не требуется, поисковики сами обрезают чересчур длинные строки.
Счетчики посетителей нужны для информации, эти данные можно публиковать на странице
или не делать этого, а использовать для своих нужд. В любом случае, будет полезно
знать, сколько людей читают ту или иную статью для создания их рейтинга или
анализа популярности материалов. Чтобы определить, сколько человек прочитало
статью сегодня, требуется хранить сегодняшнюю дату, дабы обнулять счетчик count_today.
Для этого и вводится дополнительное поле today.
Если планируется большое количество посетителей сайта, порядка несколько тысяч читателей на одну статью, то счетчики имеет смысл разместить в отдельной таблице. Таким способом можно снизить нагрузку на одну таблицу и ускорить работу программы.
SQL-запрос, генерирующий таблицу content, приведен в примере 2.
Пример 2. Создание таблицы contentТип данных smallint unsigned, который участвует в запросе, предназначен для хранения целых чисел от 0 до 65535.
Напрямую, аналогично СУБД Access, установить отношения между таблицами нельзя. Так что связи между полями, в которых содержится общая информация, устанавливаются через запросы. Совсем не обязательно, чтобы эти поля имели одинаковое имя, важно, что информация, тип данных и длина поля в записях совпадали. На рис. 2 и 3 приведены используемые таблицы с указанным типом и размером полей, а на рис. 4 показано связывание таблиц по полю section_id. Цветным ромбом отмечены ключевые поля.
Рис. 2. Таблица section
Рис. 3. Таблица content
Рис. 4. Связывание данных
На рис. 4. показан пример работы конструктора запросов, при котором два поля оказываются связанными и данные извлекаются сразу из двух таблиц.
После создания вышеуказанных таблиц и заполнения их информацией, можно строить необходимые запросы и выводить их результат на веб-страницу.