所以我完全理解了用相同的数字创建两个参考线值的数学上的不合理性。但是,假设它们是独一无二的做法是否可以接受呢?
例如,我正在使用一个处理医疗文件的系统。当我开始布局数据库结构时,经理(技术知识不太渊博,但喜欢认为他是,并将更好的事情留给更有技术头脑的人来决定)说,他想用GUID来分离不同的医疗记录,而不是INT,因为它“更独特”。我解释了INT为什么总是唯一的,因为它是顺序的。我建议我们使用BigINT,如果它能让他感到更舒服,因为这里面有更多的数字,那么如果地球上的人口增加到一定程度,人们就只能站在地球各地,但他坚持使用GUID。
我的感觉是,虽然几乎不可能出现混淆,但在处理病历时,为什么要冒这个险呢?在这个场景中使用GUID和INT有什么好处?
发布于 2015-09-11 00:22:08
但是,假设它是独一无二的做法是否可以接受呢?
是的。是UUID的全部用途,可以作为一个可靠的唯一标识符使用,而不需要集中协调。( 参考线是微软UUID的变体。)
只有您(或您的适当管理人员)才能对您的特定项目做出最终判断。
但是,如果你真的开始意识到12x位的数值范围的巨大性(这实际上是人类头脑所无法理解的),那么你就知道你可以从你的忧虑列表中删除正确生成的UUID的用法。
所谓“正确生成”,我指的是使用日期-时间版本,或者对于较低数量的值,如果有加密强随机数生成器支持,则使用随机(版本4)。当今几乎每一个现代操作系统都包括一个UUID生成库。或者您可以使用OSSP UUID项目。不恰当的生成将包括您自己的滚动实现,您可能会看到关于跨网的班格。
至于使用数据库自动递增的序列号/序列号的建议,我所认识的每一个具有多年真实世界经验的数据库人都被这些人烧掉了。我从未听说过或阅读过任何与正确生成的UUID发生冲突的人。我并不是说序列一定是坏的,或者没有它们的位置,我只是想说,当我听到人们因为一些无法理解的、难以理解的UUID碰撞的可能性而离开UUID,而选择一个序列时,我所能做的就是笑。
在处理病历时,为什么要冒这个险?
由于错误的数据输入或处理记录的其他人为错误,您的医疗系统更有可能失败。但你是否派了3名值勤的职员独立地三次输入相同的数据,以减少出错的可能性?不是的。与UUID问题相比,这种风险在数学上更有可能发生。然而,我所知道的每一个医疗机构都接受这种巨大的风险,甚至连想都不去想。
使用GUID和INT的优点是什么?
这些优点包括:
缺点包括:
发布于 2015-09-11 00:07:43
使用递增的整数ID只确保它自己的域/类型内的唯一性,UUID/GUID的一个优点是它们唯一地标识整个宇宙中拥有的东西。
因此,如果您有多个对象,比如MedicalRecord, ID = 5
,VaccinationForm, ID = 5
,那么您需要指定两种类型("medicalRecord“或"vaccinationForm”,ID值为5
),而对于GUID,您只需要存储单个量子信息来唯一标识它。
可以说,使用GUID是浪费空间,因为它们有16个字节长(128位值)。
如果您的系统是独立的,并且不与其他表进行接口,那么您可能需要使用Server的“序列”概念,在这个概念中,不是每个表存储自己的标识序列,而是维护所有表的序列,使其成为一个本地唯一的ID值。您也可以使用任意大小的整数。
https://stackoverflow.com/questions/32513357
复制相似问题