Изменение таблицы SQL Server без воздействия

У меня есть таблица с 30 столбцами, которые уже широко используются в приложении. т.е. операции «Выбрать», «Вставить» и «Обновить» для этой таблицы, написанные разными способами (по мнению разработчиков, они были удобными) в количестве хранимых процедур и UDF. Теперь мне поручена задача расширить функциональность, для которой служит таблица, и мне нужно добавить дополнительные детали в таблицу (как правило, это можно считать дополнительным столбцом к таблице). Добавление дополнительного столбца в таблицу - это массивная и неэффективная задача, которую я не хочу делать, учитывая влияние, которое это может вызвать в других местах.

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

Использование SQL Server 2000 в случае необходимости.

Редактировать:

К несчастью, столбец не должен принимать значения NULL. Пропустил эту важную информацию

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

1) «SELECT *» и привязка к некоторому datagrid непосредственно к интерфейсу. (очень маловероятно)

2) использование номеров столбцов для извлечения из набора данных или данных вместо имен столбцов в передней части при использовании «SELECT *»

3) «Вставить в» со значениями, указанными последовательно, а не с именами столбцов.

Каким-то образом, если я могу заставить столбец принимать значения «NULL» (немного подстраивая требования), какое-либо влияние из-за вышеуказанных пунктов?

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

sql-server,database,

5

Ответов: 12


5 принят
  1. Создайте новую таблицу со всеми необходимыми столбцами, назовите ее, как хотите.
  2. Создайте представление, назовите его так же, как и старую таблицу, и верните все столбцы, к которым использовалась старая таблица.
  3. ???
  4. $

(да, я знаю, что это может ввести в заблуждение для обслуживания, потому что многие администраторы баз данных используют соглашение об именах для представлений: V_Viewname. Я никогда не получал названия объекта SQL после того, какой тип объекта он и не видит преимущества такого конвенция)


3

Спросите себя, почему добавление колонки окажет огромное влияние. Возможно, у вас есть запросы, которые используют SELECT *? Узнайте, почему влияние будет значительным - тогда подумайте, что это ошибки, и исправьте их.

Большую часть времени добавление столбца не должно ничего сломать. Добавление столбца NOT NULL повлияет на все, что делает INSERT, но в остальном это не должно сильно повлиять, если ваша база данных правильно спроектирована.


EDIT после NOT NULL update

Решение очевидно: добавьте столбец как NULL, обновите данные, чтобы включить значения не NULL для каждой строки, а затем измените столбец NOT NULL.


1

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

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


0

любой подход будет работать со следующими оговорками:

  • если у вас есть SELECT * ... где-то ваши новые столбцы будут отображаться в наборе результатов, что может быть нежелательным, например

    вставить в #tmpTable select * from sometable, где blah-blah-blah

приведет к ошибке, если новые столбцы не определены в таблице temp

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

0

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

Недостатком является то, что:

  • для того, чтобы найти новые данные, вам нужно сделать соединение (на самом деле, внешнее соединение).
  • при вставке / обновлении / удалении записей вы должны сделать это в двух таблицах
SQL-сервер, база данных,
Похожие вопросы
Яндекс.Метрика