2010-11-02 56 views
2

我剛剛從我的DBA中查看了我的數據庫模式,並將其使用的16位唯一標識符作爲主鍵。我有什麼問題,我如何在MVC路由中使用它。16位Guid的路由看起來很瘋狂?

喜歡的東西http://www.app.com/project/21212/product/212121

這是一箇中等規模的企業應用程序,你爲什麼會需要一個GUID我們的表呢?

我知道我們可以創造一個友好ID字段,但我知道MVC路由不建議使用路由數據庫ID ..

所以我想我的問題是:

爲什麼我們需要16我們的主鍵的位指南?

我怎麼能在路線中使用它。該路線不應包含數據庫ID。

+0

您發佈的鏈接是404. – dotariel 2010-11-02 16:38:52

+1

他確實說'類似'XSaint32,它是一個例子... – dooburt 2010-11-02 16:42:15

+0

爲什麼路線不包含數據庫ID? (即SO用「4079861」代替)另外,不可能以16位存儲GUID。 (他們是128位) – 2010-11-02 16:47:14

回答

1

讓我們看看這個頁面爲例。我認爲我們都可以同意StackOverflow是一個成功的MVC應用程序...

https://stackoverflow.com/questions/4079861/routes-with-16-bit-guids-seem-crazy 

那是什麼「4079861」?數據庫ID?

注意數據庫ID是唯一真正重要的部分,因爲這些鏈接也位於同一位置到達:

https://stackoverflow.com/questions/4079861/ 

https://stackoverflow.com/questions/4079861/Foo 

所以,簡單的答案是:是的,你的路線將可能有一個又大又醜的Guid在他們中。如果您遇到問題,請與您的DBA談談。

1

在問題

你打算使用應該是完全獨立的MVC路線是什麼樣的DB鍵的決定DB一部分。數據庫管理員可能會選擇使用他們認爲適合您的應用程序的任何值,而無需擔心如何制定路線。我無法分辨他們是否對您的域名有意義。

在問題

取決於你正在嘗試做的添加GUID的路線可能不是一個路徑/ URL最好的主意的路徑/ URL的一部分。 「ASP.NET MVC在行動」(95頁)的作者給出了網址,應該如何一些很好的指導方針:

  • 簡單幹淨
  • 破解的
  • 允許的URL參數發生衝突
  • 避免暴露數據庫ID儘可能
  • 考慮添加不必要的信息

如果您有GUID作爲數據庫ID,請查看您是否可以使用其他值來制定到每個資源/記錄的路由。例如,產品的名稱加上數據庫標識的最後4位數字,或者基於您嘗試訪問的信息可以提供的另一個唯一且用戶友好的(請參閱指導方針)值。

+0

我認爲這裏的問題更加棘手。不好像hack能夠像MVC In Action一樣,但是能夠破解,例如可能使用URL訪問你不應該訪問的東西。 – 2010-11-02 18:30:54

+0

在這種情況下,向URL添加額外的信息可能是一個好主意。但是,請記住,取決於安全性的URL是*不夠*。即使您使用GUID,如果URL不應公開,也必須使用其他安全方法。 – 2010-11-02 19:08:43

0

你應該問自己:有沒有另一種方法來唯一標識我的 [插入名稱]

@Mark給出了StackOverflow示例。好的部分是它是一個數字,即使它是一個很長的數字。數字比GUID更好。

你的選擇可能是:

  • 創建一個簡單的數字數據庫中的GUID映射,創建一個冗餘的唯一標識符,用於路由目的
  • 實際顯示GUID爲您的路由
  • 的一部分找一些其他的方法可以唯一標識你的記錄(即日期+名稱組合,哪些博客使用) - 儘管在這裏你必須確保你不允許重複輸入你的路由標識符。

你最終使用的將完全取決於你的情況和要求。