编写查询以规范化 table

Writing query to normalize a table

我需要编写查询以规范化 table。

我目前拥有的table有这些属性,table名字dbo.oldTable:

CUS_ID  STATE   CITY    ZIP     CUS_PHONE   CUS_NAME
1       OH      ABC     11111   1111111111  G
2       IL      DEG     33212   1233123123  H
3       CA      ETE     55555   6666666666  E
//many many more lines of data
...................

我想在这里实现的是创建一个名为 territory 的新 table,这个 table 将包含列 STATECITYZIP

到目前为止,我编写了以下查询,但显然它生成了很多行,我找不到与原始查询的联系 table。

CREATE TABLE dbo.Territory
(STATE nvarchar(255), CITY nvarchar(255),ZIP nvarchar(255));

INSERT INTO dbo.Territory(STATE,CITY,ZIP)
SELECT STATE,CITY,ZIP FROM dbo.oldTable;

这是正常化的正确方法吗?我在 MS SQL Server 2014

CREATE TABLE dbo.Territory
(id int identity, STATE nvarchar(255), CITY nvarchar(255),ZIP nvarchar(255));

create table dbo.customer (CUS_ID int identity, territoryid int,        CUS_PHONE varchar (12),  CUS_NAME varchar(25))

alter table dbo.customer  
ADD CONSTRAINT t_id,
FOREIGN KEY (territoryid) 
REFERENCES   dbo.Territory(id)

任何 territoryid 必须引用 dbo.territory 中 id 列中已存在的值。

To insert a new customer:
insert into dbo.customer (territoryid, cus_phone, cus_name) values (3,'212-555-1212','Mary')

我不完全确定邮政编码在美国是如何工作的,但假设一个州可以有多个城市,一个城市可以有多个邮政编码,我将执行以下操作来规范化数据库

CREATE TABLE States
( 
  StateID INT NOT NULL PRIMARY KEY IDENTITY(1,1)
, StateName NVARCHAR(100)
)
GO

CREATE TABLE City
( 
  CityID  INT NOT NULL PRIMARY KEY IDENTITY(1,1)
, StateID INT REFERENCES States(StateID)
, City    NVARCHAR(100)
)
GO

CREATE TABLE Zip
( 
  ZipID  INT NOT NULL PRIMARY KEY IDENTITY(1,1)
, CityID INT REFERENCES City(CityID)
, Zip    NVARCHAR(100)
)
GO

现在你的 Customers 表看起来像......

CUS_ID  ZIP_ID     CUS_PHONE   CUS_NAME
1       11111      1111111111     G
2       33212      1233123123     H
3       55555      6666666666     E