Переименовать столбец или добавить столбец? вот в чем вопрос - PullRequest
2 голосов
/ 27 января 2009

Я собираюсь изменить несколько таблиц в огромной системе, которую я, вероятно, понимаю только около 10%.

Я хочу добавить три столбца. Одним из них является просто переименование существующего столбца. Часть меня хочет: -

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

  • Добавить три столбца в таблицу поэтому делает старый столбец избыточный (со временем).

Ответы [ 7 ]

4 голосов
/ 27 января 2009

Если вы действительно должны это сделать, обязательно выберите второй вариант .

Кстати, я думаю, изменение структуры базы данных, которую вы не понимаете, - это рецепт катастрофы , так что удачи!

1 голос
/ 27 января 2009

Поиск в исходном коде ссылок на столбец, который вы хотите переименовать.
Я предполагаю, что весь исходный код находится в некотором исходном хранилище. (Включая сценарии SQL.).

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

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

Если вы этого не сделаете, вам следует воспользоваться вторым вариантом.

0 голосов
/ 27 января 2009

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

0 голосов
/ 27 января 2009

Вы знаете, я работал над системой, в которой мы просто оставили старое на месте, а затем добавили новое и использовали его в дальнейшем. Это создает НАМНОГО больший беспорядок в долгосрочной перспективе, чем внесение изменений, а затем изменение всех ссылок на старую структуру. Так что теперь у них есть система, в которой они вообще не могут стандартизировать что-то новое, потому что есть четыре разные структуры для хранения информации о спикере и две разные структуры для хранения информации о представителе и т. Д. Поэтому каждое крошечное изменение должно быть настроено клиентом, делая все, что гораздо сложнее поддерживать в будущем. Это неэффективно и не эффективно и становится намного дороже в обслуживании. Укуси пулю и выясни, на что это повлияет, а потом сразу все поменяй.

0 голосов
/ 27 января 2009

Я думаю, что самый безопасный способ сделать это - создать новую таблицу и создать новые хранимые процедуры и методы .

Но лучше всего понять всю систему, хотя ... Надевание таких повязок со временем станет большим беспорядком.

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

РЕДАКТИРОВАТЬ: я работал над несколькими веб-приложениями, которые имели ту же проблему. Несколько разработчиков до меня добавили и модифицировали кучу вещей в своем собственном стиле. Я предполагаю, что ваш случай похож.

Как я и сказал. Лучший способ - понять всю систему и изменить ее. Но если вы не можете, я считаю, что лучше добавлять новые модули, чем модифицировать существующие. Это легко отключить, когда что-то идет не так. Также, по крайней мере, теперь вы точно знаете, как работает ваш модуль.

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

Итак ... мои последние мысли.

  • Лучше: переименовать столбец и изменить соответствующим образом (если вы точно знаете, как работает система)
  • Сейф: Добавить новые столбцы
  • Безопасный: добавление новой таблицы для новых столбцов и создание новых методов (переопределение или перегрузка)
0 голосов
/ 27 января 2009

Если вы не понимаете схему базы данных, НЕ переименовывайте. Кто знает, что ты сломаешь:)

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

Таким образом вы получите переименование, но вы не удалите старый столбец.

Более безопасная ставка - перевернуть это. Сделайте ваш новый столбец вычисляемым значением, которое просто читает старый и покончим с этим:)

Или вы можете создать представление, которое будет примерно таким же.

0 голосов
/ 27 января 2009

Идеальное решение: понять остальные 90% системы:)

Я бы добавил две новые колонки и оставил бы столбец со старыми ошибками, как есть. Даже если ваша новая логика использует ваш новый (фиксированный) столбец, как насчет старых отчетов? Старая логика? Старые операторы вставки / обновления?

...