【问题标题】:Auto increment over multiple identity columns in MS SQL 2005 or 2008在 MS SQL 2005 或 2008 中自动递增多个标识列
【发布时间】:2011-03-07 05:17:46
【问题描述】:

我想在 MS SQL 中有两个不同的表,例如用户和组,都带有标识列。可以在两个标识列上创建自动增量吗?我想要第三个表,其中包含这两个表的共同信息,并且我想识别唯一记录。

在 Oracle 中是 SEQUENCE。

有可能吗?

谢谢,

马丁·皮尔奇

【问题讨论】:

    标签: sql-server database-design identity auto-increment multiple-tables


    【解决方案1】:

    对于 SQL Server,您获得了 Identity property

    您的第三个表应该通过foreign key 引用用户和组。

    要实现第三个表中两列的唯一性,只需使用唯一约束,如下所示:

    CREATE TABLE Third (
      id_user INT references Users(id),
      id_group INT references Groups(id),
      CONSTRAINT user_group_unique UNIQUE(id_user, id_group)
    );
    

    【讨论】:

      【解决方案2】:

      我不确定您在寻找什么,但您可以使用IDENTITY 属性在 SQL Server 中设置自动递增字段:

      CREATE TABLE new_employees
      (
       id_num int IDENTITY(1,1),
       fname varchar (20),
       minit char(1),
       lname varchar(30)
      );
      

      在上面的示例中(取自链接页面),id_num 字段将自动递增,从种子 1 开始并递增 1。

      您可以在每个表上都有这样一个字段,也可以在一个多对多表上连接两者。

      【讨论】:

        【解决方案3】:

        Afaik,SQL Server 没有可以在多个表中使用命名标识的概念(参见 Oracles SEQUENCE

        您有几个选项可以区分来自两个表的数据

        • 在两个表中使用GUID 作为您的 ID 列。
        • 在您的第三个表中,操作两个表之一的 ID,再次生成唯一 ID(例如与 -1 相乘)。 我假设您的第三张表将是其他两张表的视图。
        • 重新考虑您的设计,了解为什么需要这样的构造。

        如果无法更改设计,我会首选使用 GUID。

        【讨论】:

        • GUID 是解决方案,但它太大 - 16 字节。我会尝试用另一种方式解决它
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-09-16
        • 1970-01-01
        • 2016-02-22
        • 1970-01-01
        • 2014-04-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多