Редактор mysql


My Blog about Linux, Java, etc

Каким бы ни был разработчик баз данных: начинающий (в особенности) или бородатый профессионал, ему всегда проще и нагляднее представлять то над чем он трудится, что разрабатывает. Лично я отношу себя к первой категории и для понимания материала мне бы хотелось видеть визуально то, что я проектирую/разрабатываю.

На сегодняшний день существуют различные программы и инструменты, которые справляются с подобной задачей: какие-то лучше, какие-то хуже. Но сегодня я хотел бы немного рассказать о MySQL WorkBench - инструменте для визуального проектирования баз данных, интегрирующего проектирование, моделирование, создание и эксплуатацию БД в единое бесшовное окружение для системы баз данных MySQL, который является преемником DBDesigner 4 из FabForce.(c) Wikipedia. MySQL WorkBench распространяется в двух вариантах : OSS - Comunity Edition (распространяется под лицензией LGPL) и SE - Standard Edition - версия, за которую разработчики просят денежку. Но я думаю, что многим достаточно будет и OSS версии (в особенности новичкам и тем, кто не хочет или считает нецелесообразным платить за ПО, а также приверженцам программ с открытым исходным кодом), Тем более, что OSS версия обладает богатым функционалом.Итак, как видно из названия, данный инструмент предназначен для работы с MySQL базами данных,и поддерживает большое количество различных типов моделей MySQL (см. скриншот ниже) и станет незаменимым инструментом для лучшего понимания и изучения реляционных БД (в частности MySQL) для новичков :
Различные типы моделей MySQL
Таким образом, любой разработчик MySQL найдет то, что ему необходимо. Кроме того MySQL WorkBench позволяет подключать существующую базу данных, выполнять SQL запросы и SQL скрипты, редактировать и управлять объектами БД.Но для тех кто только начинает осваивать реляционные базы данных,наиболее интересным, на мой взгляд является возможность создания EER модели базы данных. Другими словами - это визуальное представление всех связей между таблицами Вашей БД, которое, при необходимости, легко можно представить в виде SQL скрипта,отредактировать или создать новое представление. Но об этом немного позже. Для начала посмотрим как выглядит главное око MySQL WorkBench (5.2.33 rev 7508):
Главное окно MySQL WorkBench
Для того что бы создать EER-модель Вашей БД выбираем "Create New EER Model" . В результате у нас появится вкладка, в которой мы можем добавлять/создавать диаграммы, таблицы, виды, процедуры; задавать различные права доступа для пользователей; создавать модель при помощи SQL скриптов. Выглядит данная вкладка таким образом:
Работа с EER моделями
Процесс создания таблиц и БД рассматривать не будем, т.к. тут все просто. Приведу лишь окончательный вариант готовой модели (см. на скриншотах ниже). Причем, если навести курсор на линию связи (пунктирная линия) таблиц, то "связь", первичный ключ, а также внешний ключ выделятся другим цветом. Если навести курсор на какую-либо таблицу, то выделится сама таблица, а также все связи, принадлежащие выбранной таблице.
Связь между первичным и внешними ключами
Все связи выбранной таблицы
Для того, что бы отредактировать таблицу, достаточно нажать ПКМ по нужной нам таблице и выбрать "Edit Table...". В результате внизу окна появится дополнительная область редактирования таблицы, в которой можно изменить имя таблицы, столбцы, внешние ключи и много чего другого. Для того, что бы экспортировать таблицу в SQL-скрипт достаточно нажать ПКМ по нужной нам таблице и выбрать "Copy SQL to Clipboard", а затем из буфера обмена вставить в нужное место/программу/файл.А теперь непосредственно об установке MySQL WorkBench. Естественно, что для начала нужно скачать MySQL WorkBench. Для этого переходим на страницу загрузки MySQL WorkBench, внизу страницы в выпадающем списке выбираем нужную нам операционную систему. В результате нам будет предложено несколько вариантов загрузки:

Итак, выбираем необходимый вариант загрузки и нажимаем DownLoad. Затем нас любезно попросят представиться: для зарегистрированных пользователей - ввести логин и пароль, для новичков - зарегистрироваться. Если Вы не хотите представляться, то выбираем чуть ниже вариант "» No thanks, just take me to the downloads!" и выбираем ближайшее зеркало для скачивания. Кроме того, перед установкой позаботьтесь о том, что бы у вас был установлен MySQL Client,.а иначе MySQL WorkBench откажется устанавливаться.

О чем нужно помнить и знать пользователям Linux:

Естественно, как и для случая с ОС Windows не забываем про MySQL Client. Для пользователей Ubuntu - необходимо качать версию программы, в соответствии с версией Вашей Ubuntu.Во время установки внимательно смотрим на сообщения об ошибке, если таковые появились, в которых наверняка будет сказано о том, каких пакетов не хватает в Вашей ОС. Об этом читаем ниже.

Как дела обстоят с rmp-base дистрибутивами, я к сожалению не знаю, т.к. ни разу таковыми дистрибутивами не пользовался, но думаю, что примерно также, как и с debian-based.

Возможно Вы заметили, что отсутствует сборка MySQL WorkBench для ОС Debian GNU/Linux . Но, как показала практика - ничего страшного. Для установки MySQL WorkBench в Debian 6.0 (Squeeze) мы воспользуемся deb - пакетом для Ubuntu 10.04 ( не забываем про разрядность Вашей ОС: x86 или x64). Напомню, для того, что бы установить скачанный deb пакет можно воспользоваться утилитой gdebi либо ввести в консоли от имени рута команду :

# dpkg -i mysql-workbench-gpl-5.2.33b-1ubu1004-amd64.debНапример, у меня во время установки MySQL WorkBench возникла следующая ошибка: dpkg: зависимости пакетов не позволяют настроить пакет mysql-workbench-gpl: mysql-workbench-gpl зависит от libcairomm-1.0-1 (>= 1.6.4), однако: Пакет libcairomm-1.0-1 не установлен. mysql-workbench-gpl зависит от libctemplate0, однако: Пакет libctemplate0 не установлен. mysql-workbench-gpl зависит от libgtkmm-2.4-1c2a (>= 1:2.20.0), однако: Пакет libgtkmm-2.4-1c2a не установлен. mysql-workbench-gpl зависит от libpangomm-1.4-1 (>= 2.26.0), однако: Пакет libpangomm-1.4-1 не установлен. mysql-workbench-gpl зависит от libzip1 (>= 0.9), однако: Пакет libzip1 не установлен. mysql-workbench-gpl зависит от python-paramiko, однако: Пакет python-paramiko не установлен. mysql-workbench-gpl зависит от python-pysqlite2, однако: Пакет python-pysqlite2 не установлен. dpkg: не удалось обработать параметр mysql-workbench-gpl (--install): проблемы зависимостей -- оставляем не настроенным При обработке следующих пакетов произошли ошибки: mysql-workbench-gpl

Для устранения данной ошибки мне достаточно было набрать в консоли команду для установки некоторых пакетов:

# aptitude install libzip1 libcairomm-1.0-dev libctemplate0 libgtkmm-2.4-1c2a

Для установки, приведенных выше пакетов, потребуются еще дополнительные пакеты, которые менеджер apt любезно предложит скачать. После установки всех необходимых пакетов MySQL WorkBench устанавливается без проблем.

Все: MySQL WorkBench благополучно установлен и готов для изучения работы.

upd:Если не ошибаюсь, то начиная с Ubuntu 12.04 MySQL WorkBench можно найти в репозиториях дистрибутива. Следовательно, процесс установки проходит гораздо проще и без всяких костылей.Для установки MySQL WorkBench достаточно в терминале ввести команду:

sudo aptitude install mysql-workbench

www.devbug.info

Редактирование таблицы MySQL: Javascript интерфейс

В предыдущей статье мы рассмотрели предельно простой способ доступа к базе данных MySQL (редактирование таблицы без перезагрузки HTML страницы). Отправка данных на сервер производилась через статический элемент iframe, помещаемый программой рядом с тем местом, куда пользователь щёлкнул мышкой (рядом с редактируемой ячейкой).

Статический iframe был выбран нами в качестве транспорта для того, чтобы пользователь мог видеть реакцию сервера напрямую (удалось ли изменить данные MySQL, или HTTP-сервер вернул ошибку, и какую именно). Программа получилась действительно простой и прозрачной для пользователя. Но простота повлекла за собой и неизбежные недостатки (или просто неосуществлённые возможности):

  1. История (журнал пользователя в браузере) засоряется «служебными» (невидимыми) обращениями к серверу.
  2. При перезагрузке страницы браузер задаёт вопрос о повторной отправке данных POST-формы.
  3. Более естественным редактирование выглядело бы, если бы поле textarea возникало прямо на месте выбранной пользователем ячейки (а не рядом).
  4. На освободившемся месте (рядом с ячейкой) можно отображать историю изменений текста данной ячейки.

Нетрудно видеть, что последние три пункта к способу транспорта прямого отношения не имеют, однако пресловутое засорение истории (о котором так много говорят любители Ajax'a) всё-таки заставляет делать iframe динамическим. Это значит, мы теряем «естественные» ответы сервера, и сообщать пользователю об успехе (или провале) операции придётся с помощью Javascript.

Рабочий пример получившейся системы можно протестировать на странице http://ir2.ru/static/tableedit2.htm. Функции Javascript, необходимые для работы, разместились в трёх файлах: http://ir2.ru/static/ir2.js (3.5K, общая библиотека), http://ir2.ru/static/tabsort.js (3.5K, сортировщик HTML-таблицы, необязательный элемент), http://ir2.ru/static/tableedit2.js (5.5K, редактор таблицы). На сервере данные, полученные от пользователя, обрабатывает небольшой (1.5K) скрипт http://ir2.ru/static/savecell2.php.

Принципиальная схема табличного редактора

Страница HTML с таблицей для редактирования:

  1. HTML таблица с данными MySQL рисуется по определённым правилам: а) class таблицы должен быть 'sortable'; б) в первой строке должны быть наименования полей MySQL; в) в первом столбце должны быть уникальные идентификаторы строк MySQL. Всё это без лишних тэгов, голая структура и содержание.
  2. В Javascript (при формировании страницы на сервере) передаётся список разрешённых для редактирования полей (переменная validfield). Это не обязательно, но в каких-то случаях (например, в нашем учебном примере) может пригодиться.
  3. На страницу добавляется два пустых (невидимых) контейнера: div – для динамически создаваемого iframe, div – для сохранения версий редактируемых ячеек.
  4. Добавляется форма (невидимая) с основным полем textarea для редактируемых текстов и вспомогательными полями-идентификаторами строк и полей таблицы MySQL.

Вся остальная работа делается Javascript:

  1. При щелчке (Ctrl+Alt+Click) по ячейке, которую разрешено редактировать, ячейка как бы превращается в поле textarea: поле в форме для редактирования делается видимым и совмещается по координатам top-left (и по размерам) с выбранной ячейкой.
  2. В поле textarea передаётся текст (innerHTML) редактируемой ячейки.
  3. Если в этом сеансе работы ячейку уже редактировали, ниже ячейки выводится история изменений.
  4. Для сохранения изменённого в ячейке (в форме) текста надо произвести то же действие, что и для начала редактирования: Ctrl+Alt+Click. Или Ctrl+Enter. По этому действию пользователя создаётся временный элемент iframe, и через него форма отправляет данные на сервер.
  5. Для отказа от редактирования нужно нажать Esc – тогда и текстовое поле, и история изменений исчезнут.
  6. Если страница, открываемая во временном iframe, недоступна, iframe делается видимым пользователю до тех пор, пока не выскочит сообщение об ошибке связи. Это в ИЕ, который не позволяет получать текст страницы с ошибкой "404". В нормальных браузерах Javascript нормально забирает текст страницы с ошибкой и передаёт в историю изменений ячейки.
  7. Если со страницей в iframe всё в порядке, она после обработки данных MySQL возвращает Javascript код, который сообщает главной странице о результатах операции по сохранению данных.
  8. В случае успеха (строка таблицы MySQL была изменена) форма редактирования и контейнер истории исчезают. В случае проблемы в историю изменений добавляется пункт с сообщением "Таблица MySQL не изменилась" и с текстом sql-запроса.
  9. Добавление новой записи: в HTML таблицу подрисовывается (вверху) строка без идентификатора; тексты ячеек в ней выглядят как наименование поля с добавлением "_новое". При попытке редактировать новую строку ей присваивается идентификатор (реальный id вставленной новой записи в таблицу MySQL), а в HTML таблицу подрисовывается ещё новая строка без идентификатора.
  10. Строки для добавления новой записи подрисовываются всем HTML таблицам с classname='sortable'. В данной версии всё равно можно корректно редактировать только одну таблицу – у которой заголовки и идентификаторы совпадают с соответствующими постоянными параметрами MySQL в скрипте обработки формы savecell2.php. Но в следующей версии Simple HTML Table Editor можно будет редактировать несколько разных таблиц (точнее, любую произвольно выбранную таблицу MySQL).

Некоторые особенности манипуляций с DOM

Самая сложная задача – выловить из временного элемента iframe ответ сервера. Она возникает как следствие из нашей генеральной установки считать Ajax лишней сущностью. Сложной является только часть задачи: при нормальных ответах сервера iframe получает нормально сгенерированную страницу, на которой запускается Javascript, передающий родительскому окну необходимую информацию – ничего сложного, всё стандартно!

А вот если, например, страница для iframe (savecell2.php) недоступна, сообщить об этом пользователю изнутри iframe не получится; надо будет из главного окна получить содержимое документа iframe. Тут тоже годится "штатная", отработанная нами в предыдущей версии Table Editor технология:

formframe=document.getElementById("formframe") framedoc=(formframe.contentWindow && formframe.contentWindow.document) || formframe.contentDocument || formframe.document

Проблема возникает даже не на уровне манипуляций с DOM, а на уровне идеологии: это хорошо известное уродство ИЕ – при получении ошибки сервера "404" выдавать свою собственную страницу ошибки (и вот к этой-то "своей" странице ИЕ не предоставляет программного доступа).

Из-за этого (весьма характерного для Микрософт) скотства как раз и возникает небольшая сложность, которую мы обходим с помощью таймера:

  1. при отправке формы на сервер включается таймер в одну секунду;
  2. если страница savecell2.php успевает вернуть данные (а она очень маленькая, и за секунду в норме успеет загрузиться раз двадцать), Javascript из фрейма выключает таймер и дальше всё работает как обычно;
  3. если таймер срабатывает, Javascript главного окна извлекает текст страницы из фрейма и выводит этот текст в истории изменений редактируемой ячейки;
  4. если таймер сработал, но при извлечении текста страницы фрейма Javascript получил фигу (null), значит, это пытающийся всеми управлять Микрософт;
  5. тогда мы сами пишем в историю ячейки "Ошибка связи"; iframe остаётся видимым, пока пользователь не закроет выскочившее сообщение (alert) с текстом ошибки (e.message), возникшей при попытке доступа к фрейму; с учётом этих поправок код обработки ошибок несколько усложнится:
formframe=document.getElementById("formframe") try { framedoc=(formframe.contentWindow && formframe.contentWindow.document) || formframe.contentDocument || formframe.document } catch(e) { alert(e.message) } err=(framedoc)?framedoc.body.innerHTML:"HTTP: нет такой страницы, или нет связи с сервером"

Философия

Хотя это наоборот – скорее, логика. Программа-редактор таблицы начинает работу по определённому действию пользователя – щелчку мышкой с удержанными клавишами Контрол и Альт. К чему должно быть привязано это событие? К какому объекту или элементу HTML?

Возможны два варианта:

1) привязать это событие к каждому элементу, который можно редактировать – с помощью функции, которая должна будет как-то обнаружить все такие элементы на странице;

2) привязать это событие просто ко всему документу (или открытому окну браузера) – тогда определять редактируемость элемента надо будет позже, в процессе обработки события.

Мы не рискнули (или поленились) заранее попытаться определить, куда пользователю можно щёлкать, а куда нет, и выбрали второй путь. То есть программа обработки щелчка запускается, куда бы пользователь ни щёлкнул. А значит, надо вовремя программу останавливать. Это делается на трёх разных этапах работы:

  1. В самом начале, при поиске элемента td, внутри которого был щелчок: obj=findParent(obj, "TD") if (!(obj && obj.parentNode)) return false (если среди «предков» щёлкнутого элемента нет td, или у найденного td нет parentNode, программа прекращает работу).
  2. При поиске наименования поля MySQL в первой строке таблицы (headers – список ячеек первой строки): try { fieldname=headers[idx].firstChild.nodeValue row=obj.parentNode.cells[0].firstChild.nodeValue } catch(e) { alert("Нет наименования поля в первой строке таблицы \nИЛИ нет ID в первой колонке") return false }
  3. При отсутствии наименования поля MySQL в списке разрешённых для редактирования (validfield – список разрешённых полей): if (!validfield.test(fieldname)) { alert("Поле '"+fieldname+"' не редактируется") return false }

Последний камень

При использовании Ajax (xmlHTTPRequest) для отлавливания ошибок (и вообще сообщений) сервера существуют специальные методы, призванные вроде бы облегчить работу. Они и облегчают – на ошибке "404" ("Страница не найдена"), которую мы выбрали для тестирования как самую простую. Но в реальной жизни практически невероятно встретить такую ошибку в работе фоновых HTTP-запросов: организуя отправку через Javascript таких запросов, мы ведь сами указываем страницу-обработчик, которую сами же и помещаем на сервер.

Гораздо более вероятно примитивнейшее "зависание" HTTP-сервера или "тормоз" канала связи (или ещё какие-нибудь проблемы интернет-провайдера) – что во всех случаях будет выглядеть просто как отсутствие какого-либо ответа. И тогда "штатный" Ajax теряет все свои преимущества перед нашей простенькой конструкцией с iframe: и там, и тут проблема решается одинаково – с помощью таймера. У нас она в случае любых ошибок (т.е. при отсутствии HTTP-ответа "200 OK" в течение секунды) решается с помощью таймера, т.е. более единообразно и просто, чем в Ajax.

Ну, и ничего страшного не случится, если таймер сообщит пользователю об ошибке связи, а после этого отработает серверный скрипт и пришлёт сообщение "OK" – работа будет сделана, и пользователь узнает об этом.

D.M., admin

ir2.ru

MySQL Workbench — Визуальный редактор MySQL баз

День добрый, дорогие читатели.

Сегодня я решил отступить от обычного своего перемалывания костей обществу, и написать о чем-то, относящемся непосредственно к моей компетенции :). Речь пойдёт о замечательном инструменте MySQL Workbench — инструменте разработки, проектирования и обслуживания баз данных MySQL. Это настоящая находка для программиста PHP, да и не только PHP, которому приходится зачастую, помимо выполнения прямых обязанностей ещё и выступать в роли архитектора баз данных. Этот продукт позволяет создавать новую БД, вносить изменения в уже существующие, устанавливать связи, выполнять запросы — в реальном времени и наглядном виде. Если кто-то пользовался DbDesigner от fabforce — то это почти то же самое, только намного, намного лучше. Достаточно сказать, что связи между таблицами — теперь показываются на EER диаграмме, какие именно поля используются, а заодно, по вашему желанию, создаёт индексы там, где требуется для нормальной и быстрой работы связей. Также есть возможность Reverse Engineer‘инга таблиц из уже рабочей базы. Разработчиком этого продукта является Sun Microsystems, а версия MySQL Workbench Community Edition — полностью бесплатна и доступна для скачивания по этой ссылке: http://www.mysql.com/products/workbench/ — уверяю, MySQL Workbench Community Edition хватит для большинства типовых задач веб-разработки. Тем более, что этот инструмент куда как более удобен в использовании (особенно в конфигурации с несколькими мониторами) нежели популярный phpMyAdmin, с веб интерфейсом (хотя он и незаменим для работы на удалённом хостинге).

Итак, главное окно MySQL Workbench при открытии выглядит примерно так (В версии 5.22):

Главное окно MySQL Workbench версии 5.22

Как видите, там у меня уже есть парочка БД, и сохранённое соединение в левом столбце. Соединение это необходимо, чтобы выполнять запросы на сервер БД в реальном времени, ну и синхронизировать модель с «боевой» базой.

Оболочка поддерживает множество типов таблиц БД, по умолчанию там установлена InnoDB, но мне больше нравится MyISAM, потому в пункте Edit -> Preferences я меняю тип по-умолчанию (иначе все экспортируемые запросы будут в InnoDb с кучей лишних параметров, типа CONSTRAINT и т. д.). Впрочем, никто не мешает вам работать с InnoDb, если вам требуется повышенная устойчивость транзакций, либо какие-то другие особенности этого движка.

Окно настроек типа модели в MySQL Workbench 5.22

Затем, стоит рассмотреть такую возможность как MySQL Reverse Engineer. Он позволяет открыть любую БД на сервере, и без труда восстановить структуру таблиц, которая в ней существует. Скажем, в рабочем проекте у меня количество таблиц в БД приближается уже к 70. Workbench спокойно их восстанавливает и представляет на диаграмме. Правда, поскольку они в MyISAM — связи приходится проставлять вручную :)

Кстати говоря, давайте сейчас попробуем провести «реверсивный инженеринг» для стандартной базы движка WordPress. У большинства стоит Денвер для отладки и тестирования приложений (что, в принципе, моветон, ИМХО, но для относительно несложных скриптов, например, не использующих возможности mysqldump и иных подобных утилит, вполне достаточно). Для входа на MySQL сервер там используется пользователь root без пароля. Я и сам его часто использую, задействуя собственную сборку из полноценного apache + php + mysql в случаях относительно сложных скриптов.

Итак, вначале требуется тыкнуть тычку «File -> New model», дабы создать проект, куда мы будем восстанавливать таблицы из базы:

Пустая модель в MySQL Workbench 5.22

Затем тыкаем «Database -> Reverse Engineer» и пред ваши очи предстанет окошко примерно такого вида:

MySQL Reverse Engineer в MySQL Workbench 5.22

Для денвера настройки по умолчанию подходят, потому кликаем Next, пока не попадём в такое вот окошко (некоторые таблицы я затёр, от греха подальше, у вас таких белых строчек с пустыми квадратиками не будет, само собой):

Reverse Engineer Database в MySQL Workbench 5.22

Здесь нам предлагается выбрать базу, которую мы будет выдирать, выбираем нужную, тыкаем дальше, и ждём, пока шайтан-машина сделает все операции. Затем, жмём дальше — ну, сами разберётесь, в результате работы данного мастера мы получим окошко, в котором, будто карты в слегка рассыпанной колоде, будут помещены таблицы. На скриншоте ниже я таки уже разбросал их по диаграмме, и даже проставил несколько связей, для демонстрации:

Визуальный редактор таблиц в MySQL Workbench 5.22

Как видите, ничего сложного здесь нет. Визуальный редактор SQL таблиц позволяет добавлять/редактировать/удалять поля, индексы, триггеры, и прочее, что только душе угодно. Основное преимущество данной MySQL Workbench — наглядность базы, потому как держать базы всех своих проектов в голове — можно сойти с ума. Я стараюсь даже названия полей в таблицах не запоминать, дабы не засорять память :) В этом я некоторым образом поддерживаю древних эпикурейцев, которые считали, что не следует создавать себе лишние проблемы, если можно их избежать. Иначе говоря, имея возможность избежать страданий, вызванных профессиональными заболеваниями программиста, типа склероза, и рассеянности — надо эту возможность использовать.

Ещё очень и очень приятная возможность — это выполнение запросов к БД прямо из оболочки. Здесь сия возможность намного, намного удобнее реализована, нежели выполнение оных в отдельном окошечке phpMyAdmin’а. Даже подсветка SQL синтаксиса есть. Выглядит это примерно так:

Редактор SQL запросов в MySQL Workbench 5.22

Примерно в таком же окошке идёт прямое редактирование данных, находящихся в нужной таблице. Для отладки каких-нибудь сложных SQL запросов это идеальная среда. Также она поддерживает плагины.

В целом, я описал здесь те возможности MySQL Workbench, которые использую сам чаще всего. Я уверен, что их намного и намного больше. Скажем, я здесь не затронул возможности визуального редактирования EER моделей, хотя они наверняка будут использоваться чаще всего. В целом, учитывая ориентированность материала на коллег, ну или хотя бы достаточно подкованных пользователей, я практически уверен, что они сами до всего докопаются. Логикус очень любит исследовать трудные вещи :)

Таким образом, можно сделать вывод, что MySQL Workbench — отличный инструмент, бесплатный и довольно удобный.

Похожие посты

www.shpargalko.com

быстрый старт, управление схемой данных

Веб-разработчик растёт вместе с проектами, которые он создаёт и развивает. С ростом проектов увеличивается сложность программной части, неизбежно возрастает количество обрабатываемых ею данных, а так же сложность схемы данных. Общение с другими вебщиками показывает, что огромной популярностью среди нас пользуются базы данных MySQL, а для управления ими - небезызвестный PHPMyAdmin. Переходя от маленьких проектов к большим, от cms к фреймворкам, многие, как и я, остаются верны MySQL. Однако для проектирования сложной базы данных с большим количеством таблиц и связей, возможностей PHPMyAdmin катастрофически не хватает. Поэтому я решил написать обзор MySQL Workbench - замечательной бесплатной десктопной программы для работы с MySQL.

В первой части обзора я расскажу о самых основах работы с программой, так что, можете использовать эту статью как руководство начинающего пользователя. Вторая часть будет посвящена использованию Workbench в бою при работе с удалённым сервером. В ней я дам базовые инструкции и рекомендации по настройке подключения сервера и синхронизации с ним.

MySQL Workbench — инструмент для визуального проектирования баз данных, интегрирующий проектирование, моделирование, создание и эксплуатацию БД в единое бесшовное окружение для системы баз данных MySQL.

Должен сказать, что программа действительно великолепная. Она позволяет быстро и с удовольствием накидывать схемы данных проекта, проектировать сущности и связи между ними, безболезненно внедрять изменения в схему и так же быстро и безболезненно синхронизировать её с удалённым сервером. А графический редактор EER-диаграмм, напоминающих забавных таракашек, позволяет увидеть общую картину модели данных и насладиться её лёгкостью и элегантностью :) После первой же пробы этот инструмент становится незаменимым помощником в боевом арсенале веб-программиста.

Скачать MySQL Workbench

Дистрибутив MySQL Workbench доступен на этой странице. Самая свежая версия программы на момент написания статьи - Version 6.1. Перед скачиванием требуется выбрать одну из следующих платформ:

После выбора платформы вам предлагают зарегистрироваться или авторизоваться в Oracle. Если не хотите, внизу есть ссылка "No thanks, just start my download" - жмите на неё ;)

Начало работы

Стартовый экран программы отражает основные направления её функциональности - проектирование моделей баз данных и их администрирование:

В верхней части экрана находится список подключений к MySQL серверам ваших проектов, а список последних открытых моделей данных - в нижней части экрана. Работа обычно начинается с создания схемы данных или загрузки существующей структуры в MySQL Workbench. Приступим к работе!

Создание и редактирование модели данных

Для добавления модели нажимаем плюсик рядом с заголовком "Models" или выбираем "File → New Model" (Ctrl + N):

На этом экране вводим имя базы данных, выбираем кодировку по умолчанию и, если нужно, заполняем поле комментария. Можно приступать к созданию таблиц.

Добавление и редактирование таблицы

Список баз данных проекта и список таблиц в пределах базы данных будет располагаться во вкладке "Physical Schemas". Чтобы создать таблицу, дважды кликаем на "+Add Table":

Откроется удобный интерфейс для редактирования списка полей и их свойств. Здесь мы можем задать название поля, тип данных, а так же установить для полей различные атрибуты: назначить поле первичным ключом (PK), пометить его Not Null (NN), бинарным (BIN), уникальным (UQ) и другие, установить для поля авто-инкремирование (AI) и значение по умолчанию (Default).

Управление индексами

Добавлять, удалять и редактировать индексы таблиц можно во вкладке "Indexes" интерфейса управления таблицей:

Вводим название индекса, выбираем его тип, затем галочками помечаем в нужном порядке список полей, участвующих в данном индексе. Порядок полей будет соответствовать порядку, в котором были проставлены галочки. В данном примере я добавил уникальный индекс к полю username.

Связи между таблицами

Установка внешних ключей и связывание таблиц возможно только для таблиц InnoDB (эта система хранения данных выбирается по умолчанию). Для управления связями в каждой таблице находится вкладка "Foreign Keys":

Для добавления связи открываем вкладку "Foreign Keys" дочерней таблицы, вводим имя внешнего ключа и выбираем таблицу-родителя. Далее в средней части вкладки в графе Column выбираем поле-ключ из дочерней таблицы, а в графе Referenced Column - соответствующее поле из родительской таблицы (тип полей должен совпадать). При создании внешних ключей в дочерней таблице автоматически создаются соответствующие индексы.

В разделе "Foreign Key Options" настраиваем поведение внешнего ключа при изменении соответствующего поля (ON UPDATE) и удалении (ON DELETE) родительской записи:

В приведённом примере я добавил к дочерней таблице UserProfile внешний ключ для связи с родительской таблицей User. При редактировании поля userId и удалении позиций из таблицы User аналогичные изменения будут автоматически происходить и со связанными записями из таблицы UserProfile.

Наполнение таблицы базовыми данными

При создании проекта в базу данных часто нужно добавлять стартовые данные. Это могут быть корневые категории, пользователи-администраторы и т.д. В управлении таблицами MySQL Workbench для этого существует вкладка "Inserts":

Как видно из примера, в случае, если перед записью в базу данных к данным нужно применить какую-то функцию MySQL, это делается с помощью синтаксиса \func functionName('data'), например, \func md5('password').

После ввода данных необходимо сохранить их в локальную базу данных нажатием на кнопку "Apply Changes".

Создание EER диаграммы (диаграммы "сущность-связь")

Для представления схемы данных, сущностей и их связей в графическом виде в MySQL Workbench существует редактор EER-диаграмм. Для создания диаграммы в верхней части экрана управления базой данных дважды кликаем на иконку "+Add Diagram":

В его интерфейсе можно создавать и редактировать таблицы, добавлять между ними связи различных типов. Чтобы добавить уже существующую в схеме таблицу на диаграмму, просто перетащите её из панели "Catalog Tree".

Для экспорта схемы данных в графический файл выберите "File → Export", а затем один из вариантов (PNG, SVG, PDF, PostScript File).

Импорт существующей схемы данных (из SQL дампа)

Если у нас уже есть схема данных, её можно без труда импортировать в MySQL Workbench для дальнейшей работы. Для импорта модели из SQL файла выбираем "File → Import → Reverse Engineer MySQL Create Script...", после чего выбираем нужный SQL файл и жмём "Execute >"

В MySQL Workbench так же предусмотрен импорт и синхронизация модели данных нарямую с удалённым сервером. Для этого потребуется создать подключение удалённого доступа к MySQL, о которых я расскажу в продолжении данного обзора.

Демо-проект из статьи доступен для скачивания по этой ссылке. Желаю успехов и красивых таракашек схем!

07.05.2014

mithrandir.ru


Смотрите также