代码之家  ›  专栏  ›  技术社区  ›  Josh

在SQL Server上为外键约束添加排序顺序

  •  1
  • Josh  · 技术社区  · 15 年前

    如何在以下语句中添加外键排序顺序:

    ALTER TABLE [dbo].[ActionLog] 
     WITH CHECK ADD CONSTRAINT [FK_ActionLog_Order] FOREIGN KEY([OrderID])
    

    我希望OrderID是降序的。

    3 回复  |  直到 15 年前
        1
  •  4
  •   OMG Ponies    15 年前

    外键约束只确保引用的表中已经存在值,而不是顺序。对于引用完整性,数据库不关心数据的顺序。

    确保结果集中的顺序的唯一方法是使用ORDERBY子句。

        2
  •  2
  •   JonPayne    15 年前

    对外键下命令是无稽之谈。外键是一种强加规则的方法,即OrderId字段中的值(在您的示例中)必须存在于另一个表中。它与表的集群无关(这是在表中施加顺序的唯一方法)。

    顺便说一句,你还没有显示完整的声明,因为有一个 REFERENCES table(column) 在ADD CONSTRAINT语句的末尾。

    如果确实希望表中的数据按OrderID顺序存储,则需要添加一个聚类索引,例如

    CREATE UNIQUE CLUSTERED INDEX CIX_Action_log
       ON Action_log (OrderID)
    GO
    

    但我不得不怀疑你这样做的动机。

        3
  •  0
  •   Cade Roux    15 年前

    引用Orders(OrderID)的ActionLog.OrderID上的外键约束将要求Orders中引用的列形成唯一键,因此需要对其进行某种约束或索引 在可以首先应用外键约束之前。此时,您可以指定 . 这样的约束是为了有效地从ActionLog获取订单,并且通常在访问ActionLog时没有任何/太多发言权。

    如果需要按OrderID提取ActionLog,则必须自己添加索引。