2014-07-22 17 views
0

正如我所說的,我目前正在開發一個項目,它需要以某種方式持久化數據,但不需要永久執行,我的意思是,我不想創建一個SQL DB或類似的東西。所以我想使用本地數據庫(實體數據模型)空做到這一點,我創建工作作爲表的幾個實體,我會告訴你:.NET:將GUID用作本地數據庫對象的ID是否正確?

enter image description here

我宣佈了顯着的變量作爲Guid類型。 事實是,我只用了幾次就使用了Guid's,我不確定我是否理解他們的目的是什麼,但是看起來它適合作爲對象的Id。 看着微軟的定義說,「這樣的標識符被複制的可能性很低。」按照這個,這次對我來說已經足夠了。 我更喜歡使用這個對象來創建我自己的Id作爲一個int值,並且每次需要插入一個新行時都被迫增加它。

你不得不面對這樣的問題嗎? (對不起,我的英語)

+0

Id通常是'ints',但僅僅因爲它們「更容易」,並且您可以使用'identity'來自動遞增數字。儘管使用Guids是完全可以的。 – gunr2171

+0

是的,我知道這是常見的方式,但沒人能否認這可能是更多的努力。感謝您的回答! –

+0

你知道「多少低」是可複製的可能嗎? –

回答

3

是的,guids很好的唯一標識符 - 這是他們的設計目的。碰撞的可能性非常低。

Is a GUID unique 100% of the time?

雖然每個生成的GUID不能保證是唯一的,總 一些獨特的鍵(2^128或3.4×10^38)是如此之大,以致相同的 概率生成兩次的數字非常小。例如,考慮可觀測的宇宙,其中包含約5×10^22星的大約 ;每顆恆星可能會有6.8×10^15個通用唯一 GUID。

而且,看看以下問題:

Simple proof that GUID is not unique

這將爲很多比多小時運行。假設它以1GHz循環(不會 - 它會比這慢很多),它將運行於 年10790283070806014188970年。這比宇宙年齡大約要長810億倍 。

假設摩爾定律成立,不運行這個 程序要快很多,等待幾百年,然後在計算機上運行,​​速度提高了幾十億倍。實際上,如果您等待CPU速度提高並且在運行CPU之前購買新的 CPU(除非您編寫它),否則任何運行時間比CPU速度加倍(大約18個月)花費更長的程序將更快完成 以便它可以暫停 並在新硬件上恢復)。

如果你想使用一個整數作爲標識符,你需要確保有一個singleton,以防止兩個線程同時使用相同的ID執行插入操作。否則,您需要處理插入具有非唯一ID的記錄時發生的異常。

+0

非常感謝...很好的回答! –

2

您可以使用GUID作爲標識符,這樣做有幾個優點以及幾個缺點。最值得注意的是,如果必須在與(主)數據庫斷開連接時將ID分配給對象,那可能是最簡單的方法。缺點是GUID很難閱讀和編輯(與整數相比)。

爲Id使用int字段實際上非常簡單,您無需執行任何工作即可自行增加它。只需在數據庫模式中將該字段聲明爲「標識」,並且數據庫將負責將其遞增。

+0

是否可以在Local DB中聲明身份?我不知道! –

相關問題