SQL Server 2008数据库问题。
我有2个表,为了参数起见,称为客户和用户,其中一个客户可以拥有1到n个用户。 Customers表生成一个CustomerId,它是一个带有+1增量的种子标识。我在Users表中所看到的是一个复合键,它包含CustomerId和序列号,这样在所有情况下,第一个用户的序列为1,后续用户在x + 1处添加。
所以表格看起来像这样......
...例如,如果客户485有三个客户,那么数据看起来就像......
CustomerId | UserId | Name
----------
485 | 1 | John
485 | 2 | Mark
485 | 3 | Luke
我很欣赏我可以为UserId手动添加1,2,3,...,n条目但是我想在SQL中的行插入时自动发生这种情况,因此在显示的示例中我可以有效地插入带有CustomerId的行和带有SQL Server的Name保护身份等等。有没有办法通过数据库设计本身来做到这一点 - 当我将UserId设置为身份时,它在所有客户中运行1到无穷大,这不是我的我正在寻找 - 我在某个地方设置错了,或者这不是一个选择?
希望有意义 - 感谢您的帮助
答案 0 :(得分:4)
如果没有实现插入行的自定义存储过程并检查以适当地增加Id,我可以想到没有自动的方法来实现这一点,而更多知识的其他人可能有更好的想法。
然而,这让我觉得使代理键自然化 - 这并不总是一个好主意。
更多信息:
答案 1 :(得分:1)
对于常规标识列,这不是一个真正的选项,但您可以设置插入触发器来自动填充用户ID。
执行此操作的简单方法是让触发器从users表中为插入记录上的customer id选择max user id,然后为其添加一个。但是,如果有多个人同时创建用户记录,那么你会遇到并发问题。
更好的解决方案是在customers表上有一个NextUserID列。在您的触发器中,您将:
这应该确保同时添加用户不会导致多次使用相同的用户ID。
所有这一切,我建议你不要这样做。这比它的价值更麻烦,开始时只是一个坏主意。
答案 2 :(得分:1)
因此,您希望生成的user_id字段在customer_id的范围内递增。
我无法想到存在该概念的一个数据库。
您可以使用触发器实现它。但我的问题是:为什么?
代理键应该没有任何意义。为什么你会试图制作一个同时代替并暗示秩序的钥匙?
我的建议:
创建一个date_created字段,默认为getDate()。这将允许您了解创建每个user_id的顺序(基于时间)。
创建一个序数字段 - 可以通过触发器更新,以支持该订单。
希望有所帮助。