我需要编写查询才能规范化表格。
我目前拥有的表具有这些属性,表名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
的新表,该表将包含STATE
,CITY
和ZIP
列。
到目前为止,我编写了以下查询,但显然它生成了很多行,我找不到与原始表的连接。
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上
答案 0 :(得分:2)
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)
任何borderid都必须引用dbo.territory中id列中已存在的值。
To insert a new customer:
insert into dbo.customer (territoryid, cus_phone, cus_name) values (3,'212-555-1212','Mary')
答案 1 :(得分:0)
我不完全确定邮政编码在美国的运作方式,但假设一个州可以有多个城市,一个城市可以有多个邮政编码,我会采取以下措施来规范化数据库
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 Tables看起来像.......
CUS_ID ZIP_ID CUS_PHONE CUS_NAME
1 11111 1111111111 G
2 33212 1233123123 H
3 55555 6666666666 E