如何更改我的数据库以适应这种新设计?

时间:2011-11-08 17:15:11

标签: sql sql-server-2008

我刚刚完成了一些数据库更改,现在我需要迁移数据以适应新设计。

我们有一张带有分类栏的车辆表。分类列是有人在字段中输入的字符串。这不是一个外键专栏。

现在,我更改了设计以允许车辆具有多个分类(是的,业务规则允许这样),并且分类被移动到查找表。分类栏将从车辆表中删除,替换为M:M连接表,以启用每个车辆要求的多个类别。分类表是使用车辆表中分类列的唯一值构建的。

关于这个问题。如何构建M:M表?执行此操作的SQL是什么?

在我看来,过程将是:对于车辆表中的每一行b)在新分类表中查找分类字符串c)将分类ID和车辆ID插入到VehiclesClassifications表中。然后,在检查数据后,我将手动从车辆表中删除分类列。

感谢您的任何建议!

编辑1:我创建了表格。我只是绊倒SQL语句。

1 个答案:

答案 0 :(得分:0)

  

如何构建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
  

然后,在检查数据后,我会手动删除分类   车辆表中的列。

在执行此操作之前,请确保在新连接表上有外键约束。