CREATE TABLE tbl_Date
(
DateID int PRIMARY KEY IDENTITY(1,1)
,DateValue datetime
)
INSERT INTO tbl_Date (DateValue)
SELECT DISTINCT Date
FROM tbl_Data
WHERE Date NOT IN (SELECT DISTINCT DateValue FROM tbl_Date)
然后创建市场表
CREATE TABLE tbl_Market
(
MarketID int PRIMARY KEY IDENTITY(1,1)
,MarketName varchar(200)
)
INSERT INTO tbl_Market (MarketName)
SELECT DISTINCT MarketDescription
FROM tbl_tmpData
WHERE MarketName NOT IN (SELECT DISTINCT MarketDescription FROM tbl_Market)
然后创建ProductType表
CREATE TABLE tbl_ProductType
(
ProductTypeID int PRIMARY KEY IDENTITY(1,1)
,ProductType varchar(200)
)
INSERT INTO tbl_ProductType (ProductType)
SELECT DISTINCT ProductType
FROM tbl_tmpData
WHERE ProductType NOT IN (SELECT DISTINCT ProductType FROM tbl_ProductType)
然后创建Product表
CREATE TABLE tbl_Product
(
ProductID int PRIMARY KEY IDENTITY(1,1)
, ProductCode varchar(100)
, ProductDescription varchar(300)
,ProductType int
)
INSERT INTO tbl_Product (ProductCode, ProductDescription, ProductType)
SELECT DISTINCT tmp.ProductCode,tmp.ProductName, pt.ProductType
FROM tbl_tmpData tmp
INNER JOIN tbl_ProductType pt ON tmp.ProductType = pt.ProductType
WHERE ProductCode NOT IN (SELECT DISTINCT ProductCode FROM tbl_Product)
然后创建数据表
CREATE TABLE tbl_Data
(
DataID int PRIMARY KEY IDENTITY(1,1)
, DateID varchar(100)
, ProductID varchar(100)
, MarketID varchar(300)
,Units decimal(10,5)
, value decimal(10,5)
)
INSERT INTO tbl_Data (ProductID, MarketID, Units, Value)
SELECT t.DateID
, p.ProductID
, m.MarketID
, SUM(tmp.Units)
, SUM(tmp.VALUE)
FROM tbl_tmpData tmp
INNER JOIN tbl_Date t ON tmp.Date = t.DateValue
INNER JOIN tbl_Product p ON tmp.ProductCode = p.ProductCode
INNER JOIN tbl_Market m ON tmp.MarketDescription = m.MarketName
GROUP BY t.DateID, p.ProductID, m.MarketID
ORDER BY t.DateID, p.ProductID, m.MarketID
2条答案
按热度按时间tpxzln5u1#
下面是一个在脚本中规范化表的例子。我建议你这样做
您将首先创建您的日期表:
然后创建市场表
然后创建ProductType表
然后创建Product表
然后创建数据表
l7wslrjt2#
我最近做了这件事,对一般程序如何执行有了一些见解。
1.从数据建模开始。当您开始使用未规范化的数据库时,您需要创建一个适当的模型,以便将数据传输到该模型中。这包括标识应存在于其自己的表中的原子对象。标识重复数据并确定其位置。还要标识数据结构中存在的所有关系。
可选步骤。数据库通常与可能也需要更新的接口一起使用。在此步骤中也查看该设计,并决定在数据结构和接口程序中是否有任何孤立的部分可以等待。应该包括多少取决于实际方面,如时间和预算。也许有些部分还不需要修改。
也可以选择完全从头开始,跳过向后兼容性,让两个系统并行运行
1.编写一个脚本,添加规范化数据所需的所有新列和表。
1.编写另一个脚本,将非规范化数据传输到新的规范化数据结构中,这是我认为最棘手的部分,可能会相当混乱,这取决于旧数据的糟糕程度。
1.通过向新的表和列添加约束,对新的规范化数据实施模型中的所有约束。这也最好在脚本中完成。在脚本中,您将看到数据迁移是否成功。如果成功,您将能够添加所有约束。如果失败,则某些约束将失败,您将不得不返回并查看失败的约束。
1.最后,创建另一个脚本,删除新模型中删除的所有列和表。通过这样做,您将很容易地确定界面中需要更新的所有位置。与这些列和表中的任何内容相关的任何内容都必须在界面中更新。
一些通用的技巧是在数据库的一个副本上进行所有的开发,也许是缩减的副本。例如,在MySQL中,你可以使用Workbench等工具进行SQL转储,并在其上测试脚本。在迁移工作之前,你可能需要在数据库上进行几次迭代。在连接中,也要在数据库的一个副本上进行实际迁移,不要破坏生产中的任何东西。