SQL表设计-标识列
SQLServer2008数据库问题 我有两个表,分别称为Customers和Users,其中单个客户可以有1到n个用户。Customers表生成一个CustomerId,该ID是一个种子标识,其增量为+1。在Users表中,我想要的是一个由CustomerId和序列号组成的复合键,这样在所有情况下,第一个用户的序列号都是1,后续用户的序列号都是x+1 所以这张桌子看起来像这样SQL表设计-标识列,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,SQLServer2008数据库问题 我有两个表,分别称为Customers和Users,其中单个客户可以有1到n个用户。Customers表生成一个CustomerId,该ID是一个种子标识,其增量为+1。在Users表中,我想要的是一个由CustomerId和序列号组成的复合键,这样在所有情况下,第一个用户的序列号都是1,后续用户的序列号都是x+1 所以这张桌子看起来像这样 客户ID(主键,FK) 用户标识(PK) 名字 …例如,如果客户485有三个客户,则数据将看起来像 Custome
- 客户ID(主键,FK)
- 用户标识(PK)
- 名字
CustomerId | UserId | Name
----------
485 | 1 | John
485 | 2 | Mark
485 | 3 | Luke
我很感激我可以手动为UserId添加1,2,3,…,n条目,但是我希望在SQL中插入行时自动执行此操作,因此,在所示的示例中,我可以有效地插入带有CustomerId和SQL Server保护标识的名称等的行。有没有办法通过数据库设计本身做到这一点?当我将UserId设置为标识时,它会在所有客户中运行1到无穷大,这不是我要寻找的-我的设置是否有误在某个地方,或者这不是一个选项
希望这是有意义的-感谢您的帮助我想不出任何自动方法来实现这一点,除非实现一个自定义存储过程来插入行并检查以适当地增加Id,尽管其他有更多知识的人可能会有更好的主意 然而,在我看来,这意味着加入代理密钥——这并不总是一个好主意 更多信息请点击此处:
如果不实现一个自定义存储过程来插入行并检查以适当地增加Id,我想不出任何自动方法来实现这一点,尽管其他有更多知识的人可能会有更好的想法 然而,在我看来,这意味着加入代理密钥——这并不总是一个好主意 更多信息请点击此处:
对于常规标识列,这不是一个真正的选项,但是您可以设置一个插入触发器来自动填充用户id 最简单的方法是让触发器从users表中为插入的记录上的客户id选择最大用户id,然后向其中添加一个。但是,如果有多个人同时创建用户记录,则会遇到并发问题 更好的解决方案是在customers表上有一个NextUserID列。在触发器中,您将:
尽管如此,我还是建议你不要这样做。这比它的价值更麻烦,而且一开始就闻起来是个坏主意 对于常规标识列,这不是一个真正的选项,但是您可以设置一个插入触发器来自动填充用户id 最简单的方法是让触发器从users表中为插入的记录上的客户id选择最大用户id,然后向其中添加一个。但是,如果有多个人同时创建用户记录,则会遇到并发问题 更好的解决方案是在customers表上有一个NextUserID列。在触发器中,您将:
尽管如此,我还是建议你不要这样做。这比它的价值更麻烦,而且一开始就闻起来是个坏主意 因此您需要一个生成的user\u id字段,该字段在customer\u id的范围内递增 我想不出有哪一个数据库存在这种概念 你可以用触发器来实现它。但我的问题是:为什么 代理键应该没有任何意义。为什么您要尝试制作一个同时是代理项并暗示顺序的键 我的建议是:
希望这会有所帮助。因此,您希望生成一个在客户id范围内递增的用户id字段 我想不出有哪一个数据库存在这种概念 你可以用触发器来实现它。但我的问题是:为什么 代理键应该没有任何意义。为什么您要尝试制作一个同时是代理项并暗示顺序的键 我的建议是:
希望能有帮助。我很困惑。您是否希望标识列在每次插入行时自动递增?在用户表中,是-但对于每个不同的客户,始终以1作为种子。如果我将UserId设置为一个标识列(作为CustomerId复合键的一部分),它似乎会无限增加。对不起,我觉得这很难解释!我很困惑。您是否希望标识列在每次插入行时自动递增?在用户表中,是-但对于每个不同的自定义项,始终以1作为种子