如何同时创建两个没有顺序ID的数据库记录

时间:2013-01-15 13:02:58

标签: c# java mysql sql sql-server

我们目前有一个用户登录的网站。

我们有一个userId的用户表。

我们现在希望用户拥有重复的个人资料,这与他们的主要个​​人资料完全分开。这需要是一个秘密的配置文件。

现在我们可以在数据库中添加两条记录,但是id会是顺序的(直到我们达到高命中注册率),这样用户就可以锻炼userId与一个更高的ID相关。

我意识到这不是一个理想的解决方案,但它是对一个大型软件项目的后期更改,因此我们尽可能务实,同时尽可能减少代码更改。

选项:

  1. 关闭自动增量ID,并构建我们自己的keyGeneration表。在0处启动一个表,然后在1000000000处启动一个表。然后我们可以关闭用户表中的自动递增ID,并使用这些键。
  2. 问题是,是否有密钥运行,1,1000000000,2,1000000001,3,1000000002导致大量索引问题?我们是否必须一直强制进行索引重建?

    1. 我们为第二个配置文件ID键入一个单独的表,再次从10000000000开始。然后我们修改所有代码以检查id的> 999999999并翻转服务器端的逻辑,以便查找正常工作。
    2. 意味着检查用户ID从前端传递到站点的所有位置。

      由于我们没有这么做,(我们显然主要是安全地抓取登录用户的userId,它可能不会那么糟糕。

      无论如何,只是想知道是否有人对此有任何想法?

      ///////修改

      要将其放入更多上下文中,想象一下在stackoverflow或facebook上,您有两个可以控制的配置文件,它们之间没有链接。就像Facebook上的多个用户都可以充当页面帐户的方式一样,但是没有从该帐户返回到真实用户个人资料的链接。

      基本上为了不破坏引用完整性或重写太多代码,我真的想将ID(int)传递回这些帐户的前端。然后整个系统就像它已经完成的那样继续滴答作响。

      Guid可能很酷!但它会产生性能开销(不是我真正关心的那样;)但它也意味着要编写大量代码来处理传递到前端的Guids(而不是我们依赖前端变量是正确的)但这就是为什么我建议上面的高int解决方案。由于我们仍然隐藏在后台的ASP.NET成员资格,我几乎认为这可能是好的但是A)我们计划删除那一天(或迁移到简单的成员资格)b)我们在用户表中使用顺序Guid生成来提高性能(对不起再次谈论优化,在需要之前)

1 个答案:

答案 0 :(得分:1)

Guid,网络服务提供的randon数字。很多解决方案。我宁愿选择GUID。

这意味着:这是一个商业密钥,我仍然会使用自动增量样式技术密钥来实现参照完整性。