Что лучший способ состоит в том, чтобы сохранить базу данных MySQL в управлении исходным кодом?

Я работаю над приложением с несколькими другими людьми, и мы хотели бы сохранить нашу базу данных MySQL в управлении исходным кодом. Мои мысли равняются двум, имеют два файла: можно было бы быть создать сценарием для таблиц, и т.д., и другой будут вставки для наших демонстрационных данных. Действительно ли это - хороший подход? Кроме того, что лучший способ состоит в том, чтобы экспортировать эту информацию?

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

8
задан Jon Seigel 2 April 2010 в 04:08
поделиться

5 ответов

Это звучит как хороший подход. Вы можете разрабатывать различные изменения, как с точки зрения структуры таблицы и данных. Хороший!

Лучший способ создания дампов, вероятно, ** MySQLLUM ** , так как его можно легко автоматизировать - один раз с - NO-Data , чтобы получить операторы создания, Оказавшись с - NO-Create-info --NO-Create-db , чтобы получить данные.

3
ответ дан 5 December 2019 в 14:03
поделиться

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

Рассмотрим суперкласс, который проверяет поля x и y , а подкласс - x , y и z .

Итак, подкласс = = суперкласс = подкласс, где z отличается между первым экземпляром подкласса и вторым, нарушая транзитивную часть контракта.

Поэтому типичная реализация равных будет проверять getClass ()! = obj.getClass () вместо того, чтобы делать экземпляр. В приведенном выше примере проверка экземпляра SubClass или Superclass приведет к нарушению симметрии.

Таким образом, результат состоит в том, что подкласс может, конечно, принимать во внимание super.equals (), но также должен выполнить собственную проверку getClass (), чтобы избежать вышеуказанных проблем, и затем проверить на равенство в своих собственных полях в дополнение. Это была бы странная утка класса, которая изменила свое собственное равное поведение на основе определенных полей суперкласса, а не просто, если суперкласс возвращается равным.

-121--989555-
  1. Да - стек обычно хранится в «низких» адресах памяти и заполняется вверх к своему верхнему пределу. Куча обычно хранится в «верхней части» адресного пространства и растет в направлении стека.

  2. В операционной системе хранится «контекст» для каждого выполняющегося процесса. Операция сохранения и восстановления состояния процесса называется «переключением контекста».

  3. Просто соглашение AFAIK. Стек на самом деле не «растет» он имеет фиксированное распределение.

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

Я бы предложил Computer Architecture: A Quantitative Approach в качестве хорошей ссылки на базовое оборудование и любую книгу по операционным системам для того, как оборудование «управляется»

. -121--1427030-

Это процесс, который я использую для управления версиями баз данных MySQL в Subversion.

Setup SVN

В SVN создайте папку Базы данных с подпапкой для каждой базы данных, которую требуется добавить в SVN.

Добавьте db_version таблицу в базы данных

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

create table db_version (
        `id` int auto_increment,
        `majorReleaseNumber` int,
        `minorReleaseNumber` int,
        `pointReleaseNumber` int,
        `scriptName` varchar(50),
        `dateApplied` datetime,
        PRIMARY KEY(`id`)
);

majorReleaseNumber - Основные версии являются существенными изменениями в базе данных.

minorReleaseNumber - незначительные версии представляют собой расширения базы данных, которые не требуют основной версии.

startReleaseNumber - Выпуск точки обычно является простым исправлением ошибок.

startName - имя сценария sql, внесшего изменения в схему.

dateApplied -Когда сценарий был запущен в этой базе данных.

Создание базовых сценариев

Я использовал mysqldump для создания сценария создания существующих баз данных. Обязательно включите параметр --no-data. SVN используется для трека сценариев, которые вносят изменения в схему базы данных, и не предназначен для использования в качестве средства резервного копирования данных конкретного экземпляра приложения.

$ mysqldump -h localhost -u root -p db_1 --no-data > db_1.1.0.0.sql

Имя сценария sql должно содержать имя базы данных и версию базы данных, к которой применяется сценарий.

db _ 1.1.0.0.sql

В конце сценария обязательно добавьте инструкцию insert для таблицы db_version.

Изменение схемы базы данных

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

3
ответ дан 5 December 2019 в 14:03
поделиться

То, что вы называете эмулированной консолью, не имеет ничего общего с эмуляцией или DOS. Вероятно, вы все еще создаете 32/64-разрядные исполняемые файлы Windows, используя только консольную подсистему.

Начните с замены компилятора на компилятор, способный генерировать 16-разрядный код. Я уверен, что OpenWatcom по-прежнему поддерживает 16-битную мишень MZ. IIRC DJGPP тоже, но я не уверен и не знаю, поддерживается ли он до сих пор.

Edit: about gotoxy , можно:

  1. Использовать PDCurses и не важно, что используется внутри (я думаю, что это INT10)
  2. Использовать прерывание 0x10 самостоятельно
  3. Записывать непосредственно в память VGA на 0xB8000

Я никогда на самом деле Третий, кажется, самый быстрый.

-121--3320688-

Я использовал сон, чтобы эмулировать короткое время, когда компьютер ожидал чего-то.

Как я сказал в своем вопросе, я не хотел использовать события, потому что это много ненужной работы, чтобы сделать что-то чрезвычайно просто.

Кроме того, «событие», которое должно произойти для продолжения программы, является событием USB. Так как я использую устройство класса HID, нет способа установить событие, чтобы произойти без цикла ожидания. Классы USB HID не разрешают прерывания настройки, об устройстве заявляет ОС.

Мне удалось заставить вышеперечисленное работать. Я прошелся по отладчику и заметил, что дисплей обновится перед функцией сна. Выполняя программу независимо, я получил случайные результаты с дисплеем, освежающим 1% времени. Я избавился от функции сна и добавил другой код, чтобы эмулировать задержку, и это было нормально.

Только для каждого, это возможно, это не запрещено, и это легко сделать со следующим:

qApp->processEvents();

qApp является глобальной внешней переменной в заголовке приложения QApplication.

Поскольку это событие USB усложняет мой поток, я наткнулся на класс QWaitCondition. Я собирался начать процесс ожидания события USB. Я бы подождал, пока процесс не освободит условие ожидания для продолжения моей процедуры.

Но если кто-то считает, что это плохая идея, пожалуйста, выскажитесь. Я действительно ценю ваш отзыв PiredPiper и Враждебная вилка.

Спасибо.

-121--2113785-

Я работаю в среде, использующей Microsoft source safe и Oracle/SQL Server.

Мы обнаружили, что хранение каждого пакета/процедуры, создание сценария таблицы и т.д. в отдельном текстовом файле было наилучшим способом для этого. Это означает, что при обслуживании пакетов разработчики могут просто проверить 1 пакет и т.д., которые они требуют. После внесения и проверки изменений их можно вернуть.

2
ответ дан 5 December 2019 в 14:03
поделиться

У тебя определенно есть правильная идея. Вот пара хороших статей на эту тему:

1
ответ дан 5 December 2019 в 14:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: