Как переименовать имена столбцов таблицы 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 ( ...)