Как мне изменить мою базу данных для соответствия этому новому дизайну?

#sql #sql-server-2008

#sql #sql-server-2008

Вопрос:

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

У нас была таблица транспортных средств со столбцом классификации. Столбец классификации был строкой, которую кто-то ввел в поле. Это не был столбец с внешним ключом.

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

Перейдем к вопросу. Как мне построить таблицу M: M? Какой SQL используется для этого?

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

Спасибо за любые предложения!

Правка 1: Я создал таблицы. Я просто спотыкаюсь о инструкции SQL.

Комментарии:

1. Вы спрашиваете о процессе или о том, как его реализовать? У вас есть правильный процесс — вот как это должно быть сделано.

Ответ №1:

Как мне построить таблицу M: M?

Угадывание некоторых типов данных, имен столбцов и т.д.

 create table vehicle_classifications (
  vehicle_id integer not null references vehicles (vehicle_id),
  classification_id integer not null references classifications (classification_id),
  primary key (vehicle_id, classification_id)
);
  

Затем что-то вроде

 insert into vehicle_classifications (vehicle_id, classification_id)
select t1.vehicle_id, t2.classification_id
from vehicles t1
inner join classifications t2 on t1.classification = t2.classification
  

Затем, после проверки данных, я бы вручную удалил классификацию
столбец из таблицы vehicle.

Прежде чем делать это, убедитесь, что у вас есть ограничения внешнего ключа для новой таблицы объединения.