我正在考虑在使用SQL Server的.net应用程序中使用GUID。我应该编写一个存储过程,在输入的每个记录上生成GUID,还是应该直接从应用程序生成GUID。问这个问题的原因(如果我错了,请纠正我):我(认为/假定):当从数据库生成GUID时,您可以假设DB会记住以前生成的GUID,而应用程序很难记住它。
sf6xfgos1#
SQL Server内置了创建GUID的功能。无需为此编写单独的存储过程。您可以使用
这两个过程之间的主要区别在于,如果顺序GUID用于主聚集键,则应使用顺序GUID。我不确定 * 为什么 * 您希望数据库引擎记住以前生成的GUID。
2jcobegt2#
不,你的假设是错误的:数据库将不会记住任何内容-所以从这个Angular 看没有任何好处。如果在SQL Server中使用GUID作为主键/群集键,这是一个糟糕的开始(请参阅here、here或here,了解为什么会出现这种情况),您应该至少使用newsequentialid()函数作为该列的默认约束。
newsequentialid()
CREATE TABLE YourTable(ColumnA uniqueidentifier DEFAULT NEWSEQUENTIALID())
这样的话,数据库会为你的PK生成伪序列的GUID,从而使使用GUID作为PK/CK的负面影响至少可以忍受......如果不使用GUID作为主键,那么我看不出在服务器上创建GUID有什么好处。
jmo0nnb33#
我的首选是在应用程序中创建GUID,而不是在数据库中。
vaqhlq814#
RFC4122:不要假设UUID很难猜;例如,它们不应该被用作安全功能(仅仅拥有赠款访问的标识符)。在简单任务中增量uint 64更好。不使用GUID!如果需要安全性。http://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/b37b3438-90f4-41fb-adb9-3ddba16fe07c
4条答案
按热度按时间sf6xfgos1#
SQL Server内置了创建GUID的功能。无需为此编写单独的存储过程。
您可以使用
这两个过程之间的主要区别在于,如果顺序GUID用于主聚集键,则应使用顺序GUID。
我不确定 * 为什么 * 您希望数据库引擎记住以前生成的GUID。
2jcobegt2#
不,你的假设是错误的:数据库将不会记住任何内容-所以从这个Angular 看没有任何好处。
如果在SQL Server中使用GUID作为主键/群集键,这是一个糟糕的开始(请参阅here、here或here,了解为什么会出现这种情况),您应该至少使用
newsequentialid()
函数作为该列的默认约束。这样的话,数据库会为你的PK生成伪序列的GUID,从而使使用GUID作为PK/CK的负面影响至少可以忍受......
如果不使用GUID作为主键,那么我看不出在服务器上创建GUID有什么好处。
jmo0nnb33#
我的首选是在应用程序中创建GUID,而不是在数据库中。
vaqhlq814#
RFC4122:不要假设UUID很难猜;例如,它们不应该被用作安全功能(仅仅拥有赠款访问的标识符)。
在简单任务中增量uint 64更好。
不使用GUID!如果需要安全性。
http://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/b37b3438-90f4-41fb-adb9-3ddba16fe07c