Переименовать таблицу или столбец в SQL-сервере, не ломая существующие приложения - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть существующая база данных на сервере MS SQL, и я хочу переименовать некоторые таблицы и столбцы, поскольку используемые в настоящее время имена не соответствуют тому, что они представляют.

У меня есть несколько веб-приложений и приложений для настольных компьютеров, которые обращаются к базе данных, используя Entity Framework (сначала код). Слишком много для обновления за один раз и не может позволить всем приложениям начать работать.

Я подумал, что было бы неплохо, если бы SQL-серверу был разрешен постоянный псевдоним для таблиц и столбцов, но я не думаю, что эта функция существует.

Или мне было интересно, есть ли способ в EF иметь два имени для одного и того же свойства?

Ответы [ 3 ]

1 голос
/ 04 апреля 2019

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

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

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

0 голосов
/ 04 апреля 2019

Поскольку вы сначала используете код в нескольких веб-приложениях и приложениях для настольных компьютеров, вы, вероятно, управляете изменениями базы данных из одного места путем миграции и игнорируете изменения в других местах.Вы можете создать пустую миграцию и добавить код, который изменит имя таблицы и имена столбцов на то, что вы хотите.Затем миграция должна создать представление, которое будет выбирать из этой таблицы исходные имена таблиц и столбцов.Когда вы применяете эту миграцию, все должно работать как обычно из всех приложений.Модельных изменений нет, так как вы не трогали модельные классы.Вставки, обновления и удаления по-прежнему будут происходить через представление.В этой опции нет необходимости в потенциально глючных триггерах или синонимах в таблице.Теперь, когда вы изменили таблицу, вы можете сосредоточиться на коде приложения.Если это поможет, вы можете добавить аннотации к именам столбцов и таблиц и начать рефакторинг кода.Вы должны убедиться, что вы не вносите изменения в модель, которые сломают другие приложения.Если приложения игнорируют изменения модели, вы можете избежать добавления примечаний к столбцам и классам во всех приложениях перед рефакторингом.Таким образом, вы можете избавиться от вида раньше.

0 голосов
/ 04 апреля 2019

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

Скажем, у вас есть таблица с именем MyTable, которую вы переименовываете TheTable, и столбец с именем MyColumn, который вы хотите переименовать в TheColumn

  1. Создать схему, скажем, new
  2. Переместите оригинальный стол в это с этим ALTER SCHEMA new TRANSFER MyTable
  3. Переименуйте таблицу и столбец.

Теперь у вас есть таблица с именем new.TheTable со столбцом с именем TheColumn. Все сломано

Наконец, создайте представление, которое будет выглядеть как старая таблица

 CREATE VIEW dbo.MyTable 
 AS 
 SELECT Column1, Column2, Column3, TheColumn As MyColumn 
 FROM new.TheTable;

Теперь все снова работает.

  • Все ваши фиксированные «новые» таблицы находятся в new схеме
  • Однако теперь все сложнее

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...