SlideShare a Scribd company logo
1 of 19
Download to read offline
Поддержка идентичности
структуры БД при командной
        разработке
             Михаил Кечинов
   Студия веб-разработок Михаила Кечинова
Один разработчик, две базы

                             ALTER …




                 dev                        product



• Каждый запрос заносится в dev- и в production-базу.
• Для небольших проектов и одного человека.
Один разработчик, три базы

           ALTER …




                                BACKUP
 dev_1      product                               dev_2



• SQL-запрос на DEV1 и PRODUCTION
• Бэкап PRODUCTION и восстановление его на DEV2
Один разработчик, три базы

                                        ALTER …




                    BACKUP
 dev_1                                   product   dev_2



• SQL-запрос на DEV2 и PRODUCTION
• Бэкап PRODUCTION и восстановление его на DEV1
Два разработчика, много баз

<?php
                                       • Скрипт с SQL-патчами.
define (“DB_REVISION”, 34);
                                       • В БД хранится номер
$scripts = array();
                                         последнего патча.
$scripts[1] = array(
   “CREATE TABLE `user` …”,            • Выполняем новые патчи.
   “CREATE TABLE `post` …”
);
                                       • Меняем версию БД.
…

$scripts[34] = array(
   “ALTER TABLE `user` ADD COLUMN …”
);
Два разработчика, много баз


UPDATE.PHP        SVN         UPDATE.PHP




  DEV                           DEV
                 PROD
  SERV                          SERV
                 SERV
    1                             2




 dev_1           product       dev_2
Два разработчика, много баз

• SVN-конфликты при одновременном создании
  одинаковых ревизий.
Два разработчика, много баз II

1.SQL                              • Отдельные
CREATE TABLE `user` …;               пронумерованные SQL-
CREATE TABLE `post` …;
                                     файлы.

…                                  • В БД хранится номер
                                     последнего патча.
34.SQL
ALTER TABLE `user` ADD COLUMN …;   • Выполняем новые патчи.

                                   • Меняем версию БД.
Два разработчика, много баз II


1.SQL          SVN         2.SQL



DEV                         DEV
              PROD
SERV                        SERV
              SERV
  1                           2




dev_1         product       dev_2
Два разработчика, много баз II

• SVN-конфликты в дереве при одновременном
  создании одинаковых файлов разруливаются
  переименованием файлов.
• Конфликты порядка изменений имеют место.
Два разработчика, много баз III

20110511231531121.SQL              • Отдельные
CREATE TABLE `user` …;               пронумерованные SQL-
CREATE TABLE `post` …;
                                     файлы по TIMESTAMP.

…                                  • В БД хранятся номера
                                     обработанных файлов.
20110514230417965.SQL
ALTER TABLE `user` ADD COLUMN …;   • Выполняем
                                     необработанные файлы.

                                   • Помещаем в БД номера
                                     обработанных файлов.
Два разработчика, много баз III

• Конфликты порядка изменений имеют место.
Нерешенная проблема




Как избавиться от конфликта
    порядка изменений?

   Кроме регулярного обновления
Резюме

<?php

$filename = date(“YmdHisu”);
$content = “-- ” . date(“d.m.Y H:i”) . PHP_EOL;
$content .= “-- @author ” . PHP_EOL;
$content .= “-- @comment ” . PHP_EOL;
$content .= PHP_EOL;
file_put_contents($filename . “.sql”, $content);
echo “Revision file ” . $filename . “.sql created” . PHP_EOL;
Решение под PHP


           Ruckusing

http://code.google.com/p/ruckusing/
Ruckusing howto

> php generate.php create_user_table

db/migrate/20110602193549_CreateUserTable.php
db/migrate/20110602193549_CreateUserTable.php

<?php
class CreateUserTable extends Ruckusing_BaseMigration {
    public function up() {
        $t = $this->create_table("users");
        $t->column("first_name", "string");
        $t->column("last_name", "string");
        $t->column("email", "string", array('limit' => 128));
        $t->finish();
        $this->add_index("users", "email", array('unique' => true));
    }
    public function down() {
        $this->drop_table("users");
    }
}
?>
Process

> php main.php db:migrate
Контактные данные



 Михаил Кечинов
sam@mkechinov.ru
   mkechinov.ru
  +7 950 0099233

More Related Content

What's hot

Drupal организация разработки
Drupal   организация разработкиDrupal   организация разработки
Drupal организация разработкиAnna Fedoruk
 
Scaling services with apache mesos (and docker)
Scaling services with apache mesos (and docker)Scaling services with apache mesos (and docker)
Scaling services with apache mesos (and docker)Ivan Kudryavtsev
 
Базовые принципы работы с SVN.
Базовые принципы работы с SVN.Базовые принципы работы с SVN.
Базовые принципы работы с SVN.DressTester
 
Использование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестированияИспользование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестированияSQALab
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктуройdddpaul
 
Web deployment
Web deploymentWeb deployment
Web deploymentGetDev.NET
 
Стажировка-2013, разработчики, занятие 6. Внешние конфиги, сборка, автотесты
Стажировка-2013, разработчики, занятие 6. Внешние конфиги, сборка, автотестыСтажировка-2013, разработчики, занятие 6. Внешние конфиги, сборка, автотесты
Стажировка-2013, разработчики, занятие 6. Внешние конфиги, сборка, автотесты7bits
 

What's hot (8)

Drupal организация разработки
Drupal   организация разработкиDrupal   организация разработки
Drupal организация разработки
 
Scaling services with apache mesos (and docker)
Scaling services with apache mesos (and docker)Scaling services with apache mesos (and docker)
Scaling services with apache mesos (and docker)
 
Базовые принципы работы с SVN.
Базовые принципы работы с SVN.Базовые принципы работы с SVN.
Базовые принципы работы с SVN.
 
Использование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестированияИспользование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестирования
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктурой
 
Docker 1.9
Docker 1.9Docker 1.9
Docker 1.9
 
Web deployment
Web deploymentWeb deployment
Web deployment
 
Стажировка-2013, разработчики, занятие 6. Внешние конфиги, сборка, автотесты
Стажировка-2013, разработчики, занятие 6. Внешние конфиги, сборка, автотестыСтажировка-2013, разработчики, занятие 6. Внешние конфиги, сборка, автотесты
Стажировка-2013, разработчики, занятие 6. Внешние конфиги, сборка, автотесты
 

Viewers also liked

Joys - Executive summary
Joys - Executive summaryJoys - Executive summary
Joys - Executive summaryREES46
 
REES46 Product Presentation
REES46 Product PresentationREES46 Product Presentation
REES46 Product PresentationREES46
 
12 dec 2011 jlhs sec 2
12 dec 2011 jlhs sec 212 dec 2011 jlhs sec 2
12 dec 2011 jlhs sec 2outdoorjohn
 
ODI Osaka, 関西オープンデータEXPO'15, Kansai Open Data EXPO'15
ODI Osaka,  関西オープンデータEXPO'15, Kansai Open Data EXPO'15ODI Osaka,  関西オープンデータEXPO'15, Kansai Open Data EXPO'15
ODI Osaka, 関西オープンデータEXPO'15, Kansai Open Data EXPO'15machi takahashi
 
Odi osaka オープンデータ自治体推進会議発表資料
Odi osaka オープンデータ自治体推進会議発表資料Odi osaka オープンデータ自治体推進会議発表資料
Odi osaka オープンデータ自治体推進会議発表資料machi takahashi
 
VALUES FOR BETTER LIFE
VALUES FOR BETTER LIFEVALUES FOR BETTER LIFE
VALUES FOR BETTER LIFESrinivas Rrs
 
Отчёт HackDay meets garage48
Отчёт HackDay meets garage48Отчёт HackDay meets garage48
Отчёт HackDay meets garage48REES46
 
Tran yennhi resume
Tran yennhi resumeTran yennhi resume
Tran yennhi resumeNhi Tran
 
REES46 - увеличение оборота интернет-магазина на 30%
REES46 - увеличение оборота интернет-магазина на 30%REES46 - увеличение оборота интернет-магазина на 30%
REES46 - увеличение оборота интернет-магазина на 30%REES46
 
Автоматизация продвижения товаров в онлайн-магазинах
Автоматизация продвижения товаров в онлайн-магазинахАвтоматизация продвижения товаров в онлайн-магазинах
Автоматизация продвижения товаров в онлайн-магазинахREES46
 
LODオープンデータのつくりかたと項目名のつけかた
LODオープンデータのつくりかたと項目名のつけかたLODオープンデータのつくりかたと項目名のつけかた
LODオープンデータのつくりかたと項目名のつけかたmachi takahashi
 

Viewers also liked (17)

Joys - Executive summary
Joys - Executive summaryJoys - Executive summary
Joys - Executive summary
 
Pymes
PymesPymes
Pymes
 
Usg innotiv pd_engels
Usg innotiv pd_engelsUsg innotiv pd_engels
Usg innotiv pd_engels
 
Pymes
PymesPymes
Pymes
 
REES46 Product Presentation
REES46 Product PresentationREES46 Product Presentation
REES46 Product Presentation
 
Tata rrs
Tata rrsTata rrs
Tata rrs
 
12 dec 2011 jlhs sec 2
12 dec 2011 jlhs sec 212 dec 2011 jlhs sec 2
12 dec 2011 jlhs sec 2
 
Mth 2007 a
Mth 2007 aMth 2007 a
Mth 2007 a
 
ODI Osaka, 関西オープンデータEXPO'15, Kansai Open Data EXPO'15
ODI Osaka,  関西オープンデータEXPO'15, Kansai Open Data EXPO'15ODI Osaka,  関西オープンデータEXPO'15, Kansai Open Data EXPO'15
ODI Osaka, 関西オープンデータEXPO'15, Kansai Open Data EXPO'15
 
Odi osaka オープンデータ自治体推進会議発表資料
Odi osaka オープンデータ自治体推進会議発表資料Odi osaka オープンデータ自治体推進会議発表資料
Odi osaka オープンデータ自治体推進会議発表資料
 
VALUES FOR BETTER LIFE
VALUES FOR BETTER LIFEVALUES FOR BETTER LIFE
VALUES FOR BETTER LIFE
 
Отчёт HackDay meets garage48
Отчёт HackDay meets garage48Отчёт HackDay meets garage48
Отчёт HackDay meets garage48
 
Tran yennhi resume
Tran yennhi resumeTran yennhi resume
Tran yennhi resume
 
REES46 - увеличение оборота интернет-магазина на 30%
REES46 - увеличение оборота интернет-магазина на 30%REES46 - увеличение оборота интернет-магазина на 30%
REES46 - увеличение оборота интернет-магазина на 30%
 
Автоматизация продвижения товаров в онлайн-магазинах
Автоматизация продвижения товаров в онлайн-магазинахАвтоматизация продвижения товаров в онлайн-магазинах
Автоматизация продвижения товаров в онлайн-магазинах
 
Process modeling
Process modelingProcess modeling
Process modeling
 
LODオープンデータのつくりかたと項目名のつけかた
LODオープンデータのつくりかたと項目名のつけかたLODオープンデータのつくりかたと項目名のつけかた
LODオープンデータのつくりかたと項目名のつけかた
 

Similar to Поддержка идентичности структуры БД при командной разработке.

Edition Based Redefinition . Обновление приложений на “лету”
Edition Based Redefinition. Обновление приложений на “лету”Edition Based Redefinition. Обновление приложений на “лету”
Edition Based Redefinition . Обновление приложений на “лету”Andrey Akulov
 
Лекция Android. БД SQLite, ContentProvider, Loader
Лекция Android. БД SQLite, ContentProvider, LoaderЛекция Android. БД SQLite, ContentProvider, Loader
Лекция Android. БД SQLite, ContentProvider, LoaderАлександр Брич
 
Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Nikita Borzykh
 
What's new in Visual Studio 2012
What's new in Visual Studio 2012What's new in Visual Studio 2012
What's new in Visual Studio 2012InTRUEdeR
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)Pavel Tsukanov
 
Seminar: Эффективное использование среды разработки и компилятора C++
Seminar: Эффективное использование среды разработки и компилятора C++Seminar: Эффективное использование среды разработки и компилятора C++
Seminar: Эффективное использование среды разработки и компилятора C++Denis Vasilyev
 
Embarcadero All-Access
Embarcadero All-AccessEmbarcadero All-Access
Embarcadero All-AccessSerghei Urban
 
Сергей Татаринцев — Написание модулей технологий для bem-tools
Сергей Татаринцев — Написание модулей технологий для bem-toolsСергей Татаринцев — Написание модулей технологий для bem-tools
Сергей Татаринцев — Написание модулей технологий для bem-toolsYandex
 
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17MoscowJS
 
Mastering Declarative Database Schema - MageConf 2019
Mastering Declarative Database Schema - MageConf 2019Mastering Declarative Database Schema - MageConf 2019
Mastering Declarative Database Schema - MageConf 2019Max Pronko
 
Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)Vladimir Bakhov
 
Delphix Dynamic Data Platform, как попробовать и правильно оценить решение
Delphix Dynamic Data Platform, как попробовать и правильно оценить решениеDelphix Dynamic Data Platform, как попробовать и правильно оценить решение
Delphix Dynamic Data Platform, как попробовать и правильно оценить решениеSergii Stukan
 
Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»
Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»
Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»Tanya Denisyuk
 
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)Ontico
 
"Деплой кода процедур" Мурат Кабилов (Avito)
"Деплой кода процедур" Мурат Кабилов (Avito)"Деплой кода процедур" Мурат Кабилов (Avito)
"Деплой кода процедур" Мурат Кабилов (Avito)AvitoTech
 
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)Ontico
 
Репликация базы данных CUCM
Репликация базы данных CUCMРепликация базы данных CUCM
Репликация базы данных CUCMCisco Russia
 
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)Ontico
 

Similar to Поддержка идентичности структуры БД при командной разработке. (20)

Edition Based Redefinition . Обновление приложений на “лету”
Edition Based Redefinition. Обновление приложений на “лету”Edition Based Redefinition. Обновление приложений на “лету”
Edition Based Redefinition . Обновление приложений на “лету”
 
Лекция Android. БД SQLite, ContentProvider, Loader
Лекция Android. БД SQLite, ContentProvider, LoaderЛекция Android. БД SQLite, ContentProvider, Loader
Лекция Android. БД SQLite, ContentProvider, Loader
 
Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.
 
What's new in Visual Studio 2012
What's new in Visual Studio 2012What's new in Visual Studio 2012
What's new in Visual Studio 2012
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
 
Seminar: Эффективное использование среды разработки и компилятора C++
Seminar: Эффективное использование среды разработки и компилятора C++Seminar: Эффективное использование среды разработки и компилятора C++
Seminar: Эффективное использование среды разработки и компилятора C++
 
Embarcadero All-Access
Embarcadero All-AccessEmbarcadero All-Access
Embarcadero All-Access
 
Сергей Татаринцев — Написание модулей технологий для bem-tools
Сергей Татаринцев — Написание модулей технологий для bem-toolsСергей Татаринцев — Написание модулей технологий для bem-tools
Сергей Татаринцев — Написание модулей технологий для bem-tools
 
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
 
Mastering Declarative Database Schema - MageConf 2019
Mastering Declarative Database Schema - MageConf 2019Mastering Declarative Database Schema - MageConf 2019
Mastering Declarative Database Schema - MageConf 2019
 
Введение в Oracle
Введение в OracleВведение в Oracle
Введение в Oracle
 
Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)
 
Delphix Dynamic Data Platform, как попробовать и правильно оценить решение
Delphix Dynamic Data Platform, как попробовать и правильно оценить решениеDelphix Dynamic Data Platform, как попробовать и правильно оценить решение
Delphix Dynamic Data Platform, как попробовать и правильно оценить решение
 
Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»
Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»
Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»
 
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
 
MS Swit 2012 - SQL Server 2012
MS Swit 2012 - SQL Server 2012MS Swit 2012 - SQL Server 2012
MS Swit 2012 - SQL Server 2012
 
"Деплой кода процедур" Мурат Кабилов (Avito)
"Деплой кода процедур" Мурат Кабилов (Avito)"Деплой кода процедур" Мурат Кабилов (Avito)
"Деплой кода процедур" Мурат Кабилов (Avito)
 
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
 
Репликация базы данных CUCM
Репликация базы данных CUCMРепликация базы данных CUCM
Репликация базы данных CUCM
 
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
 

Поддержка идентичности структуры БД при командной разработке.

  • 1. Поддержка идентичности структуры БД при командной разработке Михаил Кечинов Студия веб-разработок Михаила Кечинова
  • 2. Один разработчик, две базы ALTER … dev product • Каждый запрос заносится в dev- и в production-базу. • Для небольших проектов и одного человека.
  • 3. Один разработчик, три базы ALTER … BACKUP dev_1 product dev_2 • SQL-запрос на DEV1 и PRODUCTION • Бэкап PRODUCTION и восстановление его на DEV2
  • 4. Один разработчик, три базы ALTER … BACKUP dev_1 product dev_2 • SQL-запрос на DEV2 и PRODUCTION • Бэкап PRODUCTION и восстановление его на DEV1
  • 5. Два разработчика, много баз <?php • Скрипт с SQL-патчами. define (“DB_REVISION”, 34); • В БД хранится номер $scripts = array(); последнего патча. $scripts[1] = array( “CREATE TABLE `user` …”, • Выполняем новые патчи. “CREATE TABLE `post` …” ); • Меняем версию БД. … $scripts[34] = array( “ALTER TABLE `user` ADD COLUMN …” );
  • 6. Два разработчика, много баз UPDATE.PHP SVN UPDATE.PHP DEV DEV PROD SERV SERV SERV 1 2 dev_1 product dev_2
  • 7. Два разработчика, много баз • SVN-конфликты при одновременном создании одинаковых ревизий.
  • 8. Два разработчика, много баз II 1.SQL • Отдельные CREATE TABLE `user` …; пронумерованные SQL- CREATE TABLE `post` …; файлы. … • В БД хранится номер последнего патча. 34.SQL ALTER TABLE `user` ADD COLUMN …; • Выполняем новые патчи. • Меняем версию БД.
  • 9. Два разработчика, много баз II 1.SQL SVN 2.SQL DEV DEV PROD SERV SERV SERV 1 2 dev_1 product dev_2
  • 10. Два разработчика, много баз II • SVN-конфликты в дереве при одновременном создании одинаковых файлов разруливаются переименованием файлов. • Конфликты порядка изменений имеют место.
  • 11. Два разработчика, много баз III 20110511231531121.SQL • Отдельные CREATE TABLE `user` …; пронумерованные SQL- CREATE TABLE `post` …; файлы по TIMESTAMP. … • В БД хранятся номера обработанных файлов. 20110514230417965.SQL ALTER TABLE `user` ADD COLUMN …; • Выполняем необработанные файлы. • Помещаем в БД номера обработанных файлов.
  • 12. Два разработчика, много баз III • Конфликты порядка изменений имеют место.
  • 13. Нерешенная проблема Как избавиться от конфликта порядка изменений? Кроме регулярного обновления
  • 14. Резюме <?php $filename = date(“YmdHisu”); $content = “-- ” . date(“d.m.Y H:i”) . PHP_EOL; $content .= “-- @author ” . PHP_EOL; $content .= “-- @comment ” . PHP_EOL; $content .= PHP_EOL; file_put_contents($filename . “.sql”, $content); echo “Revision file ” . $filename . “.sql created” . PHP_EOL;
  • 15. Решение под PHP Ruckusing http://code.google.com/p/ruckusing/
  • 16. Ruckusing howto > php generate.php create_user_table db/migrate/20110602193549_CreateUserTable.php
  • 17. db/migrate/20110602193549_CreateUserTable.php <?php class CreateUserTable extends Ruckusing_BaseMigration { public function up() { $t = $this->create_table("users"); $t->column("first_name", "string"); $t->column("last_name", "string"); $t->column("email", "string", array('limit' => 128)); $t->finish(); $this->add_index("users", "email", array('unique' => true)); } public function down() { $this->drop_table("users"); } } ?>
  • 19. Контактные данные Михаил Кечинов sam@mkechinov.ru mkechinov.ru +7 950 0099233