Как переименовать имена столбцов таблицы SQL и не разбивать вещи

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

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

Мне было интересно, можно ли вообще предоставить псевдоним при вставке в БД?

Я спрашиваю, потому что вы можете использовать псевдоним на SELECT как это:

SELECT users.id, username, number AS order_number FROM users INNER JOIN orders ON users.id = orders.user_id;

Или у кого-нибудь есть другие предложения о том, как мне это сделать?

2 ответа

Решение

Хотя рефакторинг базы данных, без сомнения, является большой и рискованной деятельностью, вот несколько советов по снижению риска. Ниже приведены некоторые предложения с различными плюсами и минусами (как я их вижу), надеюсь, они помогут.

Код

В зависимости от вашего языка программирования, комфорта и временных рамок вы можете заменить встроенный прямой SQL на независимый реляционный СУБД, объектно-реляционный картограф, такой как Hibernate / NHibernate и т. Д.

Pros

  • Предоставляет абстракцию для будущего рефакторинга базы данных.
  • Может обеспечить улучшения и повторное использование.
  • Уменьшает любые атаки SQL-инъекций.

Cons

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

Хранимые процедуры

В зависимости от вашей РСУБД вы можете обеспечить абстракцию и дополнительную безопасность для базовых данных и схемы с помощью хранимых процедур.

Pros

  • Больше кода для поддержки.
  • Нелегко проверить, хотя в зависимости от вашей RDBMS существует множество платформ тестирования баз данных, которые должны включать покрытие SP.
  • Повышенная безопасность данных и снижение риска атак с использованием SQL-инъекций, если вы не создаете динамический SQL в хранимых процедурах.

Cons

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

Просмотры

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

Pros

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

Cons

  • Ограничено, чтобы выбрать заявления.
  • Может быть запутанным, чтобы развиваться против.
  • Не защищает от атак с использованием SQL-инъекций.
  • Больше кода для поддержки.

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

Pros

  • Может предоставить абстракцию для вставки данных.

Cons

  • Вероятно, самый рискованный вариант для обеспечения абстракции.
  • Подходит только для операторов вставки.
  • По-прежнему подвержен атакам с использованием инъекций при использовании прямого встроенного SQL.
  • Триггеры могут не поддерживаться для ваших типов данных.
  • Больше кода для поддержки.
  • Триггеры трудно отлаживать и часто не нравятся из-за "скрытой" природы.

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

create view view_nice_column_names 
as
SELECT bad_name_1 as nice_name_1, bad_name_2_as nice_name_2 FROM blabla
GO

INSERT INTO view_nice_column_names (nice_name_1, nice_name_2) VALUES ( ...)
Другие вопросы по тегам