在这种情况下:如果我有一个表用户,默认情况下用户注册并且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。
有什么办法可以避免这个错误吗?或者处理类似案件的最佳做法是什么?
让两个用户表似乎有点过于复杂,只是为了避免这个问题。
答案 0 :(得分:1)
以下是两种替代方法。
首先,如果用户只能以两种方式注册,则每个方法都可以有单独的列。因此,users
表将包含以下列:
依此类推,无论您想要什么列。当用户以“第二”方式注册时,您将更新现有记录而不是插入新记录。
第二种方法可能更好。有两张桌子:
Signups
表将具有回到Users
表的外键关系(可能带有NOT NULL
约束)。两个表都有自动递增的整数主键。
显然,在您的数据模型中,注册与用户是分开的,因此您应该单独对其进行建模。然后,您可以为给定用户提供任意数量的注册。
答案 1 :(得分:0)
也许您可以尝试从数据库中获取MAX ID值,并为下一次插入添加+1。这样,您将始终获得超过当前值的值。