{"action":"created","issue":{"url":"https://api.github.com/repos/Rutorika/laravel-rules/issues/3","labels_url":"https://api.github.com/repos/Rutorika/laravel-rules/issues/3/labels{/name}","comments_url":"https://api.github.com/repos/Rutorika/laravel-rules/issues/3/comments","events_url":"https://api.github.com/repos/Rutorika/laravel-rules/issues/3/events","html_url":"https://github.com/Rutorika/laravel-rules/issues/3","id":109706746,"number":3,"title":"Структура БД и её описание","user":{"login":"boxfrommars","id":81930,"avatar_url":"https://avatars.githubusercontent.com/u/81930?v=3","gravatar_id":"","url":"https://api.github.com/users/boxfrommars","html_url":"https://github.com/boxfrommars","followers_url":"https://api.github.com/users/boxfrommars/followers","following_url":"https://api.github.com/users/boxfrommars/following{/other_user}","gists_url":"https://api.github.com/users/boxfrommars/gists{/gist_id}","starred_url":"https://api.github.com/users/boxfrommars/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/boxfrommars/subscriptions","organizations_url":"https://api.github.com/users/boxfrommars/orgs","repos_url":"https://api.github.com/users/boxfrommars/repos","events_url":"https://api.github.com/users/boxfrommars/events{/privacy}","received_events_url":"https://api.github.com/users/boxfrommars/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/Rutorika/laravel-rules/labels/question","name":"question","color":"cc317c"}],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":2,"created_at":"2015-10-04T21:46:50Z","updated_at":"2015-11-19T13:11:46Z","closed_at":null,"body":"в laravel достаточно магии, зависящий от именования полей в бд, поэтому нужно где только возможно следовать именованиям, которые позволяют это магии работать.\r\n\r\nтакже в laravel присутствуют генераторы, которые генерируют файлы миграции, так что, даже если вы создаёте файлы вручную, необходимо описывать миграции так, как они были бы описаны в сгенерированном файле миграции.\r\n\r\nструктура базы данных должна быть описана в виде диаграммы таблиц и должен быть предоставлен как исходный файл диаграммы, доступный для редактирования, так и экспорт этого файла в png или jpg. \r\n\r\nвопросы для обсуждения:\r\n- описать требования к структуре бд (именование таблиц/полей)\r\n- привести классические схемы бд для отдельных сущностей\r\n- в чём рисовать диаграммы (сейчас мы используем [Dia](http://dia-installer.de/) -- кроссплатформенный редактор)\r\n- стандартный вид диаграммы (обозначения цветом, выделением)\r\n"},"comment":{"url":"https://api.github.com/repos/Rutorika/laravel-rules/issues/comments/158053309","html_url":"https://github.com/Rutorika/laravel-rules/issues/3#issuecomment-158053309","issue_url":"https://api.github.com/repos/Rutorika/laravel-rules/issues/3","id":158053309,"user":{"login":"boxfrommars","id":81930,"avatar_url":"https://avatars.githubusercontent.com/u/81930?v=3","gravatar_id":"","url":"https://api.github.com/users/boxfrommars","html_url":"https://github.com/boxfrommars","followers_url":"https://api.github.com/users/boxfrommars/followers","following_url":"https://api.github.com/users/boxfrommars/following{/other_user}","gists_url":"https://api.github.com/users/boxfrommars/gists{/gist_id}","starred_url":"https://api.github.com/users/boxfrommars/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/boxfrommars/subscriptions","organizations_url":"https://api.github.com/users/boxfrommars/orgs","repos_url":"https://api.github.com/users/boxfrommars/repos","events_url":"https://api.github.com/users/boxfrommars/events{/privacy}","received_events_url":"https://api.github.com/users/boxfrommars/received_events","type":"User","site_admin":false},"created_at":"2015-11-19T13:11:46Z","updated_at":"2015-11-19T13:11:46Z","body":"Я заметил, что у нас сейчас разный подход к миграциям:\r\n\r\n### В миграциях -- схема, в сидерах -- данные\r\n\r\nПример: awi [Миграции](https://bitbucket.org/rutorika/awi/src/8de4dc91ddf02cd936c67c9b5e4083b966a259e1/app/database/migrations/?at=master), [Сидеры](https://bitbucket.org/rutorika/awi/src/8de4dc91ddf02cd936c67c9b5e4083b966a259e1/app/database/seeds/?at=master)\r\n\r\nВ миграциях только схема базы данных. в сидерах -- данные, которые в свою очередь делятся на две точки входа: необходимые для работы приложения (`DefaultSeeder`) и тестовые данные (`TestSeeder`). Таким образом при разработке мы делаем\r\n```\r\n$ php artisan migrate\r\n$ php artisan db:seed # запускает DefaultSeeder\r\n$ php artisan db:seed --class=\"TestSeeder\" # запускает TestSeeder в котором прописаны остальные сидеры\r\n```\r\n\r\nна продакшене при разворачивании \r\n```\r\n$ php artisan migrate\r\n$ php artisan db:seed # запускает DefaultSeeder\r\n```\r\n\r\n### В миграциях -- схема и необходимые для работы приложения данные, в сидах -- тестовые данные или сиды вовсе отстутствуют\r\n\r\nПример: scrooge [Миграции](https://bitbucket.org/rutorika/scrooge/src/808e5db731a3254f3292c20683f9419e1577763a/php/database/migrations/?at=master)\r\n\r\nв этом случае при разработке:\r\n```\r\n$ php artisan migrate # тут уже есть необходимые данные\r\n$ php artisan db:seed # запускает DefaultSeeder, в нём тестовые данные\r\n```\r\n\r\nв продакшене\r\n```\r\n$ php artisan migrate\r\n```\r\n\r\n\r\n**Плюсы первого подхода**: разделение схемы и данных\r\n\r\n**Минусы первого подхода**: нет простого способа обновить необходимые данные, потому что нельзя снова выполнить `php artisan db:seed`, в котором мы удалим предыдущие данные и добавим отредактированные новые, т.к. это приведёт к некосистентности ключей. с другой стороны, даже если мы не отредактируем файл сидов, а добавим новый, в котором без удаления изменим текущие данные, нет простого способа \"распространить эти изменеия\", т.к. в сидерах нет механизма \"запустить только новые сидеры\" (какой например есть в миграциях) и придётся вручную на всех установках запускать отдельный конкретный сидер.\r\n\r\n**Плюсы второго подхода**: легко изменять необходимые данные, просто дописав миграцию. Для тестовых данных остаются сидеры, которые всегда можно перезапускать полностью с очисткой базы и созданием новых записей.\r\n\r\n**Минусы второго подхода**: нет разделения схемы и данных\r\n\r\n\r\nМне на первый взгляд больше нравится второй подход, когда необходимые данные кладутся в миграции. Но нужно обсудить, может я что-то упускаю из вида"}}