Страницы

Поиск по вопросам

четверг, 12 декабря 2019 г.

Как правильно опубликовать проект, содержащий базу данных?

#база_данных #git #github #веб_программирование


Часто на собеседованиях или перед ними просят показать какой-нибудь свой код. Я хочу
написать для этих целей какой-нибудь небольшой проект и разместить его например на GitHub.

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

Скажите пожалуйста как можно залить бд на GitHub, чтобы любой человек при желании
мог целиком собрать рабочее приложение? Или  может есть другие способы? Спасибо!
    


Ответы

Ответ 1



вероятно, бо́льшая часть систем управления базами данных обладает возможностью сделать dump базы данных, содержащий всю необходимую информацию для последующего воссоздания базы. причём, как правило, такой dump сохраняется в текстовом виде, т.е. представляет собой неплохой объект для систем управления версиями, которые лучше всего «обращаются» именно с текстовой информацией. некоторые субд могут даже предоставлять специальные опции для улучшения такого рода хранения (в системах управления версиями). например, у программы mysqldump есть опция --skip-extended-insert, благодаря которой в dump-е генерируется отдельный оператор insert для каждой строки данных. без неё все строки таблицы заносятся одним, очень-очень длинным оператором insert, что, естественно, создаёт определённые трудности для, например, сравнения отличий между двумя dump-ами.

Ответ 2



В принципе, в репозитории Git можно сохранить что угодно, в том числе бинарные файлы базы данных. Но Git хранит целые файлы, а не дельты. И тем более он не сможет сохранять изменения в том виде, в котором его воспринимают СУБД. Т.е. Для СУБД: Найти поле X, записать в него значение Y изменение в несколько байт. старая версия удаляется Для Git: Полностью удалить файл и заменить его новым. изменение в много мегабайт все версии сохраняются. Таким образом, если вы будете сохранять в коммитах последовательно несколько состояний БД, то каждое будет целиком и навсегда сохранено в репозитории. Это очень быстро раздует его размеры. Что было бы лучше: написать SQL / DDL код, инициализирующий базу данных в том виде, в котором она нужна для работы приложения Написать инструкцию по установке или скрипт для автоматизации установки (плюс в глазах работодателя) Публиковать в репозитории этот код и документацию (ну и само приложение). Вариант 2: Опубликовать проект одним коммитом, без истории. Ссылки: Хранение схемы MySQL в репозитории Git (eng)

Ответ 3



Храните в репозитории только структуру и миграции, а дамп с данными (не думаю что у вас большая база) залейте в релизы на github или на bintray, и укажите ссылку на базу в описании README.MD

Ответ 4



Способ, который будет удобен даже в production, и который выставит вас в выгодном свете, будучи применённым в демо: Создаёте дамп структуры базы данных. Как уже было сказано, это текстовый файл. В структуре базы имеет смысл указать версию этой структуры (например, создать представление с одним селектом одной константы). Создаёте дамп тестового набора данных. Тоже текстовый файл, с INSERT'ами. (Опционально) Создаёте скрипт, обновляющий старую структуру базы до новой, на основании информации о версии структуры. Создаёте программу, каким-то образом имеющую параметры подключения к серверу и имя БД. При запуске программа подключается к серверу, проверяет версию сервера, смотрит есть ли БД. Если старая версия сервера - откланивается. Если нет базы - предлагает создать (с помощью скрипта; если выбрана галочка внесения в базу тестовых данных, то следом вносятся тестовые данные). Если старая версия структуры - предлагает обновить (с помощью скрипта). Далее программа работает как обычно. При веб-разработке, "программа" это скорее всего страница в "/admin".

Ответ 5



Ответ очень сильно зависит от платформы, которую вы используете. Если вы (случайно) пишете на C#/.NET, то на гитхаб можно просто так взять и залить базу данных - mdf/ldf файлы с подключением в приложение через AttachDbFileName в строке соединения. В заданных рамках - выложить куда-то пример своего кода, который можно будет забрать/показать/запустить без лишних телодвижений - это более чем подходящее решение. Если вы при этом еще и используете Entity Framework Code First - то ваше приложение и так уже умеет создавать базу данных, и ничего никуда заливать не нужно. На всякий случай стоит использовать имя сервера (localdb)\v11.0 в обоих вариантах - этот инстанс с большой вероятностью есть на машине с Visual Studio, и приложение можно будет запустить сразу после скачивания исходников.

Ответ 6



База данных может быть построена по стандарту JSON-LD. Физически это обычные директории ("наборы данных") и json-ки в них. Соответственно, отлично будет работать прямо в склонированном репо.

Ответ 7



Для начала Вам необходимо выгрузить текущее состояние базы данных в виде дампа сриптов описания сущьностей, и затем придумать каким образом это всё менеджить в Вашей системе контроля версий. Мне нравится подход описанный в блоге Scott Allen В кратце, создаётся baseline - папка начального состояния с дампами описаниями структуры таблиц. Среди Ваших таблиц создаётся таблица для журнала версий к примеру SchemaChanges. В этой таблице будут отображаться изменения произведённые уже на данной БД. После такой подготовки создаётся папка изменений БД в которую вносятся изменения существующей схемы. Каждое изменение схемы должно добавлять свою версию в журнал изменений. Для работы с другими сущьностями БД как view, trigger, хранимые процедуры и функции Скот предлагает сделать для них отдельную папку и накатывать их после каждого изменения структуры бд, тем самым проверяя не нарушилось ли состояние базы. Достаточно сложно, но тем не менее достаточно стабильно и не требует особо больших усилий, кроме как для написания утилиты для запуска скриптов. Более подробно и на русском можно почитать перевод. Сейчас достаточно много платных утилит призвано решить эту проблему к примеру утилиты red gate или apexsql. Ищите подход который больше подходит Вам.

Комментариев нет:

Отправить комментарий