你真的應該使用外鍵引用主表。現在我保持這個簡單,但如果你能遵循這個,那麼你將能夠編輯它以滿足你的需求。
好的,我們來製作一些示例數據。這相當於你當前的表格;
CREATE TABLE PlayerData (PlayerID int, PlayerName varchar (20), DateOfBirth date, Address1 varchar(20), Address2 varchar(20))
INSERT INTO PlayerData (PlayerID, PlayerName, DateOfBirth, Address1, Address2)
VALUES
(1,'Mike Hunt','1980-01-01','Mike Street','Hunt Town')
,(2,'Harry Dong','1970-02-02','Harry Street','Dong Town')
,(3,'Hugh Gass','1960-03-03','Hugh Street','Gass Town')
,(4,'Neil Down','1950-04-04','Neil Street','Down Town')
,(5,'Seymore Butts','1940-05-05','Seymore Street','Butts Town')
我要創建一個保存我的玩家ID號的唯一列表中的一個表,這是我會把不適合到其他表遠一點的信息。對於這個例子,我只有一個領域;
CREATE TABLE PlayerNum (PlayerID int PRIMARY KEY CLUSTERED)
我現在要創建我的新AddressData表。注意它有它自己的標識字段,但也有一個PlayerID來引用PlayerNum表;
CREATE TABLE AddressData (AddressID int identity(10,1) PRIMARY KEY CLUSTERED, PlayerID int, Address1 varchar(20), Address2 varchar(20), FOREIGN KEY (PlayerID) REFERENCES PlayerNum(PlayerID))
我打算對包含我的玩家的個人信息的表做同樣的處理,
CREATE TABLE PlayerPersonalInfo (InfoID int identity(50,1) PRIMARY KEY CLUSTERED, PlayerID int, PlayerName varchar(20), DateOfBirth date, FOREIGN KEY (PlayerID) REFERENCES PlayerNum(PlayerID))
所以,現在我已經得到了我新的3個表是空的,一個表的數據插入到他們。我們首先填充我們的PlayerNum表,這需要首先是因爲其他表上的外鍵約束;
INSERT INTO PlayerNum (PlayerID)
SELECT PlayerID
FROM PlayerData
現在我已經完成了,讓我們將數據插入到AddressData中。注意我沒有將數據插入到AddressID字段中,因爲它是一個標識字段。它將從10開始並按照表格定義遞增1;
INSERT INTO AddressData (PlayerID, Address1, Address2)
SELECT PlayerID, Address1, Address2
FROM PlayerData
我打算對我的PlayerPersonalInfo數據做同樣的事情。該表格的身份將從50開始並增加1;
INSERT INTO PlayerPersonalInfo (PlayerID, PlayerName, DateOfBirth)
SELECT PlayerID, PlayerName, DateOfBirth
FROM PlayerData
如果您確信不需要它,您現在可以擺脫PlayerData表。
DROP TABLE PlayerData
你現在有3張表;
PlayerNum
PlayerID
1
2
3
4
5
AddressData
AddressID PlayerID Address1 Address2
10 1 Mike Street Hunt Town
11 2 Harry Street Dong Town
12 3 Hugh Street Gass Town
13 4 Neil Street Down Town
14 5 Seymore Street Butts Town
PlayerPersonalInfo
InfoID PlayerID PlayerName DateOfBirth
50 1 Mike Hunt 1980-01-01
51 2 Harry Dong 1970-02-02
52 3 Hugh Gass 1960-03-03
53 4 Neil Down 1950-04-04
54 5 Seymore Butts 1940-05-05
通知噸最後兩個表中的PlayerID現在可以鏈接到PlayerNum以檢索您的數據。
由於我們使用外鍵,你不能在AddressData或PlayerPersonalInfo信息的球員沒有PlayerNum
相應的條目BTW'Info'是不是真的爲表一個好名字。它並沒有真正描述表格的內容。 –
對不起,我已經改變了這個問題的表的名稱。真正的表名是不同的:) – TryNCode