我们希望从客户那里隐藏一些实体,但主要原因是,我们不希望客户知道数据库中有多少实体。
e.g。来自网址http://mydomain/user/get/27,它表示这是第27个用户。
因此,我正在实施一个分配随机ID的解决方案(必须是唯一的)。换句话说,不是使用唯一的序列号,而是使用唯一的非序列+随机数解。
e.g。来自网址http://mydomain/user/get/8534023,实际上是第27个用户。
我的问题是,知道这里的一些用户可能有类似问题的经验,我应该使用地图还是将随机ID分配给主键列?
e.g。
CREATE TABLE IF NOT EXISTS `test` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `somethingElse` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) CREATE TABLE IF NOT EXISTS `map` ( `id` int(10) unsigned NOT NULL, /* Foreign Key to test table */ `parent` int(11) NOT NULL, PRIMARY KEY (`id`), KEY `parent` (`parent`) )
VS
CREATE TABLE IF NOT EXISTS `test` ( /* Assign random ID here */ `id` int(10) unsigned NOT NULL, `somethingElse` varchar(255) NOT NULL PRIMARY KEY (`id`) )
对我而言,后者变得更加方便,因为我不需要维护地图,也不必自定义DAO /应用程序以使用映射的ID(或内部的确切ID)。对于这两种情况,我必须编写自己的随机ID生成器。
答案 0 :(得分:3)
你是对的 - 后者是更好的方法。这是一对一的关系 - 没有理由有一个单独的表。我建议:
您的担忧也适用于不公开实际的主键值。它确保如果数据库发生更改,并且实际的主键值已更改 - 用户将不知道更改。
答案 1 :(得分:2)
为什么不将增量种子起始值设置为8534023?您的第一个客户是8534023,您的第二个客户是8534024等。您的客户永远不会知道这意味着什么,但您会。