Реализовать модель с плоскими файлами в РНР просто благодаря наличию множества функций для работы с файлами, таких как flock(), fwriteQ, fgets(), fputs(), fopen(), fclose(), fseek(), ftell(), unlink(), file_exists(), fi- lesize() и т. д. Об этих функциях рассказано в главе 9.
Модель реляционной базы данных
Сегодня это наиболее распространенный подход для веб-приложений. С помощью команд SQL данные вставляются, удаляются и модифицируются. Модель описывается диаграммой сущностей-связей (ERD), в которой указываются сущности и связи между ними. Затем ERD преобразуется в табличную структуру, и между таблицами устанавливаются связи. Посмотрим, как можно смоделировать наше приложение для опроса на основе реляционной базы данных:
Таблица Polls: pollid integer(4)
pollname varchar(40) question varchar(200)
Таблица Options: pollid integer(4) option votes
Таблица Comments: pollid integer(4) comment text
Эта структура похожа на модель с плоскими файлами, но файлы заменены таблицами. Внутреннее устройство таблиц нас не должно волновать - им занимается СУБД. Не надо обновлять или удалять каждую запись, потому что для этого есть команды SQL.
СУБД обычно дают следующие преимущества:
♦ Высокая целостность данных (не гарантируемая файлами)
♦ Улучшенная непротиворечивость данных при множественном доступе
♦ Улучшенная защита
♦ Стандартный язык запросов
♦ Различные представления, основанные на одних и тех же структурах
♦ Независимость от файловых структур
♦ Устранение избыточности информации
♦ Отображение в объекты
♦ Экономия дискового пространства благодаря объединению таблиц без потерь
Недостатки таковы:
♦ СУБД работают медленнее, чем файлы
♦ СУБД требуют дополнительного программного обеспечения
♦ Коммерческие СУБД бывают дороги
РНР отлично подходит для программирования баз данных. Он поддерживает большинство имеющихся сегодня СУБД, включая Oracle, MySQL, PostgreSQL, Sybase и DB2 (подробнее об этом рассказано в главах 17-19). Существует проверенная стратегия, с помощью которой строится или используется класс абстракции базы данных, который может выполнять все обычные операции с базой данных. Базу данных можно легко заменить без особых модификаций кода, написанного для определенной платформы.
Выбор уровня данных для приложения не требует изменений в коде логики приложения и уровне представления (что облегчает сопровождение кода). Однако полная независимость в смысле хранения данных лучше всего достигается на пути абстрагирования.