来自不同来源的用户表

时间:2014-10-03 11:01:08

标签: sql database postgresql database-design

在这种情况下:如果我有一个表用户,默认情况下用户注册并且facebook注册。

Table users
id | name
1    John (default)
2    Carl (default)
111  Steven (facebook)
...
111  Wayne (default)

如果id是自动递增且唯一,当DBMS将尝试从默认注册中插入id 111时,由于唯一限制,我将收到错误,因为id 111已手动插入。因此,DBMS应该知道id 111是否存在,下一次默认注册应该是112而不是111。

有什么办法可以避免这个错误吗?或者处理类似案件的最佳做法是什么?

让两个用户表似乎有点过于复杂,只是为了避免这个问题。

2 个答案:

答案 0 :(得分:1)

以下是两种替代方法。

首先,如果用户只能以两种方式注册,则每个方法都可以有单独的列。因此,users表将包含以下列:

  • DefaultDateTime
  • FacebookDateTime

依此类推,无论您想要什么列。当用户以“第二”方式注册时,您将更新现有记录而不是插入新记录。

第二种方法可能更好。有两张桌子:

  • 用户
  • 注册等

Signups表将具有回到Users表的外键关系(可能带有NOT NULL约束)。两个表都有自动递增的整数主键。

显然,在您的数据模型中,注册与用户是分开的,因此您应该单独对其进行建模。然后,您可以为给定用户提供任意数量的注册。

答案 1 :(得分:0)

也许您可以尝试从数据库中获取MAX ID值,并为下一次插入添加+1。这样,您将始终获得超过当前值的值。