0

正如我所说,我目前正在一个项目中工作,该项目需要以某种方式保存数据,但不需要永久保存,我的意思是,我不想创建 SQL DB 或类似的东西。所以我想用一个空的本地数据库(实体数据模型)来做这件事,我创建了一些作为表工作的实体,我将向你展示:

在此处输入图像描述

我已将标记的变量声明为 Guid 类型。事实是,我只使用了几次Guid,我不确定我是否非常了解它们的用途,但看起来它适合作为对象的 Id 。从微软的定义来看,“这样的标识符被复制的可能性非常低。” 并且按照这一点,这一次对我来说就足够了。我更喜欢使用这个创建我自己的 Id 作为 int 值的对象,并且每次我需要插入新行时都被迫增加它。

你必须面对这样的问题吗?(对不起我的英语不好)

4

2 回答 2

3

是的,guid 适用于唯一标识符 - 这就是它们的设计目的。发生碰撞的几率非常低。

GUID 是否 100% 都是唯一的?

虽然不能保证每个生成的 GUID 都是唯一的,但唯一键的总数(2^128 或 3.4×10^38)是如此之大,以至于生成两次相同数字的概率非常小。例如,考虑可观测宇宙,它包含大约 5×10^22 颗恒星;然后,每颗星都可以有 6.8×10^15 个普遍唯一的 GUID。

另外,请看以下问题:

GUID 不唯一的简单证明

这将运行超过几个小时。假设它以 1 GHz 循环(它不会 - 它会比这慢很多),它将运行 10790283070806014188970 年。这大约是宇宙年龄的 830 亿倍。

假设摩尔定律成立,不运行这个程序,等待几百年,然后在速度快数十亿倍的计算机上运行它会快得多。事实上,任何运行时间超过 CPU 速度翻倍(大约 18 个月)的程序,如果您等到 CPU 速度提高并在运行之前购买新的 CPU(除非您编写它可以在新硬件上暂停和恢复)。

如果您想使用整数作为标识符,您需要确保有一个单例,以防止两个线程同时使用相同的 ID 执行插入操作。否则,您需要处理插入具有非唯一 ID 的记录时发生的异常。

于 2014-07-22T16:58:47.827 回答
2

您可以使用 GUID 作为标识符,这样做有几个优点,也有几个缺点。最值得注意的是,如果您必须在与(主)数据库断开连接的情况下为对象分配 ID,这可能是最简单的方法。不利的一面是,GUID 更难阅读和编辑(与整数相比)。

对 Id 使用 int 字段实际上非常简单,您不需要自己做任何工作来增加它。只需在 db 模式中将该字段声明为“Identity”,数据库将负责递增它。

于 2014-07-22T17:03:23.427 回答