我正在考虑在使用SQL Server的.net应用程序中使用GUID。我应该编写一个存储过程,在每个输入的记录上生成GUID,或者我应该直接从应用程序生成它。生成GUID
理由问这个问题(如果我错了纠正我在这个):
我(AS /预)庙:
当从数据库中生成的GUID,你可以假设DB记住以前生成的GUID作为应用程序记住它很困难。
我正在考虑在使用SQL Server的.net应用程序中使用GUID。我应该编写一个存储过程,在每个输入的记录上生成GUID,或者我应该直接从应用程序生成它。生成GUID
理由问这个问题(如果我错了纠正我在这个):
我(AS /预)庙:
当从数据库中生成的GUID,你可以假设DB记住以前生成的GUID作为应用程序记住它很困难。
SQL Server创建了内置的GUID。不需要为此编写单独的存储过程。
您可以使用
两个程序之间的主要区别将是连续GUID应该使用,如果它是一个主要的集群键。
我不确定为什么您希望数据库引擎记住以前生成的GUID。
不,你的假设是错误的:数据库不会记住任何事情 - 所以从这个角度来看没有任何好处。
如果您正在使用GUID在SQL Server的主键/聚集键,这是一个坏主意,开始(见here,here或here为什么是这种情况),你应该至少使用newsequentialid()
作为该列的默认约束。
CREATE TABLE YourTable(ColumnA uniqueidentifier DEFAULT NEWSEQUENTIALID())
这样一来,该数据库将产生伪连续GUID对您的PK,从而将使使用GUID作为PK/CK至少可以忍受....
如果你”的负面影响不要使用GUID作为主键,那么我真的没有看到在服务器上创建GUID的好处。
我能想到一些有效的商业案例,使用(顺序)GUID将是一个不错的选择。 AMOF,如果我们几年前知道我们现在知道的,我们很可能已经实施了它们并为我们节省了很多麻烦(和金钱),试图与我们的分支机构来回交换数据。 – 2010-07-05 10:03:04
@lieven:似乎你在谈论复制 - 这可能是你真正需要它们的唯一有效案例。让他们成为你的PK,但如果可能的话,使用别的东西作为你的群集键! – 2010-07-05 10:16:30
@marc_s谢谢。但是如果服务器重新启动呢?!我知道你会失去你的顺序。我错了吗 ? – 2014-09-30 07:09:15
我的首选是在应用程序中创建GUID而不是db。
RFC4122 1:«不要认为UUID很难猜测;例如,它们不应该被用作安全功能(仅仅拥有授权访问权的标识符)。一个可预测的随机数字来源将加剧这种情况»。
在简单的任务增量uint64更好。
不使用GUID!如果需要安全。
http://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/b37b3438-90f4-41fb-adb9-3ddba16fe07c
为什么记住以前的GUID是重要还是必需的? – 2010-07-05 09:58:11
如果您使用GUID作为数据库中的主键,请注意其优缺点;) http://www.codinghorror.com/blog/2007/03/primary-keys-ids-versus- guids.html – Tony 2010-07-05 10:52:21