У багатьох підходах до розробки програмного забезпечення, таких як гнучкі методології, дизайн, керований доменом та об'єктно-орієнтований аналіз та дизайн, нам пропонується застосувати один ітеративний підхід до розробки.
Таким чином, ми не повинні робити нашу доменну модель правильно в перший раз, коли ми починаємо працювати над проектом. Натомість, з часом ми перетворюємо модель, оскільки з часом ми глибше розуміємо проблемну область.
Крім того, навіть якщо ми намагатимемося домогтися ідеальної моделі, що, як я вже переконаний, дуже важко, вимоги можуть змінитися. Таким чином , після того , як програмне забезпечення було розгорнуто на виробництво, кінцеві користувачі могли помітити , що певну вимогу не було повністю, або ще гірше, деякі вимоги НЕ було.
Сенс у тому, що нам може знадобитися змінити модель після розгортання програмного забезпечення. Якщо це трапилося, у нас є проблема: у виробничій базі даних є важливі дані користувачів, які вже встановлені у форматі для старої моделі .
Оновлення коду може бути важким завданням, якщо код не розроблений належним чином і якщо система велика. Але це можна зробити з часом, у нас є такі інструменти, як Git, які допомагають нам це робити, не пошкоджуючи готову до виробництва версію.
З іншого боку, якщо модель змінюється, якщо властивості класів зникають чи що завгодно, база даних також повинна змінюватися. Але у нас є проблема: там уже є дані, які неможливо втратити, що вже сформовано для старої моделі.
Схоже, що тут реляційна база даних є бар'єром, який заважає нам робити ітераційну розробку і навіть оновлювати програмне забезпечення, коли цього вимагають кінцеві користувачі.
Я вже використовував один підхід для кодування спеціального класу, який відображає старі таблиці баз даних на нові. Тож ці класи вибирають дані у старому форматі, перетворюють їх у формат, використаний новою моделлю, та зберігають у нових таблицях.
Цей підхід, здається, не найкращий. Моє запитання тут: чи існують відомі та рекомендовані підходи для узгодження ітеративного розвитку з реляційними базами даних?