2012-10-23 68 views
0

我有以下的數據我要上傳:SQL Server表結構

(Pair) (Date) (Time)  (Bid) (Ask) 
EurUsd 01/01/2012 18:04:01 1.55037 1.55137 
EurUsd 01/01/2012 18:04:20 1.55018 1.55118 
EurUsd 01/01/2012 18:04:22 1.55031 1.55131 
EurUsd 01/01/2012 18:04:36 1.55045 1.55145 
EurUsd 01/01/2012 18:04:40 1.55058 1.55158 
EurUsd 01/01/2012 18:04:40 1.5508 1.5518 

GbpUsd 01/01/2012 18:06:11 1.55097 1.55197 
GbpUsd 01/01/2012 18:06:22 1.55117 1.55217 
GbpUsd 01/01/2012 18:06:24 1.55128 1.55228 
GbpUsd 01/01/2012 18:06:38 1.55098 1.55198 

的數據類型如下:NCHAR(6),日期,時間,小數,小數。

不幸的是我不能保證行將在一分鐘的基礎上是唯一的。我還將在每日基礎上向此表添加數據&其他對。

問題1)。爲上述數據設置PK的最佳方法是什麼?我假設我應該建立一個名爲「Id」的BigInt類型的新列,並將其「Is Identity」設置爲Yes?然後將PK設置爲「Id」?

問題2)。基於「配對」,「日期」,「時間」的聚集索引?

問題3)。我假設,如果我在表中設置了「Id」列,我需要在我用來上傳數據的任何sqlbulkcopy操作上使用ColumnMapping?或者一旦設置了「Is Identity」屬性,是否無法將數據加載到列中?

謝謝你的時間。

+1

對於問題2和3,下面的AnandPhadake給出了看法。對於問題1,是的,這是正確的做法,即將ID列自動遞增爲PK。 –

回答

1

1.To設置一個PK我建議你可以使用GUID(唯一標識符),並使用NEWSEQUENTIALID()在你的表格自動填充數據。(這將成爲聚集索引鍵)

2.I猜測在(「Pair」,「Date」,「Time」)列中不需要聚簇索引。如果在where子句中經常使用這些列中的任何一列,那麼我更喜歡那些列上的非聚簇索引。

3.當談到sqlbulkcopy - 你可以映射你想要在表中插入數據的唯一列。

+2

爲什麼GUID而不是IDENTITY? –

+0

bcos OP提及about bigint。如果有大量的記錄,那麼GUID else的身份就可以了。 – AnandPhadke

+0

請問你可以評論爲什麼你更喜歡非聚集索引與數量(2)的聚集索引。 –