19
ПЛИСКО ВЯЧЕСЛАВ. [email protected] HTTP://AMDY.SU/ Удобная работа с базой данных в PHP.

Clever work with Databases with php

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Clever work with Databases with php

ПЛИСКО ВЯЧЕСЛАВ.PLISKOVS@GMAIL .COM

HTTP: / /AMDY.SU/

Удобная работа с базой данных в PHP.

Page 2: Clever work with Databases with php

Реляционная база данных

Двухмерная таблицаКолонки – название полейСтроки – уникальные записиКлючи для идентификации и связей между

таблицамиSQL – стандартный язык запросов,

возвращает так же двухмерную таблицу

Page 3: Clever work with Databases with php

Шаблоны проектирования

ORMActive RecordsData mapperQuery ObjectDomain model

Page 4: Clever work with Databases with php

Шаблоны проектирования ORM

ORM (Объектно-реляционная проекция) — запись объектов программы в реляционную базу данных, отображение объекта и его представления в виде набора таблиц.

Page 5: Clever work with Databases with php

Шаблоны проектирования: Active Record

Active Record (Активная запись) – Объект, выполняющий роль оболочки для строки таблицы или представления базы данных. Он инкапсулирует доступ к базе данных и добавляет логику домена.

Page 6: Clever work with Databases with php

Шаблоны проектирования: Query Object

Query Object (Объект запроса) – интерпретатор структуры объектов в SQL запросы.

Page 7: Clever work with Databases with php

Шаблоны проектирования: Domain Model

Domain Model (Модель предметной области) — это объекты в объектно-ориентированных компьютерных программах, выражающие сущности из модели предметной области, относящейся к программе, и реализующие бизнес-логику программы.

Page 8: Clever work with Databases with php

Реализации ORM

Hibernate в JAVAActive Record в Ruby on RailsDjango ORM в PythonDoctrine в PHP

Page 9: Clever work with Databases with php

Doctrine ORM: Структура

PDODoctrine DBALDQLDoctrine ORM

Page 10: Clever work with Databases with php

Компоненты

Manager Connection Table RecordCollectionValidatorProfilerLocking Manager Views

Page 11: Clever work with Databases with php

Описание модели

Типы данных: 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Опции таблицы: тип, кодировка, сравнение

Page 12: Clever work with Databases with php

Описание модели: примеры кода

метод 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' => таблица для связи * - *));

Page 13: Clever work with Databases with php

DQL

Выборка данных, связанные записиВставка-изменение данныхУдаление данныхДля чего нужны Accessors и MutatorsСлушатели и обработка событий

Page 14: Clever work with Databases with php

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();

Page 15: Clever work with Databases with php

Шаблоны

Для чего это нужно и как работаетGeographicalI18nNestedSetSearchableSluggableSoftdeleteTimestampVersionalble

Page 16: Clever work with Databases with php

Иерархические структуры

Adjacency list (Список смежностей)Nested SetПолучение дереваПолучение нодыДобавление, удаление, изменение нодыПеренос ноды

Page 17: Clever work with Databases with php

Проблемы

Синтаксический анализ запросаСложность построения оптимизированных

запросовОграничение SQLСвязанные таблицыВстроенные процедуры и функции БД

Page 18: Clever work with Databases with php

Решения проблем

ПрофайлингОптимизацияКэшированиеСложные запросыViewТранзакции

Page 19: Clever work with Databases with php

Литература

М.Фаулер “Архитектура корпоративных программных приложений”

http://www.martinfowler.com/http://wikipedia.org/http://www.doctrine-project.org/http://phpclub.ru/