Upload
artem-gerasimovich
View
1.202
Download
0
Embed Size (px)
DESCRIPTION
Citation preview
ПЛИСКО ВЯЧЕСЛАВ.PLISKOVS@GMAIL .COM
HTTP: / /AMDY.SU/
Удобная работа с базой данных в PHP.
Реляционная база данных
Двухмерная таблицаКолонки – название полейСтроки – уникальные записиКлючи для идентификации и связей между
таблицамиSQL – стандартный язык запросов,
возвращает так же двухмерную таблицу
Шаблоны проектирования
ORMActive RecordsData mapperQuery ObjectDomain model
Шаблоны проектирования ORM
ORM (Объектно-реляционная проекция) — запись объектов программы в реляционную базу данных, отображение объекта и его представления в виде набора таблиц.
Шаблоны проектирования: Active Record
Active Record (Активная запись) – Объект, выполняющий роль оболочки для строки таблицы или представления базы данных. Он инкапсулирует доступ к базе данных и добавляет логику домена.
Шаблоны проектирования: Query Object
Query Object (Объект запроса) – интерпретатор структуры объектов в SQL запросы.
Шаблоны проектирования: Domain Model
Domain Model (Модель предметной области) — это объекты в объектно-ориентированных компьютерных программах, выражающие сущности из модели предметной области, относящейся к программе, и реализующие бизнес-логику программы.
Реализации ORM
Hibernate в JAVAActive Record в Ruby on RailsDjango ORM в PythonDoctrine в PHP
Doctrine ORM: Структура
PDODoctrine DBALDQLDoctrine ORM
Компоненты
Manager Connection Table RecordCollectionValidatorProfilerLocking Manager Views
Описание модели
Типы данных: boolean, integer, float, decimal, string, array, object, blob, clob, timestamp, date, enum, gzip
Связи: One to One, One to Many, Many to One, Tree Structure, Many to Many, Self Referencing (Nest Relations)
Индексы: первичный, уникальный, полнотекстовый
Проверки: больше, меньше, равно, e-mailОпции таблицы: тип, кодировка, сравнение
Описание модели: примеры кода
метод setTableDefinition()описание колонок $this->hasColumn(название, тип, размер, массив с параметрами); название таблицы $this->setTableName(название таблицы);ключи $this->index(название, array('fields' => array(поле), 'type' => тип));опции таблицы: $this->option('charset', 'utf8');
Метод setUp()связb между таблицами $this->has<One|Many>(таблица, array('local' => поле в текущей таблице, 'foreign' => поле в связанной таблице, 'refClass' => таблица для связи * - *));
DQL
Выборка данных, связанные записиВставка-изменение данныхУдаление данныхДля чего нужны Accessors и MutatorsСлушатели и обработка событий
DQL: примеры
$users = Doctrine::getTable('User')->findAll();$user = Doctrine::getTable('User')->find (1);echo $user->login, ' ', $user->Groups->Name; $users = Doctrine::getTable('User')->findByGroupsId (1);$users = Doctrine_Query::create()->from('User u')->leftJoin('u. Groups g')->where('g.id = ?', array(1))->fetchArray();
$user = new User();$user->login = ‘root';$user['groups_id'] = 1;$user->save();
$user->delete();$result = Doctrine_Query::create()->delete()->from('User u')->where('u.id = ?', array(1))->addWhere('groups_id = 1') ->execute();
Шаблоны
Для чего это нужно и как работаетGeographicalI18nNestedSetSearchableSluggableSoftdeleteTimestampVersionalble
Иерархические структуры
Adjacency list (Список смежностей)Nested SetПолучение дереваПолучение нодыДобавление, удаление, изменение нодыПеренос ноды
Проблемы
Синтаксический анализ запросаСложность построения оптимизированных
запросовОграничение SQLСвязанные таблицыВстроенные процедуры и функции БД
Решения проблем
ПрофайлингОптимизацияКэшированиеСложные запросыViewТранзакции
Литература
М.Фаулер “Архитектура корпоративных программных приложений”
http://www.martinfowler.com/http://wikipedia.org/http://www.doctrine-project.org/http://phpclub.ru/