数据库存储多种类型的数据,但需要全局唯一ID

时间:2011-07-15 18:03:52

标签: mysql database api rest identifier

前一段时间,我问过如何实现REST api。我已经取得了进展,但我正试图让我的大脑围绕另一个想法。

在我的api中,我会有多种类型的数据,例如人物,事件,新闻等。

现在,使用REST,一切都应该有唯一的ID。这个id,我认为它应该是整个系统的独特之处,而不仅仅是每种类型的数据。

例如,不应该有id#1的人和id为#1的新闻项。最终,这两件事情将被完全赋予不同的ID:#1唯一身份的人#1和唯一ID#2的新闻#1,因为#1是由一个人拍摄的。

在数据库中,我知道您可以创建自动递增的主键。问题是,通常你有一个表为每个数据“类型”,如果你单独设置每个表的自动增量,你将得到“重复”的ID(是的,ID在他们自己的表中仍然是唯一的,但不是整个数据库)。

有一种简单的方法吗?例如,可以将所有这些表设置为使用一个增量器(我能想到如何设置它的唯一方法),或者是否需要创建一个包含这些全局ID的表,并将它们绑定到表和该表中的唯一ID?

3 个答案:

答案 0 :(得分:1)

您可以使用GUID,它们在任何地方都是唯一的(无论如何都是为了所有意图和目的)。

http://en.wikipedia.org/wiki/Globally_unique_identifier

答案 1 :(得分:0)

+1 UUID(请注意GUID是UUID standard的特定Microsoft实现)

有一个内置函数uuid(),用于将UUID生成为文本。您可能可以在其前面添加表名,以便以后可以轻松识别它。

每次调用uuid()都会为您生成一个全新的值(如文本)。因此,使用上述前缀方法,INSERT查询可能如下所示:

INSERT INTO my_table VALUES (CONCAT('my_table-', UUID()), ...)

不要忘记让这个列varchar足够大,当然也为它创建一个索引。

答案 2 :(得分:0)

  

现在,使用REST,一切都应该有唯一的ID。这个身份,我接受   它应该是整个系统的独特之处,而不仅仅是每种类型的系统   数据

这根本不是真的。每个资源都需要一个唯一的标识符,是的,但在HTTP系统中,这意味着一个唯一的URI。 /people/1/news/1是唯一的URI。通过约束系统,没有的好处(实际上是很多痛苦,正如您所发现的那样),/news/1必须改为/news/0983240-2309843-234802/才能避免冲突。