2011-10-18 55 views
0

我在分配包含員工信息的其中一個表中的主鍵時遇到問題。該表中沒有唯一的列,我留下的唯一選項是將三列組合爲主鍵。主鍵約束的警告消息

  1. 但它給爲Warning! The maximum key length is 900 bytes. The index 'pk_hrempid' has maximum length of 1530 bytes.For some combination of large values, the insert/update operation will fail我才知道,這將是未來的一個主要問題爲插入數據的警告消息。有這種警告的解決方案嗎?

  2. 其他問題是我可以把一個自動增量值作爲一個唯一的ID,是否建議?我想確保它不會在將來出現問題,因爲我有許多包含來自其他部門的員工信息的表格。一些員工可能會出現在兩張或更多的表格中

任何幫助表示讚賞!

+0

希望知道導致該錯誤的列數據類型定義。 – Widor

+1

很難調試我們看不到的SQL DDL代碼;)不要害羞,發佈屬性名稱數據類型和示例數據。您可以在這裏找到具有您的業務領域知識的人員,他們可以指引您採用行業標準密鑰或其他可信賴的標識符源。 – onedaywhen

+0

@ Widor ..謝謝你的提示。所有我的數據類型都有一個默認的nvarchar(255)(因爲我已經從訪問中調整了大小),這對於列中的數據來說太長了,我已經改變了數據 - 主鍵列的類型,那麼主鍵沒有警告!我是否必須更改所有其他列的數據類型(與nvarchar相比,它們的數據也很少)......還是可以放置它? – user939615

回答

0

雖然它是從您嘗試使用「自然鍵」的最佳練習的複合主鍵中發出的,但使用自動遞增ID字段沒有任何「錯誤」。

如果您的建議字段太大而無法用作關鍵字,可能它們並不是首選的最佳選擇。你可以用更好的數據類型添加另一個「自然」鍵列嗎?

不要忘記考慮通過選擇好的索引和合適的數據類型來查找可能存在的優化問題。

+0

作爲最佳實踐的自然關鍵,在那裏我認爲有點爭議... – OTTA

+0

我想你的意思是說,「使用代理鍵_除了_自然鍵......之外沒有任何錯誤......」(除了:我會不同意),但這裏的問題是DBMS無法強制執行自然密鑰。 – onedaywhen

+0

@OTTA我應該以「如果自然鑰匙是可行的」或「如果自然鑰匙適合作爲主鑰匙」來限定這一點。也就是說,如果'自然'和'代理'都是小的,數字的和可轉位的,那麼每次都要用'自然'的。 – Widor

0
  1. 這是主鍵的限制。你不能有一個大於900字節的PK。

  2. 您可以將標識列添加到表中並將其設置爲主鍵。我更喜歡使用Guids,因爲它們是全球獨一無二的。

+1

1.當然這是SQL Server的限制嗎? 2.這不會阻止現有三列中的重複。 – onedaywhen

0

我會去與主鍵自動遞增型的解決方案,使用個人數據這樣的事情的問題是,你不能保證唯一性是主鍵的基本要求。