2014-02-26 28 views
-1

我需要爲表總線主鍵存儲信息像路公交車,總線類型,註冊號等。正如我們所知沒有公交車本身就是獨特的,可以主鍵,但數據類型的字符串減緩表搜索,所以另一種可能的解決方案其被添加int類型的自動遞增場,但這會增加網絡數據,每次我需要沒有選擇這兩個班車時間和總線ID(自動遞增)用於在winform上進行用戶選擇的。我需要知道哪種方法更好,還是有其他更好的方法。這是在的情況下,更好的BIGINT或nvarchar的主鍵

表架構方法1種

bus no - nvarchar(10) (primary key) 
bus registartion no - nvarchar(10) 

方法2

Bus id - int (autoincremnted) (primary key) 
Bus no - nvarchar(10) 
bus registartion no - nvarchar(10) 
+0

請提供架構建議。 – Stuart

+2

從不使用NVARCHAR作爲主鍵。如果你認爲有很多使用INT的網絡流量,你能想象使用NVARCHAR還有多少?正確設計您的模式,您可以最大限度地減少流量並提高性能。 BigInt不應該需要一個PK,因爲你永遠不會得到那麼多的總線:) – Stuart

+0

你的BUS表應該像CREATE TABLE總線(ID INT NOT NULL IDENTITY(1,1),BusName NVARCHAR(255 )NOT NULL,RegoNumber NVARCHAR(10)NOT NULL,PRIMARKY KEY(ID))。然後你總是使用ID號碼作爲查找值。 – Stuart

回答

0
  • 數字 - 不爲空 - 列始終是在數據庫表的主鍵的最佳選擇。數據庫引擎可以存儲,索引並以最有效的方式查找它們。
  • 不介意網絡流量開銷。根本不要在結果集中查詢不需要的列。避免SELECT *語句。
  • 如果需要,可以在您的SELECT或您的客戶端程序中輕鬆完成類型轉換(例如Integer to String)。

對數據庫建模時,最好先向每個表添加主鍵列,即使您覺得不需要它。給你的主鍵列一個標準化的名字(tablename +'id'是一個通用的命名約定),並鍵入(integer,uniqueidentifier)並堅持下去。不要混合整數,長整數,短整數和其他數據類型,因爲它只能使表連接變得複雜。

E.g.對你的實體公交:

  • 表名是公交車
  • 主鍵的名字是BusId
  • 主鍵類型是int
相關問題