Удаление столбца из таблицы в производстве

8

У нас есть ситуация, когда нам нужно изменить отношение между двумя таблицами с m: 1 на m: n .

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

После переноса всех существующих данных из «дочерней» таблицы в таблицу перекрестных ссылок, было бы плохой идеей удалить исходный столбец внешнего ключа в дочерней таблице?

Если мы оставим это там, у нас будет технический долг. Но я не администратор базы данных и плохо понимаю последствия удаления столбца из таблицы. (Я знаю, что это возможно, но разве это плохая идея? Будет ли моя база данных ненавидеть меня за это?)

Спасибо

onefootswill
источник

Ответы:

5

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

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

Ваш новый дизайн имеет две таблицы измерений и таблицу фактов

  • Вот почему он перешел от m: 1 к m: n с таблицей «перекрестных ссылок». Мы называем это другим измерением.

Дизайн фактически реализовал нормализацию для достижения этой цели

  • Удалив зависимость, ваша команда будет лучше подготовлена ​​к тому, чтобы получать факты, которые могут изменить способ обработки ваших данных более осмысленным образом.

Примечание о размерах и фактах

  • Размеры для описательного контекста

Измерения обеспечивают контекст «кто, что, где, когда, почему и как», окружающий событие бизнес-процесса. Таблицы измерений содержат описательные атрибуты, используемые приложениями BI для фильтрации и группировки фактов. С учетом фактической таблицы фактов можно определить все возможные измерения.

Когда это возможно, измерение должно быть однозначным, если оно связано с данной строкой факта . Таблицы измерений иногда называют «душой» хранилища данных, поскольку они содержат точки входа и описательные метки, которые позволяют использовать систему DW / BI для бизнес-анализа. Непропорциональный объем усилий вкладывается в управление данными и разработку таблиц измерений, потому что они являются движущей силой пользовательского процесса BI.

  • Факты для измерений

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

Техники трехмерного моделирования Кимбалла

Мое предложение состоит в том, чтобы команда разработчиков знала, что применение правил в базе данных лучше, если это не влияет на производительность. Я не знаю размер или количественную оценку ваших заявлений DDL, чтобы полностью ответить на это, хотя.

Но будьте уверены, это должно быть позитивным изменением в вашей системе, поскольку теперь SQL Server не нужно будет проходить через все эти дополнительные данные, чтобы получить то, что действительно имело значение.

clifton_h
источник
Спасибо за исчерпывающий ответ. Приятно знать, что база данных сможет справиться с этим. Это выглядит гораздо более травмирующей операцией, чем удаление строк. При планировании сценария для внесения этих изменений в центре внимания будут индексы и т. Д. У нас, конечно, будут резервные копии и стратегия отката.
onefootswill
5

Я знаю, что это возможно, но разве это плохая идея? Будет ли моя база данных ненавидеть меня за это?

Я не могу говорить за вашу базу данных, но я бы вас за это ненавидел :-)

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

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

Дэн Гусман
источник